From BATV+6e58e3a765969f5bf11a+2138+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 1 07:44:15 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61CiBFa010475 for ; Wed, 1 Jul 2009 07:44:14 -0500 X-ASG-Debug-ID: 1246452662-438102ba0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C3D0E9BC356 for ; Wed, 1 Jul 2009 05:51:02 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id bWSDjlRXr16Zsf2X for ; Wed, 01 Jul 2009 05:51:02 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MLzB3-0003TC-E9; Wed, 01 Jul 2009 12:44:41 +0000 Date: Wed, 1 Jul 2009 08:44:41 -0400 From: Christoph Hellwig To: Patrick Schreurs Cc: linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode Message-ID: <20090701124441.GA12844@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4A7205.6010101@news-service.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246452663 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Actually you might want to give this patch a try which fixes a race affecting the reclaim tag in iget: Index: xfs/fs/xfs/xfs_iget.c =================================================================== --- xfs.orig/fs/xfs/xfs_iget.c 2009-06-04 13:27:41.901946950 +0200 +++ xfs/fs/xfs/xfs_iget.c 2009-06-04 14:08:08.837816707 +0200 @@ -132,80 +132,89 @@ xfs_iget_cache_hit( int flags, int lock_flags) __releases(pag->pag_ici_lock) { + struct inode *inode = VFS_I(ip); struct xfs_mount *mp = ip->i_mount; - int error = EAGAIN; + int error; + + spin_lock(&ip->i_flags_lock); /* - * If INEW is set this inode is being set up - * If IRECLAIM is set this inode is being torn down - * Pause and try again. + * This inode is being torn down, pause and try again. */ - if (xfs_iflags_test(ip, (XFS_INEW|XFS_IRECLAIM))) { + if (ip->i_flags & XFS_IRECLAIM) { XFS_STATS_INC(xs_ig_frecycle); + error = EAGAIN; goto out_error; } - /* If IRECLAIMABLE is set, we've torn down the vfs inode part */ - if (xfs_iflags_test(ip, XFS_IRECLAIMABLE)) { + /* + * If we are racing with another cache hit that is currently recycling + * this inode out of the XFS_IRECLAIMABLE state, wait for the + * initialisation to complete before continuing. + */ + if (ip->i_flags & XFS_INEW) { + spin_unlock(&ip->i_flags_lock); + read_unlock(&pag->pag_ici_lock); - /* - * If lookup is racing with unlink, then we should return an - * error immediately so we don't remove it from the reclaim - * list and potentially leak the inode. - */ - if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { - error = ENOENT; - goto out_error; - } + XFS_STATS_INC(xs_ig_frecycle); + wait_on_inode(inode); + return EAGAIN; + } + /* + * If lookup is racing with unlink, then we should return an + * error immediately so we don't remove it from the reclaim + * list and potentially leak the inode. + */ + if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { + error = ENOENT; + goto out_error; + } + + /* + * If IRECLAIMABLE is set, we've torn down the vfs inode part already. + * Need to carefully get it back into useable state. + */ + if (ip->i_flags & XFS_IRECLAIMABLE) { xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); /* - * We need to re-initialise the VFS inode as it has been - * 'freed' by the VFS. Do this here so we can deal with - * errors cleanly, then tag it so it can be set up correctly - * later. + * We need to set XFS_INEW atomically with clearing the + * reclaimable tag so that we do have an indicator of the + * inode still being initialized. */ - if (!inode_init_always(mp->m_super, VFS_I(ip))) { + ip->i_flags |= XFS_INEW; + __xfs_inode_clear_reclaim_tag(pag, ip); + + spin_unlock(&ip->i_flags_lock); + read_unlock(&pag->pag_ici_lock); + + if (unlikely(!inode_init_always(mp->m_super, inode))) { + printk("node_init_always failed!!\n"); + + /* + * Re-initializing the inode failed, and we are in deep + * trouble. Try to re-add it to the reclaim list. + */ + read_lock(&pag->pag_ici_lock); + spin_lock(&ip->i_flags_lock); + + ip->i_flags &= ~XFS_INEW; + __xfs_inode_set_reclaim_tag(pag, ip); + error = ENOMEM; goto out_error; } - - /* - * We must set the XFS_INEW flag before clearing the - * XFS_IRECLAIMABLE flag so that if a racing lookup does - * not find the XFS_IRECLAIMABLE above but has the igrab() - * below succeed we can safely check XFS_INEW to detect - * that this inode is still being initialised. - */ - xfs_iflags_set(ip, XFS_INEW); - xfs_iflags_clear(ip, XFS_IRECLAIMABLE); - - /* clear the radix tree reclaim flag as well. */ - __xfs_inode_clear_reclaim_tag(mp, pag, ip); - } else if (!igrab(VFS_I(ip))) { + } else { /* If the VFS inode is being torn down, pause and try again. */ - XFS_STATS_INC(xs_ig_frecycle); - goto out_error; - } else if (xfs_iflags_test(ip, XFS_INEW)) { - /* - * We are racing with another cache hit that is - * currently recycling this inode out of the XFS_IRECLAIMABLE - * state. Wait for the initialisation to complete before - * continuing. - */ - wait_on_inode(VFS_I(ip)); - } + if (!igrab(inode)) + goto out_error; - if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { - error = ENOENT; - iput(VFS_I(ip)); - goto out_error; + /* We've got a live one. */ + spin_unlock(&ip->i_flags_lock); + read_unlock(&pag->pag_ici_lock); } - /* We've got a live one. */ - read_unlock(&pag->pag_ici_lock); - if (lock_flags != 0) xfs_ilock(ip, lock_flags); @@ -215,6 +224,7 @@ xfs_iget_cache_hit( return 0; out_error: + spin_unlock(&ip->i_flags_lock); read_unlock(&pag->pag_ici_lock); return error; } Index: xfs/fs/xfs/linux-2.6/xfs_sync.c =================================================================== --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:40:09.135939715 +0200 +++ xfs/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:59:17.978816696 +0200 @@ -607,6 +607,17 @@ xfs_reclaim_inode( return 0; } +void +__xfs_inode_set_reclaim_tag( + struct xfs_perag *pag, + struct xfs_inode *ip) +{ + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); + + radix_tree_tag_set(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); + __xfs_iflags_set(ip, XFS_IRECLAIMABLE); +} + /* * We set the inode flag atomically with the radix tree tag. * Once we get tag lookups on the radix tree, this inode flag @@ -621,9 +632,7 @@ xfs_inode_set_reclaim_tag( read_lock(&pag->pag_ici_lock); spin_lock(&ip->i_flags_lock); - radix_tree_tag_set(&pag->pag_ici_root, - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); - __xfs_iflags_set(ip, XFS_IRECLAIMABLE); + __xfs_inode_set_reclaim_tag(pag, ip); spin_unlock(&ip->i_flags_lock); read_unlock(&pag->pag_ici_lock); xfs_put_perag(mp, pag); @@ -631,30 +640,15 @@ xfs_inode_set_reclaim_tag( void __xfs_inode_clear_reclaim_tag( - xfs_mount_t *mp, - xfs_perag_t *pag, - xfs_inode_t *ip) -{ - radix_tree_tag_clear(&pag->pag_ici_root, - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); -} - -void -xfs_inode_clear_reclaim_tag( - xfs_inode_t *ip) + struct xfs_perag *pag, + struct xfs_inode *ip) { - xfs_mount_t *mp = ip->i_mount; - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); - read_lock(&pag->pag_ici_lock); - spin_lock(&ip->i_flags_lock); - __xfs_inode_clear_reclaim_tag(mp, pag, ip); - spin_unlock(&ip->i_flags_lock); - read_unlock(&pag->pag_ici_lock); - xfs_put_perag(mp, pag); + ip->i_flags &= ~XFS_IRECLAIMABLE; + radix_tree_tag_clear(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); } - STATIC void xfs_reclaim_inodes_ag( xfs_mount_t *mp, Index: xfs/fs/xfs/linux-2.6/xfs_sync.h =================================================================== --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:53:32.994814723 +0200 +++ xfs/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:58:54.746942001 +0200 @@ -51,7 +51,6 @@ int xfs_reclaim_inode(struct xfs_inode * int xfs_reclaim_inodes(struct xfs_mount *mp, int noblock, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); -void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, - struct xfs_inode *ip); +void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); +void __xfs_inode_clear_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); #endif From BATV+6e58e3a765969f5bf11a+2138+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 1 09:55:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61Etn7E017399 for ; Wed, 1 Jul 2009 09:55:51 -0500 X-ASG-Debug-ID: 1246460180-488400d70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 602A13375D9 for ; Wed, 1 Jul 2009 07:56:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ihzfaLRHrJJm2BM9 for ; Wed, 01 Jul 2009 07:56:21 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MM1ES-0003ZQ-Ma; Wed, 01 Jul 2009 14:56:20 +0000 Date: Wed, 1 Jul 2009 10:56:20 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com, linux-kernel@vger.kernel.org X-ASG-Orig-Subj: XFS status update for June 2009 Subject: XFS status update for June 2009 Message-ID: <20090701145620.GA13061@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246460181 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On June 9th we finally saw the release of Linux 2.6.30. For XFS this release mostly contains the improved ENOSPC handling, but also various smaller bugfixes and lots of cleanups. The code size of XFS decreased again by 500 lines of code in this release. The Linux 2.6.31 merge opened in the mid of the month and some big XFS changes have been pushed: A removal of the quotaops infrastructure which simplifies the quota implementation, the switch from XFS's own Posix ACL implementation to the generic one shared by various other filesystems which also supports in-memory caching of ACLs and another incremental refactoring of the sync code. A patch to better track dirty inodes and work around issues in the way the VFS updates the access time stamp on inodes has been reposted and discussed. Another patch to converting the existing XFS tracing infrastructure to use the ftrace even tracer has been posted. On the userspace side there have been a few updates to xfsprogs, including some repair fixes and a new fallocate command for xfs_io. There were major updates for xfstests: The existing aio-dio-regress testsuite has been merged into xfstests, and various changes went into the tree to make xfstests better suitable for use with other filesystems. The attr and acl projects which have been traditionally been hosted as part of the XFS userspace utilities have now been split into a separate project maintained by Andreas Gruenbacher, who has been doing most of the work on it, and moved to the Savannah hosting platform. From felixb@sgi.com Wed Jul 1 11:09:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61G9Wtp021226 for ; Wed, 1 Jul 2009 11:09:32 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 68080AC011 for ; Wed, 1 Jul 2009 09:10:00 -0700 (PDT) Received: from eagdhcp-232-157.americas.sgi.com (eagdhcp-232-157.americas.sgi.com [128.162.232.157]) by estes.americas.sgi.com (Postfix) with ESMTP id F2D3B7000103; Wed, 1 Jul 2009 11:09:59 -0500 (CDT) Cc: Christoph Hellwig , xfs mailing list Message-Id: <708E7D36-A57F-4ABD-935C-6AF6524E364B@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A48D218.5050208@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] add more statics & drop some unused functions Date: Wed, 1 Jul 2009 11:10:01 -0500 References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: > Christoph Hellwig wrote: >> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>> A lot more functions could be made static, but they need >>> forward declarations; this does some easy ones, and also >>> found a few unused functions in the process. >> >> Looks good to me. >> > > Felix, do you plan to merge this one? Yep, will merge and push it to oss shortly. Felix From a.beregalov@gmail.com Wed Jul 1 11:20:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61GKoEA021715 for ; Wed, 1 Jul 2009 11:20:50 -0500 X-ASG-Debug-ID: 1246465281-48c702b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4A779337BAD for ; Wed, 1 Jul 2009 09:21:21 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id NSU20wdj3pVBoWo7 for ; Wed, 01 Jul 2009 09:21:21 -0700 (PDT) Received: by bwz10 with SMTP id 10so888416bwz.20 for ; Wed, 01 Jul 2009 09:21:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=38TWLhQghkcnwHj4DIpwACcmzjEtABa/+BRxdJLRDFY=; b=a+loPMJqpoqIHeE3s1CS+6DPGSiHhOqfXfVIbGYimWKL3GUnjjJMXRmuDhFdfmsRFs 53DzZYn/tmAUpS4K0opjL8oyrB0SR6eVO7nQQx9IHA3S7J9iPJt2iQuXjHRc/NuTs8cw L+bYVVDK0dDZI41KU00ixvkYbOpyr8klHIO+Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=tpA5JgY1S/Ofxft9QWid5YX8sO0jZqsopjjnKxwRjOEVREJFbIb5THYEMz6myqfXUO AgR57PknffM6CDanjufA1KpzHnhW9RloSWSaWaCrL0mzxek2EqfkeXVt6reKkoL/kuNf 71V1W34Xun3Mn8TzU65DDtiMtdKjPI5RdBcjg= MIME-Version: 1.0 Received: by 10.204.120.193 with SMTP id e1mr9735909bkr.147.1246465280270; Wed, 01 Jul 2009 09:21:20 -0700 (PDT) In-Reply-To: References: <20090604092330.GT16929@discord.disaster> Date: Wed, 1 Jul 2009 20:21:20 +0400 Message-ID: X-ASG-Orig-Subj: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! Subject: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! From: Alexander Beregalov To: Dave Chinner Cc: Kernel Testers List , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1246465282 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2273 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/6/5 Alexander Beregalov : > 2009/6/4 Dave Chinner : >> On Mon, Jun 01, 2009 at 07:22:56PM +0400, Alexander Beregalov wrote: >>> Hi >>> >>> Assertion failed: *nmap >=3D 1, file: fs/xfs/xfs_bmap.c, line: 4846 >> ..... >>> Call Trace: >>> =C2=A0[] xfs_bmapi+0xad/0x1ad0 >>> =C2=A0[] xfs_dir2_leaf_getdents+0x640/0x7b0 >>> =C2=A0[] xfs_readdir+0x12c/0x140 >>> =C2=A0[] xfs_file_readdir+0x47/0x70 >>> =C2=A0[] vfs_readdir+0xd0/0xf0 >>> =C2=A0[] sys_getdents+0x96/0x110 >>> =C2=A0[] system_call_fastpath+0x16/0x1b >> >> I'd say this indicates a corrupted directory. =C2=A0Can you run >> 'xfs_repair -n' over the filesystem and see if it finds a bad >> directory? Still cannot fix the filesystem. After repairing all corruptions from LiveCD it still fails on the same workload. Do you need metadump or anything else? From sandeen@sandeen.net Wed Jul 1 14:53:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61JrJEh031156 for ; Wed, 1 Jul 2009 14:53:19 -0500 X-ASG-Debug-ID: 1246478411-473701390000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 297A31499232 for ; Wed, 1 Jul 2009 13:00:12 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0ysHC6c0IfLiu85n for ; Wed, 01 Jul 2009 13:00:12 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id A0FD5AABFCC; Wed, 1 Jul 2009 14:53:48 -0500 (CDT) Message-ID: <4A4BBECC.8000308@sandeen.net> Date: Wed, 01 Jul 2009 14:53:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Jesse Stroik CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> In-Reply-To: <4A4A7D44.7040009@ssec.wisc.edu> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246478413 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085, BSF_SC1_TG070 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC1_TG070 Custom Rule TG070 0.10 BSF_SC0_SA085 Custom Rule SA085 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Jesse Stroik wrote: > Eric, > > Eric Sandeen wrote: >> Jesse Stroik wrote: >>> I have a server with a ~20TB xfs file system on Linux >>> (2.6.18-92.1.22.el5) and am running xfsprogs-2.9.4-4.el5. We had a few >>> corrupted files which I believe were due to a SCSI issue after a recent >>> power outage. Due to the corruption, I ran xfs_check and would like to >>> run xfs_repair on the system. >> It'd really be great to test more recent xfsprogs first, that one is >> about 2 years old. >> >> You can probably grab any recent fedora src.rpm and rebuild it, and >> later go back to the centos version if you wish. > > > I fetched the current version from SVN using these directions: > http://xfs.org/index.php/Getting_the_latest_source_code > > I get identical results. > > -------- > ... > reset bad sb for ag 31 > reset bad agf for ag 31 > reset bad agi for ag 31 > Segmentation fault Ok, from a metadump image Jesse provided (thanks!) it's dying in here: bno = be32_to_cpu(agfl->agfl_bno[i]); printf("agfl at %p i is %d agfl_bno[i] %u bno is %u\n", agfl, i, agfl->agfl_bno[i], bno); if (verify_agbno(mp, be32_to_cpu(agf->agf_seqno), bno)) set_agbno_state(mp, be32_to_cpu(agf->agf_seqno), bno, XR_E_FREE); agfl_bno looks corrupt, and bno is coming out to be huge. set_agbno_state() does: *(ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM) = .... where ag_blockno is that bno above; this wanders us off into bad memory and boom. I'll see what we can do to fix it up. -Eric From sandeen@sandeen.net Wed Jul 1 15:32:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61KWWuB033108 for ; Wed, 1 Jul 2009 15:32:33 -0500 X-ASG-Debug-ID: 1246480766-04d300240000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E04A51499037 for ; Wed, 1 Jul 2009 13:39:26 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id SRuW2cBUhfo8Uefn for ; Wed, 01 Jul 2009 13:39:26 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id DE1F0AABFCC; Wed, 1 Jul 2009 15:33:03 -0500 (CDT) Message-ID: <4A4BC7FF.6050004@sandeen.net> Date: Wed, 01 Jul 2009 15:33:03 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss , Jesse Stroik X-ASG-Orig-Subj: [PATCH] xfs_repair: fix verify_ag_bno() overflow Subject: [PATCH] xfs_repair: fix verify_ag_bno() overflow Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246480766 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2290 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The last test in verify_ag_bno() may overflow: return (agbno >= (sbp->sb_dblocks - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); because sb_agcount & sb_agblocks are 32-bit integers; this may then miss corrupt agbnos for the last ag, which can in turn lead to out of bounds memory accesses later, for example when the block nr is used to offset in set_agbno_state(): addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; Also make the first test simpler; agbno > sb_agblocks is -always- bad, regardless of the agno. This may even speed it up a tiny bit. Reported-by: Jesse Stroik Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index fdf52db..f50f1ad 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -315,11 +315,14 @@ verify_ag_bno(xfs_sb_t *sbp, xfs_agnumber_t agno, xfs_agblock_t agbno) { - if (agno < (sbp->sb_agcount - 1)) - return (agbno >= sbp->sb_agblocks); - if (agno == (sbp->sb_agcount - 1)) + /* in all cases bno >= agblocks is bad */ + if (agbno >= sbp->sb_agblocks) + return 1; + /* last ag may be smaller */ + if (agno == (sbp->sb_agcount - 1)) return (agbno >= (sbp->sb_dblocks - - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * + sbp->sb_agblocks))); return 1; } From sandeen@sandeen.net Wed Jul 1 15:33:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61KXWLd033159 for ; Wed, 1 Jul 2009 15:33:33 -0500 X-ASG-Debug-ID: 1246480444-5db303cb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 26CE1338797 for ; Wed, 1 Jul 2009 13:34:04 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 9W4JHY6BGGk4NUsY for ; Wed, 01 Jul 2009 13:34:04 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 7BB91AABFCC; Wed, 1 Jul 2009 15:34:03 -0500 (CDT) Message-ID: <4A4BC83A.3080401@sandeen.net> Date: Wed, 01 Jul 2009 15:34:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Jesse Stroik CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> <4A4BBECC.8000308@sandeen.net> In-Reply-To: <4A4BBECC.8000308@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246480445 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.02 X-Barracuda-Spam-Status: No, SCORE=-1.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC1_TG070 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2289 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC1_TG070 Custom Rule TG070 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Ok, from a metadump image Jesse provided (thanks!) it's dying in here: > > bno = be32_to_cpu(agfl->agfl_bno[i]); > printf("agfl at %p i is %d agfl_bno[i] %u bno is %u\n", > agfl, i, agfl->agfl_bno[i], bno); > if (verify_agbno(mp, be32_to_cpu(agf->agf_seqno), bno)) > set_agbno_state(mp, be32_to_cpu(agf->agf_seqno), > bno, XR_E_FREE); > > agfl_bno looks corrupt, and bno is coming out to be huge. > > set_agbno_state() does: > > *(ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM) = .... > > where ag_blockno is that bno above; this wanders us off into bad memory > and boom. I'll see what we can do to fix it up. Ok patch sent, but now I hit: junking entry "soh " in directory inode 128 entry ".nsr" in shortform directory 128 references invalid inode 210397 junking entry ".nsr" in directory inode 128 bogus .. inode number (128) in directory inode 128, clearing inode number xfs_repair: dir2.c:2123: process_dir2: Assertion `(ino != mp->m_sb.sb_rootino && ino != *parent) || (ino == mp->m_sb.sb_rootino && (ino == *parent || need_root_dotdot == 1))' failed. Aborted that's one crunchy filesystem you've got there; what happened to it? -Eric From jstroik@ssec.wisc.edu Wed Jul 1 15:50:46 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61Kojjq036962 for ; Wed, 1 Jul 2009 15:50:46 -0500 X-ASG-Debug-ID: 1246481859-04c7006d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ssec.wisc.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B234C14993E4 for ; Wed, 1 Jul 2009 13:57:39 -0700 (PDT) Received: from ssec.wisc.edu (mahogany.ssec.wisc.edu [128.104.110.2]) by cuda.sgi.com with ESMTP id JXibA1mNMTg6sR72 for ; Wed, 01 Jul 2009 13:57:39 -0700 (PDT) Received: from arthur.ssec.wisc.edu (account jstroik [128.104.111.93] verified) by ssec.wisc.edu (CommuniGate Pro SMTP 5.2.13) with ESMTPSA id 30433411; Wed, 01 Jul 2009 15:51:16 -0500 Message-ID: <4A4BCC44.7050302@ssec.wisc.edu> Date: Wed, 01 Jul 2009 15:51:16 -0500 From: Jesse Stroik User-Agent: Thunderbird 2.0.0.17 (X11/20080915) MIME-Version: 1.0 To: Eric Sandeen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> <4A4BBECC.8000308@sandeen.net> <4A4BC83A.3080401@sandeen.net> In-Reply-To: <4A4BC83A.3080401@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mahogany.ssec.wisc.edu[128.104.110.2] X-Barracuda-Start-Time: 1246481859 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0203 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2290 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric, Thanks for addressing the issue with xfs_repair. > that's one crunchy filesystem you've got there; what happened to it? It's not entirely clear -- the JBOD and SAS controller seem to have gotten into inconsistent states and I was observing a few SCSI errors for those particular LUNs. While the system was exhibiting the SCSI errors, the user of this file system (and a few others like it on the host) noticed file corruption when reading/writing certain files, then spontaneous corruption after making copies of the files. I'll take a look at the new xfs_check and see what happens. Best, Jesse From sandeen@sandeen.net Wed Jul 1 15:51:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61Kpr8c037292 for ; Wed, 1 Jul 2009 15:51:54 -0500 X-ASG-Debug-ID: 1246481545-67a4031f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 31084338DC2 for ; Wed, 1 Jul 2009 13:52:25 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id nCRjoqoXLVw6mXLi for ; Wed, 01 Jul 2009 13:52:25 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 89370AABFCC; Wed, 1 Jul 2009 15:52:25 -0500 (CDT) Message-ID: <4A4BCC89.10202@sandeen.net> Date: Wed, 01 Jul 2009 15:52:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Jesse Stroik CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> <4A4BBECC.8000308@sandeen.net> <4A4BC83A.3080401@sandeen.net> <4A4BCC44.7050302@ssec.wisc.edu> In-Reply-To: <4A4BCC44.7050302@ssec.wisc.edu> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246481546 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2291 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Jesse Stroik wrote: > Eric, > > Thanks for addressing the issue with xfs_repair. > > >> that's one crunchy filesystem you've got there; what happened to it? > > > It's not entirely clear -- the JBOD and SAS controller seem to have > gotten into inconsistent states and I was observing a few SCSI errors > for those particular LUNs. While the system was exhibiting the SCSI > errors, the user of this file system (and a few others like it on the > host) noticed file corruption when reading/writing certain files, then > spontaneous corruption after making copies of the files. > > I'll take a look at the new xfs_check and see what happens. > > Best, > Jesse > Turns out that it runs to completion, but another run still finds corruption. And a debug build trips asserts, so I guess there are still issues. -Eric From sandeen@sandeen.net Wed Jul 1 17:15:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61MF2WW044257 for ; Wed, 1 Jul 2009 17:15:02 -0500 X-ASG-Debug-ID: 1246486533-7bcb00d70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8916633921D for ; Wed, 1 Jul 2009 15:15:33 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 2jZDDaF32ZghLUeC for ; Wed, 01 Jul 2009 15:15:33 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 93B72AABFCC; Wed, 1 Jul 2009 17:15:33 -0500 (CDT) Message-ID: <4A4BE005.3000102@sandeen.net> Date: Wed, 01 Jul 2009 17:15:33 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss , Jesse Stroik X-ASG-Orig-Subj: Re: [PATCH] xfs_repair: fix verify_ag_bno() overflow Subject: Re: [PATCH] xfs_repair: fix verify_ag_bno() overflow References: <4A4BC7FF.6050004@sandeen.net> In-Reply-To: <4A4BC7FF.6050004@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246486534 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2295 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Argh self-nak on that one, stupid thinko; it always returns 1 for a non-last AG :/ Just add the cast and don't get fancy! V2 below: ------- The last test in verify_ag_bno() may overflow: return (agbno >= (sbp->sb_dblocks - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); because sb_agcount & sb_agblocks are 32-bit integers; this may then miss corrupt agbnos for the last ag, which can in turn lead to out of bounds memory accesses later, for example when the block nr is used to offset in set_agbno_state(): addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; Reported-by: Jesse Stroik Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index fdf52db..84e1d05 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -319,7 +319,8 @@ verify_ag_bno(xfs_sb_t *sbp, return (agbno >= sbp->sb_agblocks); if (agno == (sbp->sb_agcount - 1)) return (agbno >= (sbp->sb_dblocks - - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * + sbp->sb_agblocks))); return 1; } From lmcilroy@redhat.com Wed Jul 1 20:52:26 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n621qPsu054394 for ; Wed, 1 Jul 2009 20:52:26 -0500 X-ASG-Debug-ID: 1246499959-0de801a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 241089BDA0A for ; Wed, 1 Jul 2009 18:59:19 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id usLwxTjb8G11Ft8E for ; Wed, 01 Jul 2009 18:59:19 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n621qbs6013852; Wed, 1 Jul 2009 21:52:37 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n621qaqN002183; Wed, 1 Jul 2009 21:52:36 -0400 Date: Wed, 1 Jul 2009 21:52:36 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Alexander Beregalov Cc: Kernel Testers List , xfs@oss.sgi.com, Dave Chinner Message-ID: <584076313.830951246499556455.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <824092896.830901246499419777.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! Subject: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1246499961 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2310 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Alexander, Are you running with this fix? http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-2.6.29.y.git;a=3Dc= ommitdiff;h=3Dd415867e0abc35e3b2f0d4196e98c339d6fe29a2 I've seen this assertion before and the above patch fixed it for me. Hmmm, looks like you're running a recent kernel so you should have this fix - maybe the fix wasn't quite right. Lachlan ----- "Alexander Beregalov" wrote: > 2009/6/5 Alexander Beregalov : > > 2009/6/4 Dave Chinner : > >> On Mon, Jun 01, 2009 at 07:22:56PM +0400, Alexander Beregalov > wrote: > >>> Hi > >>> > >>> Assertion failed: *nmap >=3D 1, file: fs/xfs/xfs_bmap.c, line: 4846 > >> ..... > >>> Call Trace: > >>> =C2=A0[] xfs_bmapi+0xad/0x1ad0 > >>> =C2=A0[] xfs_dir2_leaf_getdents+0x640/0x7b0 > >>> =C2=A0[] xfs_readdir+0x12c/0x140 > >>> =C2=A0[] xfs_file_readdir+0x47/0x70 > >>> =C2=A0[] vfs_readdir+0xd0/0xf0 > >>> =C2=A0[] sys_getdents+0x96/0x110 > >>> =C2=A0[] system_call_fastpath+0x16/0x1b > >> > >> I'd say this indicates a corrupted directory. =C2=A0Can you run > >> 'xfs_repair -n' over the filesystem and see if it finds a bad > >> directory? >=20 > Still cannot fix the filesystem. After repairing all corruptions from > LiveCD it still fails on the same workload. >=20 > Do you need metadump or anything else? >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Wed Jul 1 23:13:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n624DTca061473 for ; Wed, 1 Jul 2009 23:13:29 -0500 X-ASG-Debug-ID: 1246508040-038501f90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 961F113359CC for ; Wed, 1 Jul 2009 21:14:00 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id CAgWbMoYOrnE699j for ; Wed, 01 Jul 2009 21:14:00 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 35F6EAABFCC; Wed, 1 Jul 2009 23:14:00 -0500 (CDT) Message-ID: <4A4C3407.60501@sandeen.net> Date: Wed, 01 Jul 2009 23:13:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss , Jesse Stroik X-ASG-Orig-Subj: [PATCH V3] xfs_repair: fix agcount*agblocks overflows Subject: [PATCH V3] xfs_repair: fix agcount*agblocks overflows References: <4A4BC7FF.6050004@sandeen.net> <4A4BE005.3000102@sandeen.net> In-Reply-To: <4A4BE005.3000102@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246508041 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2315 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean (V3: found another spot with this problem) The last test in verify_ag_bno() may overflow: return (agbno >= (sbp->sb_dblocks - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); because sb_agcount & sb_agblocks are 32-bit integers; this may then miss corrupt agbnos for the last ag, which can in turn lead to out of bounds memory accesses later, for example when the block nr is used to offset in set_agbno_state(): addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; Similar problems in mk_incore_fstree Reported-by: Jesse Stroik Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index fdf52db..84e1d05 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -319,7 +319,8 @@ verify_ag_bno(xfs_sb_t *sbp, return (agbno >= sbp->sb_agblocks); if (agno == (sbp->sb_agcount - 1)) return (agbno >= (sbp->sb_dblocks - - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * + sbp->sb_agblocks))); return 1; } diff --git a/repair/phase5.c b/repair/phase5.c index 2c243b6..77c7363 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -113,7 +113,8 @@ mk_incore_fstree(xfs_mount_t *mp, xfs_agnumber_t agno) ag_end = mp->m_sb.sb_agblocks; else ag_end = mp->m_sb.sb_dblocks - - mp->m_sb.sb_agblocks * (mp->m_sb.sb_agcount - 1); + (xfs_drfsbno_t)mp->m_sb.sb_agblocks * + (mp->m_sb.sb_agcount - 1); /* * ok, now find the number of extents, keep track of the From felixb@sgi.com Wed Jul 1 23:50:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n624og8m063613 for ; Wed, 1 Jul 2009 23:50:42 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 137D88F80AD for ; Wed, 1 Jul 2009 21:51:12 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id A8A387000103; Wed, 1 Jul 2009 23:51:11 -0500 (CDT) Cc: Christoph Hellwig , xfs mailing list Message-Id: <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A48D218.5050208@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] add more statics & drop some unused functions Date: Wed, 1 Jul 2009 23:51:10 -0500 References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: > Christoph Hellwig wrote: >> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>> A lot more functions could be made static, but they need >>> forward declarations; this does some easy ones, and also >>> found a few unused functions in the process. >> >> Looks good to me. >> > > Felix, do you plan to merge this one? Eric, this patch doesn't apply cleanly now: Applying xfs: add more statics & drop some unused functions error: patch failed: fs/xfs/linux-2.6/xfs_sync.c:640 error: fs/xfs/linux-2.6/xfs_sync.c: patch does not apply error: patch failed: fs/xfs/linux-2.6/xfs_sync.h:51 error: fs/xfs/linux-2.6/xfs_sync.h: patch does not apply Patch failed at 0002. Can you rebase and repost it? Thanks, Felix From sandeen@sandeen.net Thu Jul 2 00:09:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_64,J_CHICKENPOX_65 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62594W1066895 for ; Thu, 2 Jul 2009 00:09:04 -0500 X-ASG-Debug-ID: 1246511758-5831020e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 252E010951A2 for ; Wed, 1 Jul 2009 22:15:58 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0Zpy2W8SWtjdVF6F for ; Wed, 01 Jul 2009 22:15:58 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 8CBFDAABFCC; Thu, 2 Jul 2009 00:09:33 -0500 (CDT) Message-ID: <4A4C410D.5040205@sandeen.net> Date: Thu, 02 Jul 2009 00:09:33 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Felix Blyakher CC: Christoph Hellwig , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] add more statics & drop some unused functions Subject: Re: [PATCH] add more statics & drop some unused functions References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> In-Reply-To: <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246511760 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2319 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Felix Blyakher wrote: > On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: > > >> Christoph Hellwig wrote: >> >>> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>> >>>> A lot more functions could be made static, but they need >>>> forward declarations; this does some easy ones, and also >>>> found a few unused functions in the process. >>>> >>> Looks good to me. >>> >>> >> Felix, do you plan to merge this one? >> > > Eric, this patch doesn't apply cleanly now: > > Applying xfs: add more statics & drop some unused functions > error: patch failed: fs/xfs/linux-2.6/xfs_sync.c:640 > error: fs/xfs/linux-2.6/xfs_sync.c: patch does not apply > error: patch failed: fs/xfs/linux-2.6/xfs_sync.h:51 > error: fs/xfs/linux-2.6/xfs_sync.h: patch does not apply > Patch failed at 0002. > > Can you rebase and repost it? > > Thanks, > Felix > > This one applies to linus' tree ok.... -Eric diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index a220d36..c709ed6 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c @@ -687,7 +687,7 @@ xfs_barrier_test( return error; } -void +STATIC void xfs_mountfs_check_barriers(xfs_mount_t *mp) { int error; diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c index b619d6b..fbf3e02 100644 --- a/fs/xfs/linux-2.6/xfs_sync.c +++ b/fs/xfs/linux-2.6/xfs_sync.c @@ -740,21 +740,6 @@ __xfs_inode_clear_reclaim_tag( XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); } -void -xfs_inode_clear_reclaim_tag( - xfs_inode_t *ip) -{ - xfs_mount_t *mp = ip->i_mount; - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); - - read_lock(&pag->pag_ici_lock); - spin_lock(&ip->i_flags_lock); - __xfs_inode_clear_reclaim_tag(mp, pag, ip); - spin_unlock(&ip->i_flags_lock); - read_unlock(&pag->pag_ici_lock); - xfs_put_perag(mp, pag); -} - STATIC int xfs_reclaim_inode_now( struct xfs_inode *ip, diff --git a/fs/xfs/linux-2.6/xfs_sync.h b/fs/xfs/linux-2.6/xfs_sync.h index 2a10301..23e7e7e 100644 --- a/fs/xfs/linux-2.6/xfs_sync.h +++ b/fs/xfs/linux-2.6/xfs_sync.h @@ -48,7 +48,6 @@ int xfs_reclaim_inode(struct xfs_inode *ip, int locked, int sync_mode); int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, struct xfs_inode *ip); diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h index f24b50b..af3cfeb 100644 --- a/fs/xfs/xfs_ag.h +++ b/fs/xfs/xfs_ag.h @@ -91,9 +91,6 @@ typedef struct xfs_agf { #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) #define XFS_BUF_TO_AGF(bp) ((xfs_agf_t *)XFS_BUF_PTR(bp)) -extern int xfs_read_agf(struct xfs_mount *mp, struct xfs_trans *tp, - xfs_agnumber_t agno, int flags, struct xfs_buf **bpp); - /* * Size of the unlinked inode hash table in the agi. */ diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index 2cf944e..6316004 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c @@ -2248,7 +2248,7 @@ xfs_alloc_put_freelist( /* * Read in the allocation group header (free/alloc section). */ -int /* error */ +STATIC int /* error */ xfs_read_agf( struct xfs_mount *mp, /* mount point structure */ struct xfs_trans *tp, /* transaction pointer */ diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 7928b99..9759724 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c @@ -3713,7 +3713,7 @@ done: * entry (null if none). Else, *lastxp will be set to the index * of the found entry; *gotp will contain the entry. */ -xfs_bmbt_rec_host_t * /* pointer to found extent entry */ +STATIC xfs_bmbt_rec_host_t * /* pointer to found extent entry */ xfs_bmap_search_multi_extents( xfs_ifork_t *ifp, /* inode fork pointer */ xfs_fileoff_t bno, /* block number searched for */ diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h index 1b8ff92..56f62d2 100644 --- a/fs/xfs/xfs_bmap.h +++ b/fs/xfs/xfs_bmap.h @@ -392,17 +392,6 @@ xfs_bmap_count_blocks( int whichfork, int *count); -/* - * Search the extent records for the entry containing block bno. - * If bno lies in a hole, point to the next entry. If bno lies - * past eof, *eofp will be set, and *prevp will contain the last - * entry (null if none). Else, *lastxp will be set to the index - * of the found entry; *gotp will contain the entry. - */ -xfs_bmbt_rec_host_t * -xfs_bmap_search_multi_extents(struct xfs_ifork *, xfs_fileoff_t, int *, - xfs_extnum_t *, xfs_bmbt_irec_t *, xfs_bmbt_irec_t *); - #endif /* __KERNEL__ */ #endif /* __XFS_BMAP_H__ */ diff --git a/fs/xfs/xfs_bmap_btree.c b/fs/xfs/xfs_bmap_btree.c index 5c1ade0..eb7b702 100644 --- a/fs/xfs/xfs_bmap_btree.c +++ b/fs/xfs/xfs_bmap_btree.c @@ -202,16 +202,6 @@ xfs_bmbt_get_state( ext_flag); } -/* Endian flipping versions of the bmbt extraction functions */ -void -xfs_bmbt_disk_get_all( - xfs_bmbt_rec_t *r, - xfs_bmbt_irec_t *s) -{ - __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), - get_unaligned_be64(&r->l1), s); -} - /* * Extract the blockcount field from an on disk bmap extent record. */ @@ -816,6 +806,16 @@ xfs_bmbt_trace_key( *l1 = 0; } +/* Endian flipping versions of the bmbt extraction functions */ +STATIC void +xfs_bmbt_disk_get_all( + xfs_bmbt_rec_t *r, + xfs_bmbt_irec_t *s) +{ + __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), + get_unaligned_be64(&r->l1), s); +} + STATIC void xfs_bmbt_trace_record( struct xfs_btree_cur *cur, diff --git a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h index 0e8df00..5549d49 100644 --- a/fs/xfs/xfs_bmap_btree.h +++ b/fs/xfs/xfs_bmap_btree.h @@ -220,7 +220,6 @@ extern xfs_fsblock_t xfs_bmbt_get_startblock(xfs_bmbt_rec_host_t *r); extern xfs_fileoff_t xfs_bmbt_get_startoff(xfs_bmbt_rec_host_t *r); extern xfs_exntst_t xfs_bmbt_get_state(xfs_bmbt_rec_host_t *r); -extern void xfs_bmbt_disk_get_all(xfs_bmbt_rec_t *r, xfs_bmbt_irec_t *s); extern xfs_filblks_t xfs_bmbt_disk_get_blockcount(xfs_bmbt_rec_t *r); extern xfs_fileoff_t xfs_bmbt_disk_get_startoff(xfs_bmbt_rec_t *r); diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c index e9df995..cde5a26 100644 --- a/fs/xfs/xfs_btree.c +++ b/fs/xfs/xfs_btree.c @@ -646,46 +646,6 @@ xfs_btree_read_bufl( } /* - * Get a buffer for the block, return it read in. - * Short-form addressing. - */ -int /* error */ -xfs_btree_read_bufs( - xfs_mount_t *mp, /* file system mount point */ - xfs_trans_t *tp, /* transaction pointer */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* allocation group block number */ - uint lock, /* lock flags for read_buf */ - xfs_buf_t **bpp, /* buffer for agno/agbno */ - int refval) /* ref count value for buffer */ -{ - xfs_buf_t *bp; /* return value */ - xfs_daddr_t d; /* real disk block address */ - int error; - - ASSERT(agno != NULLAGNUMBER); - ASSERT(agbno != NULLAGBLOCK); - d = XFS_AGB_TO_DADDR(mp, agno, agbno); - if ((error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, d, - mp->m_bsize, lock, &bp))) { - return error; - } - ASSERT(!bp || !XFS_BUF_GETERROR(bp)); - if (bp != NULL) { - switch (refval) { - case XFS_ALLOC_BTREE_REF: - XFS_BUF_SET_VTYPE_REF(bp, B_FS_MAP, refval); - break; - case XFS_INO_BTREE_REF: - XFS_BUF_SET_VTYPE_REF(bp, B_FS_INOMAP, refval); - break; - } - } - *bpp = bp; - return 0; -} - -/* * Read-ahead the block, don't wait for it, don't return a buffer. * Long-form addressing. */ @@ -2951,7 +2911,7 @@ error0: * inode we have to copy the single block it was pointing to into the * inode. */ -int +STATIC int xfs_btree_kill_iroot( struct xfs_btree_cur *cur) { diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h index 4f852b7..7fa0706 100644 --- a/fs/xfs/xfs_btree.h +++ b/fs/xfs/xfs_btree.h @@ -379,20 +379,6 @@ xfs_btree_read_bufl( int refval);/* ref count value for buffer */ /* - * Get a buffer for the block, return it read in. - * Short-form addressing. - */ -int /* error */ -xfs_btree_read_bufs( - struct xfs_mount *mp, /* file system mount point */ - struct xfs_trans *tp, /* transaction pointer */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* allocation group block number */ - uint lock, /* lock flags for read_buf */ - struct xfs_buf **bpp, /* buffer for agno/agbno */ - int refval);/* ref count value for buffer */ - -/* * Read-ahead the block, don't wait for it, don't return a buffer. * Long-form addressing. */ @@ -432,7 +418,6 @@ int xfs_btree_decrement(struct xfs_btree_cur *, int, int *); int xfs_btree_lookup(struct xfs_btree_cur *, xfs_lookup_t, int *); int xfs_btree_update(struct xfs_btree_cur *, union xfs_btree_rec *); int xfs_btree_new_iroot(struct xfs_btree_cur *, int *, int *); -int xfs_btree_kill_iroot(struct xfs_btree_cur *); int xfs_btree_insert(struct xfs_btree_cur *, int *); int xfs_btree_delete(struct xfs_btree_cur *, int *); int xfs_btree_get_rec(struct xfs_btree_cur *, union xfs_btree_rec **, int *); diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 1f22d65..2dcb3d7 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -641,7 +641,7 @@ xfs_iformat_btree( return 0; } -void +STATIC void xfs_dinode_from_disk( xfs_icdinode_t *to, xfs_dinode_t *from) @@ -1237,7 +1237,7 @@ xfs_isize_check( * In that case the pages will still be in memory, but the inode size * will never have been updated. */ -xfs_fsize_t +STATIC xfs_fsize_t xfs_file_last_byte( xfs_inode_t *ip) { @@ -3827,7 +3827,7 @@ xfs_iext_inline_to_direct( /* * Resize an extent indirection array to new_size bytes. */ -void +STATIC void xfs_iext_realloc_indirect( xfs_ifork_t *ifp, /* inode fork pointer */ int new_size) /* new indirection array size */ @@ -3852,7 +3852,7 @@ xfs_iext_realloc_indirect( /* * Switch from indirection array to linear (direct) extent allocations. */ -void +STATIC void xfs_iext_indirect_to_direct( xfs_ifork_t *ifp) /* inode fork pointer */ { diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 1804f86..5104dae 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -521,7 +521,6 @@ void xfs_ipin(xfs_inode_t *); void xfs_iunpin(xfs_inode_t *); int xfs_iflush(xfs_inode_t *, uint); void xfs_ichgtime(xfs_inode_t *, int); -xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); void xfs_lock_inodes(xfs_inode_t **, int, uint); void xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint); @@ -589,8 +588,6 @@ int xfs_itobp(struct xfs_mount *, struct xfs_trans *, struct xfs_buf **, uint); int xfs_iread(struct xfs_mount *, struct xfs_trans *, struct xfs_inode *, xfs_daddr_t, uint); -void xfs_dinode_from_disk(struct xfs_icdinode *, - struct xfs_dinode *); void xfs_dinode_to_disk(struct xfs_dinode *, struct xfs_icdinode *); void xfs_idestroy_fork(struct xfs_inode *, int); @@ -609,8 +606,6 @@ void xfs_iext_remove_inline(xfs_ifork_t *, xfs_extnum_t, int); void xfs_iext_remove_direct(xfs_ifork_t *, xfs_extnum_t, int); void xfs_iext_remove_indirect(xfs_ifork_t *, xfs_extnum_t, int); void xfs_iext_realloc_direct(xfs_ifork_t *, int); -void xfs_iext_realloc_indirect(xfs_ifork_t *, int); -void xfs_iext_indirect_to_direct(xfs_ifork_t *); void xfs_iext_direct_to_inline(xfs_ifork_t *, xfs_extnum_t); void xfs_iext_inline_to_direct(xfs_ifork_t *, int); void xfs_iext_destroy(xfs_ifork_t *); diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index aeb2d22..c471122 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -39,7 +39,7 @@ #include "xfs_error.h" #include "xfs_btree.h" -int +STATIC int xfs_internal_inum( xfs_mount_t *mp, xfs_ino_t ino) diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h index 1fb04e7..20792bf 100644 --- a/fs/xfs/xfs_itable.h +++ b/fs/xfs/xfs_itable.h @@ -99,11 +99,6 @@ xfs_bulkstat_one( void *dibuff, int *stat); -int -xfs_internal_inum( - xfs_mount_t *mp, - xfs_ino_t ino); - typedef int (*inumbers_fmt_pf)( void __user *ubuffer, /* buffer to write to */ const xfs_inogrp_t *buffer, /* buffer to read from */ diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index bcad5f4..679c7c4 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h @@ -451,8 +451,6 @@ extern int xlog_find_tail(xlog_t *log, extern int xlog_recover(xlog_t *log); extern int xlog_recover_finish(xlog_t *log); extern void xlog_pack_data(xlog_t *log, xlog_in_core_t *iclog, int); -extern void xlog_recover_process_iunlinks(xlog_t *log); - extern struct xfs_buf *xlog_get_bp(xlog_t *, int); extern void xlog_put_bp(struct xfs_buf *); diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 47da2fb..1099395 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -3263,7 +3263,7 @@ xlog_recover_process_one_iunlink( * freeing of the inode and its removal from the list must be * atomic. */ -void +STATIC void xlog_recover_process_iunlinks( xlog_t *log) { diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 5c6f092..8b6c9e8 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1568,7 +1568,7 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) * * The m_sb_lock must be held when this routine is called. */ -int +STATIC int xfs_mod_incore_sb_unlocked( xfs_mount_t *mp, xfs_sb_field_t field, diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index a512238..a6c023b 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -414,13 +414,10 @@ typedef struct xfs_mod_sb { extern int xfs_log_sbcount(xfs_mount_t *, uint); extern int xfs_mountfs(xfs_mount_t *mp); -extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); extern void xfs_unmountfs(xfs_mount_t *); extern int xfs_unmountfs_writesb(xfs_mount_t *); extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, int); -extern int xfs_mod_incore_sb_unlocked(xfs_mount_t *, xfs_sb_field_t, - int64_t, int); extern int xfs_mod_incore_sb_batch(xfs_mount_t *, xfs_mod_sb_t *, uint, int); extern int xfs_mount_log_sb(xfs_mount_t *, __int64_t); diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c index afee7eb..4b0613d 100644 --- a/fs/xfs/xfs_mru_cache.c +++ b/fs/xfs/xfs_mru_cache.c @@ -564,35 +564,6 @@ xfs_mru_cache_lookup( } /* - * To look up an element using its key, but leave its location in the internal - * lists alone, call xfs_mru_cache_peek(). If the element isn't found, this - * function returns NULL. - * - * See the comments above the declaration of the xfs_mru_cache_lookup() function - * for important locking information pertaining to this call. - */ -void * -xfs_mru_cache_peek( - xfs_mru_cache_t *mru, - unsigned long key) -{ - xfs_mru_cache_elem_t *elem; - - ASSERT(mru && mru->lists); - if (!mru || !mru->lists) - return NULL; - - spin_lock(&mru->lock); - elem = radix_tree_lookup(&mru->store, key); - if (!elem) - spin_unlock(&mru->lock); - else - __release(mru_lock); /* help sparse not be stupid */ - - return elem ? elem->value : NULL; -} - -/* * To release the internal data structure spinlock after having performed an * xfs_mru_cache_lookup() or an xfs_mru_cache_peek(), call xfs_mru_cache_done() * with the data store pointer. diff --git a/fs/xfs/xfs_mru_cache.h b/fs/xfs/xfs_mru_cache.h index dd58ea1..5d439f3 100644 --- a/fs/xfs/xfs_mru_cache.h +++ b/fs/xfs/xfs_mru_cache.h @@ -49,7 +49,6 @@ int xfs_mru_cache_insert(struct xfs_mru_cache *mru, unsigned long key, void * xfs_mru_cache_remove(struct xfs_mru_cache *mru, unsigned long key); void xfs_mru_cache_delete(struct xfs_mru_cache *mru, unsigned long key); void *xfs_mru_cache_lookup(struct xfs_mru_cache *mru, unsigned long key); -void *xfs_mru_cache_peek(struct xfs_mru_cache *mru, unsigned long key); void xfs_mru_cache_done(struct xfs_mru_cache *mru); #endif /* __XFS_MRU_CACHE_H__ */ diff --git a/fs/xfs/xfs_rw.h b/fs/xfs/xfs_rw.h index f76c003..ae65f0d 100644 --- a/fs/xfs/xfs_rw.h +++ b/fs/xfs/xfs_rw.h @@ -78,10 +78,4 @@ extern int xfs_read_buf(struct xfs_mount *mp, xfs_buftarg_t *btp, extern void xfs_ioerror_alert(char *func, struct xfs_mount *mp, xfs_buf_t *bp, xfs_daddr_t blkno); -/* - * Prototypes for functions in xfs_vnodeops.c. - */ -extern int xfs_free_eofblocks(struct xfs_mount *mp, struct xfs_inode *ip, - int flags); - #endif /* __XFS_RW_H__ */ diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index c4eca5e..1dd7068 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -716,7 +716,7 @@ xfs_fsync( * when the link count isn't zero and by xfs_dm_punch_hole() when * punching a hole to EOF. */ -int +STATIC int xfs_free_eofblocks( xfs_mount_t *mp, xfs_inode_t *ip, From felixb@sgi.com Thu Jul 2 00:24:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625O3B4067890 for ; Thu, 2 Jul 2009 00:24:03 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5A86A30407B for ; Wed, 1 Jul 2009 22:24:33 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id EC5807000103; Thu, 2 Jul 2009 00:24:32 -0500 (CDT) Cc: xfs-oss , Jesse Stroik Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A4C3407.60501@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH V3] xfs_repair: fix agcount*agblocks overflows Date: Thu, 2 Jul 2009 00:24:31 -0500 References: <4A4BC7FF.6050004@sandeen.net> <4A4BE005.3000102@sandeen.net> <4A4C3407.60501@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 1, 2009, at 11:13 PM, Eric Sandeen wrote: > (V3: found another spot with this problem) > > The last test in verify_ag_bno() may overflow: > > return (agbno >= (sbp->sb_dblocks - > ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); > > because sb_agcount & sb_agblocks are 32-bit integers; this > may then miss corrupt agbnos for the last ag, which can in > turn lead to out of bounds memory accesses later, for example > when the block nr is used to offset in set_agbno_state(): > > addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; > > Similar problems in mk_incore_fstree > > Reported-by: Jesse Stroik > Signed-off-by: Eric Sandeen Reviewed-by: Felix Blyakher > > --- > > diff --git a/repair/dinode.c b/repair/dinode.c > index fdf52db..84e1d05 100644 > --- a/repair/dinode.c > +++ b/repair/dinode.c > @@ -319,7 +319,8 @@ verify_ag_bno(xfs_sb_t *sbp, > return (agbno >= sbp->sb_agblocks); > if (agno == (sbp->sb_agcount - 1)) > return (agbno >= (sbp->sb_dblocks - > - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); > + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * > + sbp->sb_agblocks))); > return 1; > } > > diff --git a/repair/phase5.c b/repair/phase5.c > index 2c243b6..77c7363 100644 > --- a/repair/phase5.c > +++ b/repair/phase5.c > @@ -113,7 +113,8 @@ mk_incore_fstree(xfs_mount_t *mp, xfs_agnumber_t > agno) > ag_end = mp->m_sb.sb_agblocks; > else > ag_end = mp->m_sb.sb_dblocks - > - mp->m_sb.sb_agblocks * (mp->m_sb.sb_agcount - 1); > + (xfs_drfsbno_t)mp->m_sb.sb_agblocks * > + (mp->m_sb.sb_agcount - 1); > > /* > * ok, now find the number of extents, keep track of the > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@oss.sgi.com Thu Jul 2 00:27:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625Rvs7068256 for ; Thu, 2 Jul 2009 00:27:57 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n625RpbI068086; Thu, 2 Jul 2009 00:27:51 -0500 Date: Thu, 2 Jul 2009 00:27:51 -0500 Message-Id: <200907020527.n625RpbI068086@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, mainline, updated. v2.6.30-rc4-7941-g1d89b30 X-Git-Refname: refs/heads/mainline X-Git-Reftype: branch X-Git-Oldrev: 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 X-Git-Newrev: 1d89b30cc9be41af87881682ec82e2c107849dbe This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, mainline has been updated fd40261 Merge branch 'master' of git://oss.sgi.com/xfs/xfs into for-linus e83f1eb xfs: fix small mismerge in xfs_vn_mknod 493b87e xfs: fix warnings with CONFIG_XFS_QUOTA disabled 7747a0b xfs: fix freeing memory in xfs_getbmap() f950221 xfs: remove ->write_super and stop maintaining ->s_dirt 35fd035 Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs c905959 Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block ef14f0c xfs: use generic Posix ACL code 8b5403a xfs: remove SYNC_BDFLUSH b0710cc xfs: remove SYNC_IOWAIT 075fe10 xfs: split xfs_sync_inodes fe588ed xfs: use generic inode iterator in xfs_qm_dqrele_all_inodes 75f3cb1 xfs: introduce a per-ag inode iterator abc1064 xfs: remove unused parameter from xfs_reclaim_inodes 1da8eec xfs: factor out inode validation for sync 845b6d0 xfs: split inode flushing from xfs_sync_inodes_ag 5a34d5c xfs: split inode data writeback from xfs_sync_inodes_ag 7d09525 xfs: kill xfs_qmops 0c5e1ce xfs: validate quota log items during log recovery e169683 xfs: update max log size 4156e73 xfs: prevent deadlock in xfs_qm_shake() 0963248 xfs: fix overflow in xfs_growfs_data_private e1defc4 block: Do away with the notion of hardsect_size ec91d13 xfs: fix double unlock in xfs_swap_extents() 6321e3e xfs: fix getbmap vs mmap deadlock 4be4a00 xfs: a couple getbmap cleanups 2ac00af xfs: add more checks to superblock validation f25181f xfs_file_last_byte() needs to acquire ilock from 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: fs/xfs/Kconfig | 1 + fs/xfs/Makefile | 5 +- fs/xfs/linux-2.6/xfs_acl.c | 523 +++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_buf.c | 2 +- fs/xfs/linux-2.6/xfs_ioctl.c | 25 +- fs/xfs/linux-2.6/xfs_iops.c | 53 +-- fs/xfs/linux-2.6/xfs_lrw.c | 1 - fs/xfs/linux-2.6/xfs_quotaops.c | 4 +- fs/xfs/linux-2.6/xfs_super.c | 61 ++-- fs/xfs/linux-2.6/xfs_sync.c | 479 +++++++++++---------- fs/xfs/linux-2.6/xfs_sync.h | 19 +- fs/xfs/linux-2.6/xfs_xattr.c | 67 +--- fs/xfs/quota/xfs_dquot.c | 5 +- fs/xfs/quota/xfs_dquot.h | 1 - fs/xfs/quota/xfs_dquot_item.c | 1 - fs/xfs/quota/xfs_qm.c | 168 ++++---- fs/xfs/quota/xfs_qm.h | 21 - fs/xfs/quota/xfs_qm_bhv.c | 77 +---- fs/xfs/quota/xfs_qm_stats.c | 1 - fs/xfs/quota/xfs_qm_syscalls.c | 113 ++---- fs/xfs/quota/xfs_trans_dquot.c | 66 ++-- fs/xfs/xfs_acl.c | 874 --------------------------------------- fs/xfs/xfs_acl.h | 97 ++--- fs/xfs/xfs_ag.h | 2 + fs/xfs/xfs_arch.h | 32 -- fs/xfs/xfs_attr.c | 13 +- fs/xfs/xfs_bmap.c | 34 +- fs/xfs/xfs_bmap_btree.c | 4 +- fs/xfs/xfs_filestream.c | 6 +- fs/xfs/xfs_fs.h | 11 +- fs/xfs/xfs_iget.c | 8 +- fs/xfs/xfs_inode.c | 1 - fs/xfs/xfs_inode.h | 6 + fs/xfs/xfs_iomap.c | 13 +- fs/xfs/xfs_log_recover.c | 38 ++- fs/xfs/xfs_mount.c | 105 ++++- fs/xfs/xfs_mount.h | 84 +---- fs/xfs/xfs_qmops.c | 152 ------- fs/xfs/xfs_quota.h | 129 +++--- fs/xfs/xfs_rename.c | 3 +- fs/xfs/xfs_rw.c | 1 - fs/xfs/xfs_trans.c | 17 +- fs/xfs/xfs_utils.c | 2 +- fs/xfs/xfs_vnodeops.c | 114 +++--- fs/xfs/xfs_vnodeops.h | 1 + 45 files changed, 1342 insertions(+), 2098 deletions(-) create mode 100644 fs/xfs/linux-2.6/xfs_acl.c delete mode 100644 fs/xfs/xfs_acl.c delete mode 100644 fs/xfs/xfs_qmops.c hooks/post-receive -- XFS development tree From felixb@oss.sgi.com Thu Jul 2 00:27:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625RwwD068294 for ; Thu, 2 Jul 2009 00:27:58 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n625RvoR068262; Thu, 2 Jul 2009 00:27:57 -0500 Date: Thu, 2 Jul 2009 00:27:57 -0500 Message-Id: <200907020527.n625RvoR068262@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1242-g370f048 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: e83f1eb6bfc4004c19a99ee5f5aa65bd3fbecec3 X-Git-Newrev: 370f048214b4e9aa2102fa3c454ae1374da287c5 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 370f048 xfs: add more statics & drop some unused functions from e83f1eb6bfc4004c19a99ee5f5aa65bd3fbecec3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 370f048214b4e9aa2102fa3c454ae1374da287c5 Author: Eric Sandeen Date: Thu Jul 2 00:09:33 2009 -0500 xfs: add more statics & drop some unused functions A lot more functions could be made static, but they need forward declarations; this does some easy ones, and also found a few unused functions in the process. Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_super.c | 2 +- fs/xfs/linux-2.6/xfs_sync.c | 15 --------------- fs/xfs/linux-2.6/xfs_sync.h | 1 - fs/xfs/xfs_ag.h | 3 --- fs/xfs/xfs_alloc.c | 2 +- fs/xfs/xfs_bmap.c | 2 +- fs/xfs/xfs_bmap.h | 11 ----------- fs/xfs/xfs_bmap_btree.c | 20 ++++++++++---------- fs/xfs/xfs_bmap_btree.h | 1 - fs/xfs/xfs_btree.c | 42 +----------------------------------------- fs/xfs/xfs_btree.h | 15 --------------- fs/xfs/xfs_inode.c | 8 ++++---- fs/xfs/xfs_inode.h | 5 ----- fs/xfs/xfs_itable.c | 2 +- fs/xfs/xfs_itable.h | 5 ----- fs/xfs/xfs_log_priv.h | 2 -- fs/xfs/xfs_log_recover.c | 2 +- fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_mount.h | 3 --- fs/xfs/xfs_mru_cache.c | 29 ----------------------------- fs/xfs/xfs_mru_cache.h | 1 - fs/xfs/xfs_rw.h | 6 ------ fs/xfs/xfs_vnodeops.c | 2 +- 23 files changed, 22 insertions(+), 159 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Thu Jul 2 00:28:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_64,J_CHICKENPOX_65 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625Sck7068345 for ; Thu, 2 Jul 2009 00:28:38 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 88ADEAC016 for ; Wed, 1 Jul 2009 22:29:07 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id E1BE07000103; Thu, 2 Jul 2009 00:29:06 -0500 (CDT) Cc: Christoph Hellwig , xfs mailing list Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A4C410D.5040205@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] add more statics & drop some unused functions Date: Thu, 2 Jul 2009 00:29:06 -0500 References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> <4A4C410D.5040205@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 2, 2009, at 12:09 AM, Eric Sandeen wrote: > Felix Blyakher wrote: >> On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: >> >> >>> Christoph Hellwig wrote: >>> >>>> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>>> >>>>> A lot more functions could be made static, but they need >>>>> forward declarations; this does some easy ones, and also >>>>> found a few unused functions in the process. >>>>> >>>> Looks good to me. >>>> >>>> >>> Felix, do you plan to merge this one? >>> >> >> Eric, this patch doesn't apply cleanly now: >> >> Applying xfs: add more statics & drop some unused functions >> error: patch failed: fs/xfs/linux-2.6/xfs_sync.c:640 >> error: fs/xfs/linux-2.6/xfs_sync.c: patch does not apply >> error: patch failed: fs/xfs/linux-2.6/xfs_sync.h:51 >> error: fs/xfs/linux-2.6/xfs_sync.h: patch does not apply >> Patch failed at 0002. >> >> Can you rebase and repost it? >> >> Thanks, >> Felix >> >> > This one applies to linus' tree ok.... It does. Applied. Thanks. Felix > > > -Eric > > diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/ > xfs_super.c > index a220d36..c709ed6 100644 > --- a/fs/xfs/linux-2.6/xfs_super.c > +++ b/fs/xfs/linux-2.6/xfs_super.c > @@ -687,7 +687,7 @@ xfs_barrier_test( > return error; > } > > -void > +STATIC void > xfs_mountfs_check_barriers(xfs_mount_t *mp) > { > int error; > diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c > index b619d6b..fbf3e02 100644 > --- a/fs/xfs/linux-2.6/xfs_sync.c > +++ b/fs/xfs/linux-2.6/xfs_sync.c > @@ -740,21 +740,6 @@ __xfs_inode_clear_reclaim_tag( > XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); > } > > -void > -xfs_inode_clear_reclaim_tag( > - xfs_inode_t *ip) > -{ > - xfs_mount_t *mp = ip->i_mount; > - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); > - > - read_lock(&pag->pag_ici_lock); > - spin_lock(&ip->i_flags_lock); > - __xfs_inode_clear_reclaim_tag(mp, pag, ip); > - spin_unlock(&ip->i_flags_lock); > - read_unlock(&pag->pag_ici_lock); > - xfs_put_perag(mp, pag); > -} > - > STATIC int > xfs_reclaim_inode_now( > struct xfs_inode *ip, > diff --git a/fs/xfs/linux-2.6/xfs_sync.h b/fs/xfs/linux-2.6/xfs_sync.h > index 2a10301..23e7e7e 100644 > --- a/fs/xfs/linux-2.6/xfs_sync.h > +++ b/fs/xfs/linux-2.6/xfs_sync.h > @@ -48,7 +48,6 @@ int xfs_reclaim_inode(struct xfs_inode *ip, int > locked, int sync_mode); > int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); > > void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); > -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); > void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct > xfs_perag *pag, > struct xfs_inode *ip); > > diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h > index f24b50b..af3cfeb 100644 > --- a/fs/xfs/xfs_ag.h > +++ b/fs/xfs/xfs_ag.h > @@ -91,9 +91,6 @@ typedef struct xfs_agf { > #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) > #define XFS_BUF_TO_AGF(bp) ((xfs_agf_t *)XFS_BUF_PTR(bp)) > > -extern int xfs_read_agf(struct xfs_mount *mp, struct xfs_trans *tp, > - xfs_agnumber_t agno, int flags, struct xfs_buf **bpp); > - > /* > * Size of the unlinked inode hash table in the agi. > */ > diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c > index 2cf944e..6316004 100644 > --- a/fs/xfs/xfs_alloc.c > +++ b/fs/xfs/xfs_alloc.c > @@ -2248,7 +2248,7 @@ xfs_alloc_put_freelist( > /* > * Read in the allocation group header (free/alloc section). > */ > -int /* error */ > +STATIC int /* error */ > xfs_read_agf( > struct xfs_mount *mp, /* mount point structure */ > struct xfs_trans *tp, /* transaction pointer */ > diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c > index 7928b99..9759724 100644 > --- a/fs/xfs/xfs_bmap.c > +++ b/fs/xfs/xfs_bmap.c > @@ -3713,7 +3713,7 @@ done: > * entry (null if none). Else, *lastxp will be set to the index > * of the found entry; *gotp will contain the entry. > */ > -xfs_bmbt_rec_host_t * /* pointer to found extent entry */ > +STATIC xfs_bmbt_rec_host_t * /* pointer to found extent entry */ > xfs_bmap_search_multi_extents( > xfs_ifork_t *ifp, /* inode fork pointer */ > xfs_fileoff_t bno, /* block number searched for */ > diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h > index 1b8ff92..56f62d2 100644 > --- a/fs/xfs/xfs_bmap.h > +++ b/fs/xfs/xfs_bmap.h > @@ -392,17 +392,6 @@ xfs_bmap_count_blocks( > int whichfork, > int *count); > > -/* > - * Search the extent records for the entry containing block bno. > - * If bno lies in a hole, point to the next entry. If bno lies > - * past eof, *eofp will be set, and *prevp will contain the last > - * entry (null if none). Else, *lastxp will be set to the index > - * of the found entry; *gotp will contain the entry. > - */ > -xfs_bmbt_rec_host_t * > -xfs_bmap_search_multi_extents(struct xfs_ifork *, xfs_fileoff_t, > int *, > - xfs_extnum_t *, xfs_bmbt_irec_t *, xfs_bmbt_irec_t *); > - > #endif /* __KERNEL__ */ > > #endif /* __XFS_BMAP_H__ */ > diff --git a/fs/xfs/xfs_bmap_btree.c b/fs/xfs/xfs_bmap_btree.c > index 5c1ade0..eb7b702 100644 > --- a/fs/xfs/xfs_bmap_btree.c > +++ b/fs/xfs/xfs_bmap_btree.c > @@ -202,16 +202,6 @@ xfs_bmbt_get_state( > ext_flag); > } > > -/* Endian flipping versions of the bmbt extraction functions */ > -void > -xfs_bmbt_disk_get_all( > - xfs_bmbt_rec_t *r, > - xfs_bmbt_irec_t *s) > -{ > - __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), > - get_unaligned_be64(&r->l1), s); > -} > - > /* > * Extract the blockcount field from an on disk bmap extent record. > */ > @@ -816,6 +806,16 @@ xfs_bmbt_trace_key( > *l1 = 0; > } > > +/* Endian flipping versions of the bmbt extraction functions */ > +STATIC void > +xfs_bmbt_disk_get_all( > + xfs_bmbt_rec_t *r, > + xfs_bmbt_irec_t *s) > +{ > + __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), > + get_unaligned_be64(&r->l1), s); > +} > + > STATIC void > xfs_bmbt_trace_record( > struct xfs_btree_cur *cur, > diff --git a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h > index 0e8df00..5549d49 100644 > --- a/fs/xfs/xfs_bmap_btree.h > +++ b/fs/xfs/xfs_bmap_btree.h > @@ -220,7 +220,6 @@ extern xfs_fsblock_t > xfs_bmbt_get_startblock(xfs_bmbt_rec_host_t *r); > extern xfs_fileoff_t xfs_bmbt_get_startoff(xfs_bmbt_rec_host_t *r); > extern xfs_exntst_t xfs_bmbt_get_state(xfs_bmbt_rec_host_t *r); > > -extern void xfs_bmbt_disk_get_all(xfs_bmbt_rec_t *r, > xfs_bmbt_irec_t *s); > extern xfs_filblks_t xfs_bmbt_disk_get_blockcount(xfs_bmbt_rec_t *r); > extern xfs_fileoff_t xfs_bmbt_disk_get_startoff(xfs_bmbt_rec_t *r); > > diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c > index e9df995..cde5a26 100644 > --- a/fs/xfs/xfs_btree.c > +++ b/fs/xfs/xfs_btree.c > @@ -646,46 +646,6 @@ xfs_btree_read_bufl( > } > > /* > - * Get a buffer for the block, return it read in. > - * Short-form addressing. > - */ > -int /* error */ > -xfs_btree_read_bufs( > - xfs_mount_t *mp, /* file system mount point */ > - xfs_trans_t *tp, /* transaction pointer */ > - xfs_agnumber_t agno, /* allocation group number */ > - xfs_agblock_t agbno, /* allocation group block number */ > - uint lock, /* lock flags for read_buf */ > - xfs_buf_t **bpp, /* buffer for agno/agbno */ > - int refval) /* ref count value for buffer */ > -{ > - xfs_buf_t *bp; /* return value */ > - xfs_daddr_t d; /* real disk block address */ > - int error; > - > - ASSERT(agno != NULLAGNUMBER); > - ASSERT(agbno != NULLAGBLOCK); > - d = XFS_AGB_TO_DADDR(mp, agno, agbno); > - if ((error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, d, > - mp->m_bsize, lock, &bp))) { > - return error; > - } > - ASSERT(!bp || !XFS_BUF_GETERROR(bp)); > - if (bp != NULL) { > - switch (refval) { > - case XFS_ALLOC_BTREE_REF: > - XFS_BUF_SET_VTYPE_REF(bp, B_FS_MAP, refval); > - break; > - case XFS_INO_BTREE_REF: > - XFS_BUF_SET_VTYPE_REF(bp, B_FS_INOMAP, refval); > - break; > - } > - } > - *bpp = bp; > - return 0; > -} > - > -/* > * Read-ahead the block, don't wait for it, don't return a buffer. > * Long-form addressing. > */ > @@ -2951,7 +2911,7 @@ error0: > * inode we have to copy the single block it was pointing to into the > * inode. > */ > -int > +STATIC int > xfs_btree_kill_iroot( > struct xfs_btree_cur *cur) > { > diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h > index 4f852b7..7fa0706 100644 > --- a/fs/xfs/xfs_btree.h > +++ b/fs/xfs/xfs_btree.h > @@ -379,20 +379,6 @@ xfs_btree_read_bufl( > int refval);/* ref count value for buffer */ > > /* > - * Get a buffer for the block, return it read in. > - * Short-form addressing. > - */ > -int /* error */ > -xfs_btree_read_bufs( > - struct xfs_mount *mp, /* file system mount point */ > - struct xfs_trans *tp, /* transaction pointer */ > - xfs_agnumber_t agno, /* allocation group number */ > - xfs_agblock_t agbno, /* allocation group block number */ > - uint lock, /* lock flags for read_buf */ > - struct xfs_buf **bpp, /* buffer for agno/agbno */ > - int refval);/* ref count value for buffer */ > - > -/* > * Read-ahead the block, don't wait for it, don't return a buffer. > * Long-form addressing. > */ > @@ -432,7 +418,6 @@ int xfs_btree_decrement(struct xfs_btree_cur *, > int, int *); > int xfs_btree_lookup(struct xfs_btree_cur *, xfs_lookup_t, int *); > int xfs_btree_update(struct xfs_btree_cur *, union xfs_btree_rec *); > int xfs_btree_new_iroot(struct xfs_btree_cur *, int *, int *); > -int xfs_btree_kill_iroot(struct xfs_btree_cur *); > int xfs_btree_insert(struct xfs_btree_cur *, int *); > int xfs_btree_delete(struct xfs_btree_cur *, int *); > int xfs_btree_get_rec(struct xfs_btree_cur *, union xfs_btree_rec > **, int *); > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 1f22d65..2dcb3d7 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -641,7 +641,7 @@ xfs_iformat_btree( > return 0; > } > > -void > +STATIC void > xfs_dinode_from_disk( > xfs_icdinode_t *to, > xfs_dinode_t *from) > @@ -1237,7 +1237,7 @@ xfs_isize_check( > * In that case the pages will still be in memory, but the inode size > * will never have been updated. > */ > -xfs_fsize_t > +STATIC xfs_fsize_t > xfs_file_last_byte( > xfs_inode_t *ip) > { > @@ -3827,7 +3827,7 @@ xfs_iext_inline_to_direct( > /* > * Resize an extent indirection array to new_size bytes. > */ > -void > +STATIC void > xfs_iext_realloc_indirect( > xfs_ifork_t *ifp, /* inode fork pointer */ > int new_size) /* new indirection array size */ > @@ -3852,7 +3852,7 @@ xfs_iext_realloc_indirect( > /* > * Switch from indirection array to linear (direct) extent > allocations. > */ > -void > +STATIC void > xfs_iext_indirect_to_direct( > xfs_ifork_t *ifp) /* inode fork pointer */ > { > diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h > index 1804f86..5104dae 100644 > --- a/fs/xfs/xfs_inode.h > +++ b/fs/xfs/xfs_inode.h > @@ -521,7 +521,6 @@ void xfs_ipin(xfs_inode_t *); > void xfs_iunpin(xfs_inode_t *); > int xfs_iflush(xfs_inode_t *, uint); > void xfs_ichgtime(xfs_inode_t *, int); > -xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); > void xfs_lock_inodes(xfs_inode_t **, int, uint); > void xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint); > > @@ -589,8 +588,6 @@ int xfs_itobp(struct xfs_mount *, struct > xfs_trans *, > struct xfs_buf **, uint); > int xfs_iread(struct xfs_mount *, struct xfs_trans *, > struct xfs_inode *, xfs_daddr_t, uint); > -void xfs_dinode_from_disk(struct xfs_icdinode *, > - struct xfs_dinode *); > void xfs_dinode_to_disk(struct xfs_dinode *, > struct xfs_icdinode *); > void xfs_idestroy_fork(struct xfs_inode *, int); > @@ -609,8 +606,6 @@ void xfs_iext_remove_inline(xfs_ifork_t *, > xfs_extnum_t, int); > void xfs_iext_remove_direct(xfs_ifork_t *, xfs_extnum_t, int); > void xfs_iext_remove_indirect(xfs_ifork_t *, xfs_extnum_t, int); > void xfs_iext_realloc_direct(xfs_ifork_t *, int); > -void xfs_iext_realloc_indirect(xfs_ifork_t *, int); > -void xfs_iext_indirect_to_direct(xfs_ifork_t *); > void xfs_iext_direct_to_inline(xfs_ifork_t *, xfs_extnum_t); > void xfs_iext_inline_to_direct(xfs_ifork_t *, int); > void xfs_iext_destroy(xfs_ifork_t *); > diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c > index aeb2d22..c471122 100644 > --- a/fs/xfs/xfs_itable.c > +++ b/fs/xfs/xfs_itable.c > @@ -39,7 +39,7 @@ > #include "xfs_error.h" > #include "xfs_btree.h" > > -int > +STATIC int > xfs_internal_inum( > xfs_mount_t *mp, > xfs_ino_t ino) > diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h > index 1fb04e7..20792bf 100644 > --- a/fs/xfs/xfs_itable.h > +++ b/fs/xfs/xfs_itable.h > @@ -99,11 +99,6 @@ xfs_bulkstat_one( > void *dibuff, > int *stat); > > -int > -xfs_internal_inum( > - xfs_mount_t *mp, > - xfs_ino_t ino); > - > typedef int (*inumbers_fmt_pf)( > void __user *ubuffer, /* buffer to write to */ > const xfs_inogrp_t *buffer, /* buffer to read from */ > diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h > index bcad5f4..679c7c4 100644 > --- a/fs/xfs/xfs_log_priv.h > +++ b/fs/xfs/xfs_log_priv.h > @@ -451,8 +451,6 @@ extern int xlog_find_tail(xlog_t *log, > extern int xlog_recover(xlog_t *log); > extern int xlog_recover_finish(xlog_t *log); > extern void xlog_pack_data(xlog_t *log, xlog_in_core_t *iclog, int); > -extern void xlog_recover_process_iunlinks(xlog_t *log); > - > extern struct xfs_buf *xlog_get_bp(xlog_t *, int); > extern void xlog_put_bp(struct xfs_buf *); > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 47da2fb..1099395 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -3263,7 +3263,7 @@ xlog_recover_process_one_iunlink( > * freeing of the inode and its removal from the list must be > * atomic. > */ > -void > +STATIC void > xlog_recover_process_iunlinks( > xlog_t *log) > { > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 5c6f092..8b6c9e8 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -1568,7 +1568,7 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) > * > * The m_sb_lock must be held when this routine is called. > */ > -int > +STATIC int > xfs_mod_incore_sb_unlocked( > xfs_mount_t *mp, > xfs_sb_field_t field, > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index a512238..a6c023b 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -414,13 +414,10 @@ typedef struct xfs_mod_sb { > > extern int xfs_log_sbcount(xfs_mount_t *, uint); > extern int xfs_mountfs(xfs_mount_t *mp); > -extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); > > extern void xfs_unmountfs(xfs_mount_t *); > extern int xfs_unmountfs_writesb(xfs_mount_t *); > extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, > int); > -extern int xfs_mod_incore_sb_unlocked(xfs_mount_t *, xfs_sb_field_t, > - int64_t, int); > extern int xfs_mod_incore_sb_batch(xfs_mount_t *, xfs_mod_sb_t *, > uint, int); > extern int xfs_mount_log_sb(xfs_mount_t *, __int64_t); > diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c > index afee7eb..4b0613d 100644 > --- a/fs/xfs/xfs_mru_cache.c > +++ b/fs/xfs/xfs_mru_cache.c > @@ -564,35 +564,6 @@ xfs_mru_cache_lookup( > } > > /* > - * To look up an element using its key, but leave its location in > the internal > - * lists alone, call xfs_mru_cache_peek(). If the element isn't > found, this > - * function returns NULL. > - * > - * See the comments above the declaration of the > xfs_mru_cache_lookup() function > - * for important locking information pertaining to this call. > - */ > -void * > -xfs_mru_cache_peek( > - xfs_mru_cache_t *mru, > - unsigned long key) > -{ > - xfs_mru_cache_elem_t *elem; > - > - ASSERT(mru && mru->lists); > - if (!mru || !mru->lists) > - return NULL; > - > - spin_lock(&mru->lock); > - elem = radix_tree_lookup(&mru->store, key); > - if (!elem) > - spin_unlock(&mru->lock); > - else > - __release(mru_lock); /* help sparse not be stupid */ > - > - return elem ? elem->value : NULL; > -} > - > -/* > * To release the internal data structure spinlock after having > performed an > * xfs_mru_cache_lookup() or an xfs_mru_cache_peek(), call > xfs_mru_cache_done() > * with the data store pointer. > diff --git a/fs/xfs/xfs_mru_cache.h b/fs/xfs/xfs_mru_cache.h > index dd58ea1..5d439f3 100644 > --- a/fs/xfs/xfs_mru_cache.h > +++ b/fs/xfs/xfs_mru_cache.h > @@ -49,7 +49,6 @@ int xfs_mru_cache_insert(struct xfs_mru_cache > *mru, unsigned long key, > void * xfs_mru_cache_remove(struct xfs_mru_cache *mru, unsigned long > key); > void xfs_mru_cache_delete(struct xfs_mru_cache *mru, unsigned long > key); > void *xfs_mru_cache_lookup(struct xfs_mru_cache *mru, unsigned long > key); > -void *xfs_mru_cache_peek(struct xfs_mru_cache *mru, unsigned long > key); > void xfs_mru_cache_done(struct xfs_mru_cache *mru); > > #endif /* __XFS_MRU_CACHE_H__ */ > diff --git a/fs/xfs/xfs_rw.h b/fs/xfs/xfs_rw.h > index f76c003..ae65f0d 100644 > --- a/fs/xfs/xfs_rw.h > +++ b/fs/xfs/xfs_rw.h > @@ -78,10 +78,4 @@ extern int xfs_read_buf(struct xfs_mount *mp, > xfs_buftarg_t *btp, > extern void xfs_ioerror_alert(char *func, struct xfs_mount *mp, > xfs_buf_t *bp, xfs_daddr_t blkno); > > -/* > - * Prototypes for functions in xfs_vnodeops.c. > - */ > -extern int xfs_free_eofblocks(struct xfs_mount *mp, struct > xfs_inode *ip, > - int flags); > - > #endif /* __XFS_RW_H__ */ > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index c4eca5e..1dd7068 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -716,7 +716,7 @@ xfs_fsync( > * when the link count isn't zero and by xfs_dm_punch_hole() when > * punching a hole to EOF. > */ > -int > +STATIC int > xfs_free_eofblocks( > xfs_mount_t *mp, > xfs_inode_t *ip, > > From chiparus@gmail.com Thu Jul 2 02:08:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6278m9N072588 for ; Thu, 2 Jul 2009 02:08:48 -0500 X-ASG-Debug-ID: 1246518560-79d200e30000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f209.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C4C5933A611 for ; Thu, 2 Jul 2009 00:09:20 -0700 (PDT) Received: from mail-fx0-f209.google.com (mail-fx0-f209.google.com [209.85.220.209]) by cuda.sgi.com with ESMTP id SstTVStLS0iLpYPV for ; Thu, 02 Jul 2009 00:09:20 -0700 (PDT) Received: by fxm5 with SMTP id 5so1222425fxm.20 for ; Thu, 02 Jul 2009 00:09:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type:content-transfer-encoding; bh=NjWHplbuDMQLniZm6/omEAII5eAER8ez5Sk8MWmOsGg=; b=T6Qfjnor5ZHXVKLNcL2bkC+DUWJNyT2LR1uC9LBGtsN7s1SlIC9v7+sXCVonKewVK6 mlBPBBbvlvhPWlrxJcp7hxujEwK1IqyzS7dVLZkb6DZ4K5PZJ9w6CC4iFs41ldgdTDGJ 4+VPngwLC7t02k13YC5vJwuAjxZrALRrCd8tI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=AQYw1HCAOjqSVax4g2y2Q1/73+AG4y+Dvv8R9bKwwxnPEEIDUR8EpXdmw2ILO6yQNs C+NWmoY6OMoi7Np3/SUDSe/WCbOUgy4+DHy6/MUy55GLEhSiH/vqrgRUFU4Q1Nh1xYNE wbwVsprRqy+KmzhLX73XQXoYAw3eAcWKJizeY= MIME-Version: 1.0 Sender: chiparus@gmail.com Received: by 10.204.117.141 with SMTP id r13mr3021130bkq.181.1246518559102; Thu, 02 Jul 2009 00:09:19 -0700 (PDT) In-Reply-To: <20090701124441.GA12844@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090701124441.GA12844@infradead.org> Date: Thu, 2 Jul 2009 09:09:19 +0200 X-Google-Sender-Auth: 0bd9f6ad3869360a Message-ID: <89c4f90c0907020009n3b321c71s49a54501b146e0cb@mail.gmail.com> X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode From: Tommy van Leeuwen To: Christoph Hellwig Cc: Patrick Schreurs , linux-xfs@oss.sgi.com, Lachlan McIlroy , Eric Sandeen Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-fx0-f209.google.com[209.85.220.209] X-Barracuda-Start-Time: 1246518560 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0977 1.0000 -1.4065 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.41 X-Barracuda-Spam-Status: No, SCORE=-1.41 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2324 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jul 1, 2009 at 2:44 PM, Christoph Hellwig wrote: > Actually you might want to give this patch a try which fixes a race > affecting the reclaim tag in iget: Thanks Christoph, we'll try this out in the next couple of days and let you know. Tommy From a.beregalov@gmail.com Thu Jul 2 05:38:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62Ac65X081583 for ; Thu, 2 Jul 2009 05:38:07 -0500 X-ASG-Debug-ID: 1246531117-1bc002e70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 94C6033A941 for ; Thu, 2 Jul 2009 03:38:37 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id Oo3ZNDpq8OpckOyb for ; Thu, 02 Jul 2009 03:38:37 -0700 (PDT) Received: by bwz10 with SMTP id 10so1317372bwz.20 for ; Thu, 02 Jul 2009 03:38:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=jy/C2emQ0Qgea5exsm+EmC/dfAAWjyrnO9jSkz/MoQA=; b=Tjp3E/c0Jk/bSfPZlr7Ja6G4/UmpqbOOE9uR0JaIpSH+2zMdVgrphDkzgi+6buyiZu aO0VVNpzxuNQtGScF+g2DfLqe16GBBXMMItXURP4XSTy9xswikIdzy9Xxe57yepYt35Q 1+afWJpm7lVvHJjzlAjen4Sr57hjJ992rIVgw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=L/8mWpAY/BGawr+kJDsRRlCLJtOl6S3XFbsqbXWlId0idUdXFZbg6HLlqcOXf5Xise DqrzHu7FEKnl//nhhtp4e4D4lln/IDJ/IzEi8y+0BNcRpKyZDXd2UWkybTcICJnE/20g kip+EFRBHJsSq7+bUwU/O0/8WhK4ONPtI+uMU= MIME-Version: 1.0 Received: by 10.204.71.15 with SMTP id f15mr10642365bkj.42.1246531117024; Thu, 02 Jul 2009 03:38:37 -0700 (PDT) In-Reply-To: <584076313.830951246499556455.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> References: <824092896.830901246499419777.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <584076313.830951246499556455.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Date: Thu, 2 Jul 2009 14:38:36 +0400 Message-ID: X-ASG-Orig-Subj: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! Subject: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! From: Alexander Beregalov To: Lachlan McIlroy Cc: Kernel Testers List , xfs@oss.sgi.com, Dave Chinner Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1246531118 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2334 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/7/2 Lachlan McIlroy : > Alexander, > > Are you running with this fix? > > http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-2.6.29.y.git;a= =3Dcommitdiff;h=3Dd415867e0abc35e3b2f0d4196e98c339d6fe29a2 Yes, I use 2.6.31-rc1-git and it contains this fix. > > I've seen this assertion before and the above patch fixed it > for me. =C2=A0Hmmm, looks like you're running a recent kernel so > you should have this fix - maybe the fix wasn't quite right. > > Lachlan > > > ----- "Alexander Beregalov" wrote: > >> 2009/6/5 Alexander Beregalov : >> > 2009/6/4 Dave Chinner : >> >> On Mon, Jun 01, 2009 at 07:22:56PM +0400, Alexander Beregalov >> wrote: >> >>> Hi >> >>> >> >>> Assertion failed: *nmap >=3D 1, file: fs/xfs/xfs_bmap.c, line: 4846 >> >> ..... >> >>> Call Trace: >> >>> =C2=A0[] xfs_bmapi+0xad/0x1ad0 >> >>> =C2=A0[] xfs_dir2_leaf_getdents+0x640/0x7b0 >> >>> =C2=A0[] xfs_readdir+0x12c/0x140 >> >>> =C2=A0[] xfs_file_readdir+0x47/0x70 >> >>> =C2=A0[] vfs_readdir+0xd0/0xf0 >> >>> =C2=A0[] sys_getdents+0x96/0x110 >> >>> =C2=A0[] system_call_fastpath+0x16/0x1b >> >> >> >> I'd say this indicates a corrupted directory. =C2=A0Can you run >> >> 'xfs_repair -n' over the filesystem and see if it finds a bad >> >> directory? >> >> Still cannot fix the filesystem. After repairing all corruptions from >> LiveCD it still fails on the same workload. >> >> Do you need metadump or anything else? >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Thu Jul 2 12:02:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62H2r1b101436 for ; Thu, 2 Jul 2009 12:02:53 -0500 X-ASG-Debug-ID: 1246554205-3c8501390000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A2A01AEB026 for ; Thu, 2 Jul 2009 10:03:25 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 29i9vHKBECB75wOS for ; Thu, 02 Jul 2009 10:03:25 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n62H3Plp018097 for ; Thu, 2 Jul 2009 13:03:25 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n62H3OMm005661 for ; Thu, 2 Jul 2009 13:03:24 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n62H3NGc015500 for ; Thu, 2 Jul 2009 13:03:23 -0400 Message-ID: <4A4CE85B.1030102@sandeen.net> Date: Thu, 02 Jul 2009 12:03:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfs_metadump: agcount*agblocks overflow Subject: [PATCH] xfs_metadump: agcount*agblocks overflow Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246554206 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0200 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2356 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Found another potential overflow in xfs_metadump, similar to those just fixed in repair. Signed-off-by: Eric Sandeen -- diff --git a/db/metadump.c b/db/metadump.c index 19aed4f..ef6e571 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -222,7 +222,8 @@ valid_bno( return 1; if (agno == (mp->m_sb.sb_agcount - 1) && agbno > 0 && agbno <= (mp->m_sb.sb_dblocks - - (mp->m_sb.sb_agcount - 1) * mp->m_sb.sb_agblocks)) + (xfs_drfsbno_t)(mp->m_sb.sb_agcount - 1) * + mp->m_sb.sb_agblocks)) return 1; return 0; From patrick@news-service.com Thu Jul 2 12:31:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62HVBBE102888 for ; Thu, 2 Jul 2009 12:31:17 -0500 X-ASG-Debug-ID: 1246555901-6a4801910000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pu01.news-service.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BB2D633C154 for ; Thu, 2 Jul 2009 10:31:41 -0700 (PDT) Received: from pu01.news-service.com (ns1.news-service.com [195.114.240.3]) by cuda.sgi.com with ESMTP id 3GM6bYMwtLRnpmRR for ; Thu, 02 Jul 2009 10:31:41 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by pu01.news-service.com (Postfix) with ESMTP id A8BF8971FA; Thu, 2 Jul 2009 19:31:40 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at pu01.news-service.com Received: from pu01.news-service.com ([127.0.0.1]) by localhost (pu01.nse [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5AowfNcTe+Al; Thu, 2 Jul 2009 19:31:32 +0200 (CEST) Received: from [172.25.4.6] (unknown [172.25.8.1]) by pu01.news-service.com (Postfix) with ESMTP id 82DE5971EF; Thu, 2 Jul 2009 19:31:32 +0200 (CEST) Message-ID: <4A4CEEF2.7040101@news-service.com> Date: Thu, 02 Jul 2009 19:31:30 +0200 From: Patrick Schreurs Organization: News-Service.com User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090701124441.GA12844@infradead.org> In-Reply-To: <20090701124441.GA12844@infradead.org> Content-Type: multipart/mixed; boundary="------------000709030702090209080603" X-Barracuda-Connect: ns1.news-service.com[195.114.240.3] X-Barracuda-Start-Time: 1246555902 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2357 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Status: Clean This is a multi-part message in MIME format. --------------000709030702090209080603 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi Christoph, With this patch we see the following: kernel BUG at fs/inode.c:1288! invalid opcode: 0000 [#2] SMP last sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map CPU 1 Modules linked in: acpi_cpufreq cpufreq_ondemand ipmi_si ipmi_devintf ipmi_msghandler bonding mptspi 8250_pnp rng_core scsi_transport_spi thermal serio_raw processor 8250 serial_core bnx2 thermal_sys Pid: 8048, comm: diablo Tainted: G D 2.6.30xfspatch #1 PowerEdge 1950 RIP: 0010:[] [] iput+0x13/0x60 RSP: 0018:ffff88007ec6db58 EFLAGS: 00010246 RAX: 0000000000000000 RBX: ffff88022cbef5c0 RCX: ffff88017d1edd30 RDX: ffff88022cbef5f0 RSI: ffff88017d1edcc8 RDI: ffff88022cbef5c0 RBP: ffff8801383ae788 R08: ffff88007ec6db98 R09: 0000000000000246 R10: ffff88008c2156a0 R11: ffffffff8028b7a8 R12: ffff88022e831c00 R13: ffff88007ec6db98 R14: ffff88022e831d18 R15: ffff88007ec6dc0c FS: 0000000001495860(0063) GS:ffff88002804d000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 00007fa14f9fa000 CR3: 000000007ee5c000 CR4: 00000000000006a0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process diablo (pid: 8048, threadinfo ffff88007ec6c000, task ffff8800855926f0) Stack: ffff88017d1edcc0 ffffffff802884f7 ffff88008c2156a0 ffff88017d1edcc0 ffff88022e831c00 ffffffff80288783 00000000000000c0 0000000000000008 ffff8800b9ad5a00 ffff880138304ac0 ffff88007ec6dba8 ffff88007ec6dba8 Call Trace: [] ? d_kill+0x34/0x55 [] ? __shrink_dcache_sb+0x26b/0x301 [] ? shrink_dcache_memory+0xdf/0x16e [] ? shrink_slab+0xe0/0x153 [] ? try_to_free_pages+0x22e/0x31b [] ? isolate_pages_global+0x0/0x231 [] ? __alloc_pages_internal+0x25f/0x3ff [] ? __do_page_cache_readahead+0xab/0x1b1 [] ? force_page_cache_readahead+0x57/0x7e [] ? sys_madvise+0x394/0x4e0 [] ? system_call_fastpath+0x16/0x1b Code: 4b 70 be 01 00 00 00 48 89 df e8 f8 86 00 00 eb db 48 83 c4 28 5b 5d c3 53 48 85 ff 48 89 fb 74 55 48 83 bf f8 01 00 00 40 75 04 <0f> 0b eb fe 48 8d 7f 48 48 c7 c6 f0 aa 5b 80 e8 51 4b 0a 00 85 RIP [] iput+0x13/0x60 RSP ---[ end trace 06a9d5e318d14bf7 ]--- This server also crahed twice. Unfortunately i don't have a complete logging of this event. See attachment for a partial log. Thanks for looking into this. Patrick Schreurs Christoph Hellwig wrote: > Actually you might want to give this patch a try which fixes a race > affecting the reclaim tag in iget: > > > Index: xfs/fs/xfs/xfs_iget.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iget.c 2009-06-04 13:27:41.901946950 +0200 > +++ xfs/fs/xfs/xfs_iget.c 2009-06-04 14:08:08.837816707 +0200 > @@ -132,80 +132,89 @@ xfs_iget_cache_hit( > int flags, > int lock_flags) __releases(pag->pag_ici_lock) > { > + struct inode *inode = VFS_I(ip); > struct xfs_mount *mp = ip->i_mount; > - int error = EAGAIN; > + int error; > + > + spin_lock(&ip->i_flags_lock); > > /* > - * If INEW is set this inode is being set up > - * If IRECLAIM is set this inode is being torn down > - * Pause and try again. > + * This inode is being torn down, pause and try again. > */ > - if (xfs_iflags_test(ip, (XFS_INEW|XFS_IRECLAIM))) { > + if (ip->i_flags & XFS_IRECLAIM) { > XFS_STATS_INC(xs_ig_frecycle); > + error = EAGAIN; > goto out_error; > } > > - /* If IRECLAIMABLE is set, we've torn down the vfs inode part */ > - if (xfs_iflags_test(ip, XFS_IRECLAIMABLE)) { > + /* > + * If we are racing with another cache hit that is currently recycling > + * this inode out of the XFS_IRECLAIMABLE state, wait for the > + * initialisation to complete before continuing. > + */ > + if (ip->i_flags & XFS_INEW) { > + spin_unlock(&ip->i_flags_lock); > + read_unlock(&pag->pag_ici_lock); > > - /* > - * If lookup is racing with unlink, then we should return an > - * error immediately so we don't remove it from the reclaim > - * list and potentially leak the inode. > - */ > - if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { > - error = ENOENT; > - goto out_error; > - } > + XFS_STATS_INC(xs_ig_frecycle); > + wait_on_inode(inode); > + return EAGAIN; > + } > > + /* > + * If lookup is racing with unlink, then we should return an > + * error immediately so we don't remove it from the reclaim > + * list and potentially leak the inode. > + */ > + if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { > + error = ENOENT; > + goto out_error; > + } > + > + /* > + * If IRECLAIMABLE is set, we've torn down the vfs inode part already. > + * Need to carefully get it back into useable state. > + */ > + if (ip->i_flags & XFS_IRECLAIMABLE) { > xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); > > /* > - * We need to re-initialise the VFS inode as it has been > - * 'freed' by the VFS. Do this here so we can deal with > - * errors cleanly, then tag it so it can be set up correctly > - * later. > + * We need to set XFS_INEW atomically with clearing the > + * reclaimable tag so that we do have an indicator of the > + * inode still being initialized. > */ > - if (!inode_init_always(mp->m_super, VFS_I(ip))) { > + ip->i_flags |= XFS_INEW; > + __xfs_inode_clear_reclaim_tag(pag, ip); > + > + spin_unlock(&ip->i_flags_lock); > + read_unlock(&pag->pag_ici_lock); > + > + if (unlikely(!inode_init_always(mp->m_super, inode))) { > + printk("node_init_always failed!!\n"); > + > + /* > + * Re-initializing the inode failed, and we are in deep > + * trouble. Try to re-add it to the reclaim list. > + */ > + read_lock(&pag->pag_ici_lock); > + spin_lock(&ip->i_flags_lock); > + > + ip->i_flags &= ~XFS_INEW; > + __xfs_inode_set_reclaim_tag(pag, ip); > + > error = ENOMEM; > goto out_error; > } > - > - /* > - * We must set the XFS_INEW flag before clearing the > - * XFS_IRECLAIMABLE flag so that if a racing lookup does > - * not find the XFS_IRECLAIMABLE above but has the igrab() > - * below succeed we can safely check XFS_INEW to detect > - * that this inode is still being initialised. > - */ > - xfs_iflags_set(ip, XFS_INEW); > - xfs_iflags_clear(ip, XFS_IRECLAIMABLE); > - > - /* clear the radix tree reclaim flag as well. */ > - __xfs_inode_clear_reclaim_tag(mp, pag, ip); > - } else if (!igrab(VFS_I(ip))) { > + } else { > /* If the VFS inode is being torn down, pause and try again. */ > - XFS_STATS_INC(xs_ig_frecycle); > - goto out_error; > - } else if (xfs_iflags_test(ip, XFS_INEW)) { > - /* > - * We are racing with another cache hit that is > - * currently recycling this inode out of the XFS_IRECLAIMABLE > - * state. Wait for the initialisation to complete before > - * continuing. > - */ > - wait_on_inode(VFS_I(ip)); > - } > + if (!igrab(inode)) > + goto out_error; > > - if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { > - error = ENOENT; > - iput(VFS_I(ip)); > - goto out_error; > + /* We've got a live one. */ > + spin_unlock(&ip->i_flags_lock); > + read_unlock(&pag->pag_ici_lock); > } > > - /* We've got a live one. */ > - read_unlock(&pag->pag_ici_lock); > - > if (lock_flags != 0) > xfs_ilock(ip, lock_flags); > > @@ -215,6 +224,7 @@ xfs_iget_cache_hit( > return 0; > > out_error: > + spin_unlock(&ip->i_flags_lock); > read_unlock(&pag->pag_ici_lock); > return error; > } > Index: xfs/fs/xfs/linux-2.6/xfs_sync.c > =================================================================== > --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:40:09.135939715 +0200 > +++ xfs/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:59:17.978816696 +0200 > @@ -607,6 +607,17 @@ xfs_reclaim_inode( > return 0; > } > > +void > +__xfs_inode_set_reclaim_tag( > + struct xfs_perag *pag, > + struct xfs_inode *ip) > +{ > + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); > + > + radix_tree_tag_set(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); > + __xfs_iflags_set(ip, XFS_IRECLAIMABLE); > +} > + > /* > * We set the inode flag atomically with the radix tree tag. > * Once we get tag lookups on the radix tree, this inode flag > @@ -621,9 +632,7 @@ xfs_inode_set_reclaim_tag( > > read_lock(&pag->pag_ici_lock); > spin_lock(&ip->i_flags_lock); > - radix_tree_tag_set(&pag->pag_ici_root, > - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); > - __xfs_iflags_set(ip, XFS_IRECLAIMABLE); > + __xfs_inode_set_reclaim_tag(pag, ip); > spin_unlock(&ip->i_flags_lock); > read_unlock(&pag->pag_ici_lock); > xfs_put_perag(mp, pag); > @@ -631,30 +640,15 @@ xfs_inode_set_reclaim_tag( > > void > __xfs_inode_clear_reclaim_tag( > - xfs_mount_t *mp, > - xfs_perag_t *pag, > - xfs_inode_t *ip) > -{ > - radix_tree_tag_clear(&pag->pag_ici_root, > - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); > -} > - > -void > -xfs_inode_clear_reclaim_tag( > - xfs_inode_t *ip) > + struct xfs_perag *pag, > + struct xfs_inode *ip) > { > - xfs_mount_t *mp = ip->i_mount; > - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); > + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); > > - read_lock(&pag->pag_ici_lock); > - spin_lock(&ip->i_flags_lock); > - __xfs_inode_clear_reclaim_tag(mp, pag, ip); > - spin_unlock(&ip->i_flags_lock); > - read_unlock(&pag->pag_ici_lock); > - xfs_put_perag(mp, pag); > + ip->i_flags &= ~XFS_IRECLAIMABLE; > + radix_tree_tag_clear(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); > } > > - > STATIC void > xfs_reclaim_inodes_ag( > xfs_mount_t *mp, > Index: xfs/fs/xfs/linux-2.6/xfs_sync.h > =================================================================== > --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:53:32.994814723 +0200 > +++ xfs/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:58:54.746942001 +0200 > @@ -51,7 +51,6 @@ int xfs_reclaim_inode(struct xfs_inode * > int xfs_reclaim_inodes(struct xfs_mount *mp, int noblock, int mode); > > void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); > -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); > -void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, > - struct xfs_inode *ip); > +void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); > +void __xfs_inode_clear_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); > #endif > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --------------000709030702090209080603 Content-Type: image/jpeg; name="sb02-20090702.jpg" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="sb02-20090702.jpg" /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR CAGQAtADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ro4LOxi8Ayam9lHNePqJtRJI7jYhi3Z AVgMg+oP41zlbMGtQL4Vk0SezkfN0bqOaOcJtfZsAKlTkd+oz7UAM0jSI7qKTUNQla20q3YC WVRl5G6iKMHq5/JRyffU8P6Xp8+j63rNxZrcxWTR+TbTXYT5S/zbipU7tvCnABJOATwMbSNX k0uWRWiW5srhQl1ayHCTL/Rh1DDkH8QbVnrdpZ6Jq+mLYzsuoMuHNyMxhDuQY2fMc9TxkdMU AXfDWjWGralq8ix+baWdrNPbxXM6xlyPueZgg4xySCADjJAPJ4e0vS/EPjaG2hgkh018ytBJ MNwwmSgPVhu44+bbzxyRQ8P61Bo39oedZyXH2y1a1OycR7Ub7x5VsngY9OevZnhrWY/D+txa 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 ZEtYZ1mjtftGSCOQN5XpkemccZzzQBcufDks/izU9LtY2gWCWRo0aGWQiMN8vCKzYwQQSMY7 8jOXq2l3OjapPp92FE8LYbY2QQRkEH0IIPrzWufE0Dza4klhIbPV3WWSNbgCSN1ffw+wjGS3 G3pjnjkuvFf2jxBLrg0+MXzwKql23pFMAq+aq47AcK2cE5ycYoAtaH4UibxLpGnatJ+9ud8k 9mpIeJAm5A57FsHK9QMdCeJdZ8Ow2/hW01C4tbbTb170QSRxySMscbJuHmqxdlYYzgc4YZGe mDo2uT6R4gg1gr9pmR2dxKxzJuBDZPXJBPPPPrVq81+C40pNMS0ufs7Xpvbh57oSSyOV2nDb ABxnkhuT+BAGXXhXULKK7numghtYFBS5ZyY7ktyoiIB3lhzxwB1xXTah4c0qGTWLdLKNLe00 4T286zsboybUIMkW4lQSxzmNQB6da5698TR6hZS2E+mQLYxr/oEcR2taH1D4JcN/EG+8eflN WrrxjHcXWpX66cyahqNn9kmc3GYgCqqxVNoIOF4yxxnvQBLP4ai1Dwrot5psMEeoTRXDSQCR y9yI3C5QHILAZYgEE5OAcYHIV1WmeMY9NstJUac0l1pa3HkSG4wjGXOSybckDPQMK5WgAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAorqP+EL/wCpm8Of+B//ANjXOXMH2a6mg82O XynZPMibcj4OMqe4PY0ARUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k= --------------000709030702090209080603-- From BATV+c12987dc4489b9b8aed6+2139+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 2 14:28:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62JSVcr108066 for ; Thu, 2 Jul 2009 14:28:33 -0500 X-ASG-Debug-ID: 1246562944-6a3303bd0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A234233CB8D for ; Thu, 2 Jul 2009 12:29:04 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id hZKw8xCZO4TDAqK3 for ; Thu, 02 Jul 2009 12:29:04 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MMRxw-0002JI-2l; Thu, 02 Jul 2009 19:29:04 +0000 Date: Thu, 2 Jul 2009 15:29:04 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_metadump: agcount*agblocks overflow Subject: Re: [PATCH] xfs_metadump: agcount*agblocks overflow Message-ID: <20090702192903.GA13919@infradead.org> References: <4A4CE85B.1030102@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4CE85B.1030102@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246562944 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 02, 2009 at 12:03:23PM -0500, Eric Sandeen wrote: > Found another potential overflow in xfs_metadump, > similar to those just fixed in repair. > > Signed-off-by: Eric Sandeen > -- > > diff --git a/db/metadump.c b/db/metadump.c > index 19aed4f..ef6e571 100644 > --- a/db/metadump.c > +++ b/db/metadump.c > @@ -222,7 +222,8 @@ valid_bno( > return 1; > if (agno == (mp->m_sb.sb_agcount - 1) && agbno > 0 && > agbno <= (mp->m_sb.sb_dblocks - > - (mp->m_sb.sb_agcount - 1) * mp->m_sb.sb_agblocks)) > + (xfs_drfsbno_t)(mp->m_sb.sb_agcount - 1) * > + mp->m_sb.sb_agblocks)) > return 1; > > return 0; I have a really hard time reading the function (both before and after your patch). It's a real mess and no wonder we have these overflow problems here. What about the following instead: static int valid_bno( xfs_agnumber_t agno, xfs_agblock_t agbno) { xfs_agnumber_t last_agno = mp->m_sb.sb_agcount - 1; xfs_drfsbno_t nblocks; /* * The first block in every AG contains a backups superblock, * and is copied separately, and we can skip it early as an * optimization. */ if (agbno == 0) return 0; /* * An invalid AG number is never okay. */ if (agno > last_agno) return 0; if (agno == last_agno) { nblocks = mp->m_sb.sb_dblocks - ((xfs_drfsbno_t)mp->m_sb.sb_agblocks * (mp->m_sb.sb_agcount - 1)); } else { nblocks = mp->m_sb.sb_agblocks); } if (agbno > nblocks) return 0; return 1; } and with that form I wonder if we don't still have an off-by-one in the last if clause - shouldn't the agblocks be the count of blocks while agbno is an indes and thus 0-based? Btw, do you have a testcase for this? From sandeen@sandeen.net Thu Jul 2 14:56:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62JuCwC109019 for ; Thu, 2 Jul 2009 14:56:12 -0500 X-ASG-Debug-ID: 1246564988-59ce02610000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 099D89CB404 for ; Thu, 2 Jul 2009 13:03:08 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id ZgW98gxKm9WN49cs for ; Thu, 02 Jul 2009 13:03:08 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n62JuVrV002212; Thu, 2 Jul 2009 15:56:31 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n62JuUFh022652; Thu, 2 Jul 2009 15:56:30 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n62JuUNK014131; Thu, 2 Jul 2009 15:56:30 -0400 Message-ID: <4A4D10ED.70506@sandeen.net> Date: Thu, 02 Jul 2009 14:56:29 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_metadump: agcount*agblocks overflow Subject: Re: [PATCH] xfs_metadump: agcount*agblocks overflow References: <4A4CE85B.1030102@sandeen.net> <20090702192903.GA13919@infradead.org> In-Reply-To: <20090702192903.GA13919@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246564992 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Thu, Jul 02, 2009 at 12:03:23PM -0500, Eric Sandeen wrote: >> Found another potential overflow in xfs_metadump, >> similar to those just fixed in repair. >> >> Signed-off-by: Eric Sandeen >> -- >> >> diff --git a/db/metadump.c b/db/metadump.c >> index 19aed4f..ef6e571 100644 >> --- a/db/metadump.c >> +++ b/db/metadump.c >> @@ -222,7 +222,8 @@ valid_bno( >> return 1; >> if (agno == (mp->m_sb.sb_agcount - 1) && agbno > 0 && >> agbno <= (mp->m_sb.sb_dblocks - >> - (mp->m_sb.sb_agcount - 1) * mp->m_sb.sb_agblocks)) >> + (xfs_drfsbno_t)(mp->m_sb.sb_agcount - 1) * >> + mp->m_sb.sb_agblocks)) >> return 1; >> >> return 0; > > I have a really hard time reading the function (both before and after > your patch). It's a real mess and no wonder we have these overflow > problems here. What about the following instead: well, I think the original goal was to make it efficient for the common case. How muchthis matters, not really sure. (at least that's the comment in the xfs_repair counterpart) > static int > valid_bno( > xfs_agnumber_t agno, > xfs_agblock_t agbno) > { > xfs_agnumber_t last_agno = mp->m_sb.sb_agcount - 1; > xfs_drfsbno_t nblocks; > > /* > * The first block in every AG contains a backups superblock, > * and is copied separately, and we can skip it early as an > * optimization. > */ > if (agbno == 0) > return 0; > > /* > * An invalid AG number is never okay. > */ > if (agno > last_agno) > return 0; > > if (agno == last_agno) { > nblocks = mp->m_sb.sb_dblocks - > ((xfs_drfsbno_t)mp->m_sb.sb_agblocks * > (mp->m_sb.sb_agcount - 1)); > } else { > nblocks = mp->m_sb.sb_agblocks); > } > > if (agbno > nblocks) > return 0; > return 1; > } > > and with that form I wonder if we don't still have an off-by-one > in the last if clause - shouldn't the agblocks be the count of blocks > while agbno is an indes and thus 0-based? > > Btw, do you have a testcase for this? no testcase here, though could craft one. I discovered it on Jesse's corruptd fs (very big metadump image) -Eric From sandeen@redhat.com Thu Jul 2 16:29:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62LTOoV118133 for ; Thu, 2 Jul 2009 16:29:25 -0500 X-ASG-Debug-ID: 1246570196-2d7b03b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2B2161D489A6 for ; Thu, 2 Jul 2009 14:29:56 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id KkBjruQIpOEoyC5k for ; Thu, 02 Jul 2009 14:29:56 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n62LTgNH024695; Thu, 2 Jul 2009 17:29:43 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n62LTg84011666; Thu, 2 Jul 2009 17:29:42 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n62LTfIf027452; Thu, 2 Jul 2009 17:29:41 -0400 Message-ID: <4A4D26C5.9070606@redhat.com> Date: Thu, 02 Jul 2009 16:29:41 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list CC: linux-mm@kvack.org, Christoph Hellwig , "MASON,CHRISTOPHER" X-ASG-Orig-Subj: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: [PATCH] bump up nr_to_write in xfs_vm_writepage Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246570197 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2366 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Talking w/ someone who had a raid6 of 15 drives on an areca controller, he wondered why he could only get 300MB/s or so out of a streaming buffered write to xfs like so: dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 10737418240 bytes (11 GB) copied, 34.294 s, 313 MB/s when the same write directly to the device was going closer to 700MB/s... With the following change things get moving again for xfs: dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 10737418240 bytes (11 GB) copied, 16.2938 s, 659 MB/s Chris had sent out something similar at Christoph's suggestion, and Christoph reminded me of it, and I tested it a variant of it, and it seems to help shockingly well. Feels like a bandaid though; thoughts? Other tests to do? Thanks, -Eric Signed-off-by: Christoph Hellwig Signed-off-by: Eric Sandeen Cc: Chris Mason --- Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c @@ -1268,6 +1268,13 @@ xfs_vm_writepage( if (!page_has_buffers(page)) create_empty_buffers(page, 1 << inode->i_blkbits, 0); + + /* + * VM calculation for nr_to_write seems off. Bump it way + * up, this gets simple streaming writes zippy again. + */ + wbc->nr_to_write *= 4; + /* * Convert delayed allocate, unwritten or unmapped space * to real space and flush out to disk. From michael.monnerie@is.it-management.at Fri Jul 3 06:20:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63BKKxj161591 for ; Fri, 3 Jul 2009 06:20:20 -0500 X-ASG-Debug-ID: 1246620049-0f0100b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 801B133ECEC for ; Fri, 3 Jul 2009 04:20:50 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id n3cd6hTmUgFYpg1a for ; Fri, 03 Jul 2009 04:20:50 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id C4DB65380 for ; Fri, 3 Jul 2009 13:22:26 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id BAD3D400155 for ; Fri, 3 Jul 2009 13:20:48 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs mailing list X-ASG-Orig-Subj: bad fs - xfs_repair 3.01 crashes on it Subject: bad fs - xfs_repair 3.01 crashes on it Date: Fri, 3 Jul 2009 13:20:43 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart3171997.tSlmBtre28"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907031320.48358@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1246620051 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2420 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart3171997.tSlmBtre28 Content-Type: multipart/mixed; boundary="Boundary-01=_MmeTKaJHscv+BOH" Content-Transfer-Encoding: 7bit Content-Disposition: inline --Boundary-01=_MmeTKaJHscv+BOH Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Tonight our server rebooted, and I found in /var/log/warn that he was cryin= g=20 a lot about xfs since June 7 already: Jun 7 03:06:31 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jun 7 03:06:31 orion.i.zmi.at kernel: Pid: 23230, comm: xfs_fsr Tainted: G= 2.6.27.21-0.1-xen #1 Jun 7 03:06:31 orion.i.zmi.at kernel: Jun 7 03:06:31 orion.i.zmi.at kernel: Call Trace: Jun 7 03:06:31 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jun 7 03:06:31 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c5 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f6 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ed [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_vget_fsop_= handlereq+0xc2/0x11b [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_open_by_ha= ndle+0x60/0x1cb [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_ioctl+0x3c= a/0x680 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_file_ioctl= +0x25/0x69 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] vfs_ioctl+0x21= /0x6c Jun 7 03:06:31 orion.i.zmi.at kernel: [] do_vfs_ioctl+0= x222/0x231 Jun 7 03:06:31 orion.i.zmi.at kernel: [] sys_ioctl+0x51= /0x73 Jun 7 03:06:31 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jun 7 03:06:31 orion.i.zmi.at kernel: [<00007f7231d6cb77>] 0x7f7231d6cb77 But XFS didn't go offline, so nobody found this messages. There are a lot o= f them. They obviously are generated by the nightly "xfs_fsr -v -t 7200" which we r= un since then. It would have been nice if xfs_fsr could have displayed a message, so we would have received the cron mail. (But it got killed by the kernel, that's a good excuse) Anyway, so I went to xfs_repair (3.01) and got this: Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... [snip] - agno =3D 14 local inode 3857051697 attr too small (size =3D 3, min size =3D 4) bad attribute fork in inode 3857051697, clearing attr fork clearing inode 3857051697 attributes cleared inode 3857051697 [snip] Phase 4 - check for duplicate blocks... [snip] - agno =3D 15 data fork in regular inode 3857051697 claims used block 537147998 xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err =3D=3D 0= ' failed. And then xfs_repair crashes out, without having repaired. I attached the fu= ll=20 xfs_repair log here, and http://zmi.at/x/xfs.metadump.data1.bz2 the metadump. I'll not be here for a week now, I hope the problem is not very serious. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --Boundary-01=_MmeTKaJHscv+BOH Content-Type: text/plain; charset="UTF-8"; name="xfsrepair.data1" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfsrepair.data1" Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 local inode 3857051697 attr too small (size = 3, min size = 4) bad attribute fork in inode 3857051697, clearing attr fork clearing inode 3857051697 attributes cleared inode 3857051697 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - agno = 32 - agno = 33 - agno = 34 - agno = 35 - agno = 36 - agno = 37 - agno = 38 - agno = 39 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 data fork in regular inode 3857051697 claims used block 537147998 xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. --Boundary-01=_MmeTKaJHscv+BOH-- --nextPart3171997.tSlmBtre28 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpN6ZAACgkQzhSR9xwSCbSOdACg7aZ5elczWsWNvZjXok3e7cL6 aSsAn0rUX84zVftmgrdr/sg7QEYNOqnH =Z88E -----END PGP SIGNATURE----- --nextPart3171997.tSlmBtre28-- From sentstory@gmail.com Fri Jul 3 07:56:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63CuWh8167569 for ; Fri, 3 Jul 2009 07:56:33 -0500 X-ASG-Debug-ID: 1246625825-1bd500b00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yx0-f203.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0AEBD1D48B89 for ; Fri, 3 Jul 2009 05:57:05 -0700 (PDT) Received: from mail-yx0-f203.google.com (mail-yx0-f203.google.com [209.85.210.203]) by cuda.sgi.com with ESMTP id GEszB6By3o3AvsHg for ; Fri, 03 Jul 2009 05:57:05 -0700 (PDT) Received: by yxe41 with SMTP id 41so3121348yxe.20 for ; Fri, 03 Jul 2009 05:57:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; bh=YxMBPROjQZMBfhZK5dTCCWPOpbi+bzGxGW1UGI5ibJU=; b=r55O0pDsOdxRcFF4p0zQzN5IJoNjORRt444VnbvESCTVHibC9/ZWYyXOtbc1RSuqo8 GjNqZHWAg/6DX9EPC2DSk1iMzwujKfQFutxKTKRIOSCP5jO6kB/eU3DR1GcXu9vH6U3C ZeuD/dGMKiIXKN1trmtk1uNjCntrtQ8ry5dAQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:date:x-google-sender-auth:message-id :subject:from:to:content-type:content-transfer-encoding; b=fIzBm539SQ155tsRHjNZlUGHuDNreVD7sm8uJq28IR8bnVM4tc2joM2Ggd6BEUiqqE UxRbXls9o3QcdnTMQ4B1KJUFDlDXYHYJ6oJogS2mJ3hUdlxKEEYT0aB4wDK7CCC2Cb0d dMEk2zABYjHZD4+BvZxfkA2IY98IauJKIy5rk= MIME-Version: 1.0 Sender: sentstory@gmail.com Reply-To: tharindu@sentstory.com Received: by 10.100.43.10 with SMTP id q10mr2078617anq.125.1246625825077; Fri, 03 Jul 2009 05:57:05 -0700 (PDT) Date: Fri, 3 Jul 2009 18:27:05 +0530 X-Google-Sender-Auth: d1f6e77f9926d99d Message-ID: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> X-ASG-Orig-Subj: Clustered version of XFS Subject: Clustered version of XFS From: Tharindu Rukshan Bamunuarachchi To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-yx0-f203.google.com[209.85.210.203] X-Barracuda-Start-Time: 1246625826 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3428 1.0000 -0.1788 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.18 X-Barracuda-Spam-Status: No, SCORE=-0.18 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2426 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean we are using XFS high speed transaction processing system. we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. i have two questions regarding XFS ... 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) 2. I am currently using my root partition as XFS. but i need to modify XFS source code and reload module without rebooting machine. Is there anyway to play with XFS source/module while using XFS module for mounted file system ....? cheers __ tharindu From felixb@oss.sgi.com Fri Jul 3 09:15:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63EFsqL171052 for ; Fri, 3 Jul 2009 09:15:54 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n63EFsJP171024; Fri, 3 Jul 2009 09:15:54 -0500 Date: Fri, 3 Jul 2009 09:15:54 -0500 Message-Id: <200907031415.n63EFsJP171024@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1243-gab8b9ba X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 370f048214b4e9aa2102fa3c454ae1374da287c5 X-Git-Newrev: ab8b9baac3f48fb3fc3d47790950c0eec134e678 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated ab8b9ba un-static xfs_read_agf from 370f048214b4e9aa2102fa3c454ae1374da287c5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ab8b9baac3f48fb3fc3d47790950c0eec134e678 Author: Eric Sandeen Date: Thu Jul 2 21:35:43 2009 -0500 un-static xfs_read_agf CONFIG_XFS_DEBUG builds still need xfs_read_agf to be non-static, oops. Signed-off-by: Eric Sandeen Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_ag.h | 3 +++ fs/xfs/xfs_alloc.c | 2 +- 2 files changed, 4 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From sandeen@sandeen.net Fri Jul 3 09:37:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63EbQoM172078 for ; Fri, 3 Jul 2009 09:37:27 -0500 X-ASG-Debug-ID: 1246631878-1bd303170000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5CCC91AECFBD for ; Fri, 3 Jul 2009 07:37:58 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id D3pkZ5lR0qCfm26T for ; Fri, 03 Jul 2009 07:37:58 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 37CA9A9ABC2; Fri, 3 Jul 2009 09:37:58 -0500 (CDT) Message-ID: <4A4E17C5.8020105@sandeen.net> Date: Fri, 03 Jul 2009 09:37:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: tharindu@sentstory.com CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> In-Reply-To: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246631879 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2431 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tharindu Rukshan Bamunuarachchi wrote: > we are using XFS high speed transaction processing system. > > we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. > > i have two questions regarding XFS ... > > 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) SGI sells a product called CXFS (http://lmgtfy.com/?q=clustered+xfs) ;) > 2. I am currently using my root partition as XFS. but i need to modify > XFS source code and reload module without rebooting machine. > Is there anyway to play with XFS source/module while using XFS > module for mounted file system ....? In general no, but you might look into KSplice. -Eric > > cheers > __ > tharindu From vitaly.v.ch@gmail.com Fri Jul 3 09:40:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63EeTKm172234 for ; Fri, 3 Jul 2009 09:40:30 -0500 X-ASG-Debug-ID: 1246632452-17ca00ba0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f209.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1F09B9D6A5C for ; Fri, 3 Jul 2009 07:47:33 -0700 (PDT) Received: from mail-fx0-f209.google.com (mail-fx0-f209.google.com [209.85.220.209]) by cuda.sgi.com with ESMTP id SRF1OzJFv5mFEtQZ for ; Fri, 03 Jul 2009 07:47:33 -0700 (PDT) Received: by fxm5 with SMTP id 5so2068546fxm.20 for ; Fri, 03 Jul 2009 07:41:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=0v55HZ8l3vfZCdHrJzM3dtlqVmYLCZ43rT9tAlHIVqQ=; b=dkA0RrNSaqFYy1A75n2/LAyEMuYdK4h5haRovrp8+HXag3LfO1MGEXiR3GA08qrkOm jJCXaZWu4ACshEmEBig0uYtl7quxJ7HgG4i9+8TTB582i8M7R9S9b5saNd69hlTGTd8G UDVRL4pFH57x2Lk/o88ow6t9lCPz+MPzLF6hk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=uR4k96RWc4UbKc8RZ4QC1CXxBWk1WVL68rbF+BhoxoR8HjutukS025PUopP+KCMeci 2TSLzjopr7vWMAzK7Q+TFkgYEB0HMK5vXgb2Y2iv8kQsElxhnhVQOWWnhDGXT+CFHshG rs4s3KLvCvjQHW2avprS6yKzmi2RcPrAkVc5w= MIME-Version: 1.0 Received: by 10.204.53.143 with SMTP id m15mr1322030bkg.112.1246632060504; Fri, 03 Jul 2009 07:41:00 -0700 (PDT) In-Reply-To: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> Date: Fri, 3 Jul 2009 17:41:00 +0300 Message-ID: <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS From: "Vitaly V. Ch" To: tharindu@sentstory.com Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-fx0-f209.google.com[209.85.220.209] X-Barracuda-Start-Time: 1246632454 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1465 1.0000 -1.1212 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.12 X-Barracuda-Spam-Status: No, SCORE=-1.12 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2432 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan Bamunuarachchi wrote: > we are using XFS high speed transaction processing system. > > we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. > > i have two questions regarding XFS ... > > 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) Yes. Your need cxfs. > 2. I am currently using my root partition as XFS. but i need to modify > XFS source code and reload module without rebooting machine. > =A0 =A0Is there anyway to play with XFS source/module while using XFS > module for mounted file system ....? Yes. duplicate Your code and use non-reloadable copy for root fs and reloadable under other name ("my_xfs" for example) for other partitions. > > > cheers > __ > tharindu > \\wbr Vitaly Chernookiy > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sentstory@gmail.com Fri Jul 3 10:23:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63FNswN175173 for ; Fri, 3 Jul 2009 10:23:54 -0500 X-ASG-Debug-ID: 1246635057-06f003150000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yx0-f203.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5717B9DA7F7 for ; Fri, 3 Jul 2009 08:30:57 -0700 (PDT) Received: from mail-yx0-f203.google.com (mail-yx0-f203.google.com [209.85.210.203]) by cuda.sgi.com with ESMTP id L8ia3ItgCYqvIDFO for ; Fri, 03 Jul 2009 08:30:57 -0700 (PDT) Received: by yxe41 with SMTP id 41so3235337yxe.20 for ; Fri, 03 Jul 2009 08:24:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type:content-transfer-encoding; bh=EBREtgB9AWHugKVYWn+qtSkacg0xj2ByPzBBhug0O0A=; b=CXLqHtzB+5W3ZtS7kAnpzowS3c7Z/dpxuI/kxiJq1LUFj8c0ojE05CpQKM0U2SXjaq MI6bqaxaFEuoBlk8oiDE2LmAo7Kktx9uQfdxdV4GwT8QUpreEJX0CMikei5Xhdn42c5l A9U/yxjPt6WD2THYJ/FE/s6j2F/ZkWTZ8E92I= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=Dln+CgDY0nneYQbz8Cf6Yv7ulRsaqOwYtd/6Aoj6/F93jej3L4BgEyK3t74PfMSQvV pg045GM7j4zb2AfPaG96IweCt2Wz23y/iF+a8MojKTng5nfUhlLR4AqRwpMZfevK25+n mRyULFMdRPaRG/HH65/AV3wEv6+71z3QtT9qU= MIME-Version: 1.0 Sender: sentstory@gmail.com Reply-To: tharindu@sentstory.com Received: by 10.100.41.9 with SMTP id o9mr2241436ano.155.1246634665288; Fri, 03 Jul 2009 08:24:25 -0700 (PDT) In-Reply-To: <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> Date: Fri, 3 Jul 2009 20:54:24 +0530 X-Google-Sender-Auth: c6eaa6def742e8b8 Message-ID: <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS From: Tharindu Rukshan Bamunuarachchi To: "Vitaly V. Ch" , sandeen@sandeen.net Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-yx0-f203.google.com[209.85.210.203] X-Barracuda-Start-Time: 1246635059 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0281 1.0000 -1.8388 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.84 X-Barracuda-Spam-Status: No, SCORE=-1.84 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2434 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Thankx lot for your responses. I recently send inqury over SGI website. Still no-reply. If there is someone related to SGI's CXFS in this list, please be kind enough to provide contact details. one of the world largest stock market likes to try out CXFS .... __ tharindu On Fri, Jul 3, 2009 at 8:11 PM, Vitaly V. Ch wrote: > On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan > Bamunuarachchi wrote: >> we are using XFS high speed transaction processing system. >> >> we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. >> >> i have two questions regarding XFS ... >> >> 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) > > Yes. Your need cxfs. > >> 2. I am currently using my root partition as XFS. but i need to modify >> XFS source code and reload module without rebooting machine. >> =A0 =A0Is there anyway to play with XFS source/module while using XFS >> module for mounted file system ....? > > Yes. duplicate Your code and use non-reloadable copy for root fs and > reloadable under other name ("my_xfs" for example) for other > partitions. > >> >> >> cheers >> __ >> tharindu >> > > \\wbr Vitaly Chernookiy > >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >> > From sandeen@sandeen.net Fri Jul 3 13:34:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63IYJek183436 for ; Fri, 3 Jul 2009 13:34:19 -0500 X-ASG-Debug-ID: 1246646090-5e2a02b30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D4CD71AEF77D for ; Fri, 3 Jul 2009 11:34:50 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Kj8BjQmAAxGZfBaH for ; Fri, 03 Jul 2009 11:34:50 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 1FC0BA9ABC2; Fri, 3 Jul 2009 13:34:49 -0500 (CDT) Message-ID: <4A4E4F48.4030507@sandeen.net> Date: Fri, 03 Jul 2009 13:34:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246646091 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2446 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Monnerie wrote: > Tonight our server rebooted, and I found in /var/log/warn that he was crying > a lot about xfs since June 7 already: > > Jun 7 03:06:31 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 3857051697 ((a)extents = 5). Unmount and run xfs_repair. ... > But XFS didn't go offline, so nobody found this messages. There are a lot of them. > They obviously are generated by the nightly "xfs_fsr -v -t 7200" which we run > since then. It would have been nice if xfs_fsr could have displayed > a message, so we would have received the cron mail. (But it got killed > by the kernel, that's a good excuse) I'll have to think about why this didn't shut down the fs. There are just a few that don't. > Anyway, so I went to xfs_repair (3.01) and got this: > > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > [snip] > - agno = 14 > local inode 3857051697 attr too small (size = 3, min size = 4) > bad attribute fork in inode 3857051697, clearing attr fork > clearing inode 3857051697 attributes > cleared inode 3857051697 > [snip] > Phase 4 - check for duplicate blocks... > [snip] > - agno = 15 > data fork in regular inode 3857051697 claims used block 537147998 > xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. > > And then xfs_repair crashes out, without having repaired. I attached the full > xfs_repair log here, and http://zmi.at/x/xfs.metadump.data1.bz2 > the metadump. Thanks for the metadump image, I'll try to take a look. -Eric From michael.monnerie@is.it-management.at Fri Jul 3 18:50:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63NosSj199493 for ; Fri, 3 Jul 2009 18:50:55 -0500 X-ASG-Debug-ID: 1246665085-6982007b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E8F121AEFDE5 for ; Fri, 3 Jul 2009 16:51:26 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id ibyb3BdZYqJDZ2xP for ; Fri, 03 Jul 2009 16:51:26 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 29C78445E for ; Sat, 4 Jul 2009 01:52:29 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 72907400155 for ; Sat, 4 Jul 2009 01:51:24 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Date: Sat, 4 Jul 2009 01:51:19 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <4A4D26C5.9070606@redhat.com> In-Reply-To: <4A4D26C5.9070606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907040151.21013@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1246665086 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2467 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Donnerstag 02 Juli 2009 Eric Sandeen wrote: > With the following change things get moving again for xfs: Amazeing, more than double speed with a one-liner. Do you have more such lines? ;-) > + /* > + * VM calculation for nr_to_write seems off. Bump it way > + * up, this gets simple streaming writes zippy again. > + */ > + wbc->nr_to_write *= 4; Could this be helpful here also: I've just transfered a copy of a directory from our server to a Linux desktop. Nothing else running, just an rsync from server to client, where the client has a Seagate 1TB ES.2 SATA disk, whhic can do about 80MB/s on large writes. But it did this, measured on large files (>20MB each, no small files): Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq- sz avgqu-sz await svctm %util sdb 0,00 584,00 0,00 368,00 0,00 7448,00 40,48 148,64 401,40 2,72 100,00 All the time around 300+ IOps, which is OK, but only 7-10MB/s? That can't be true. Then I killed the rsync process on the server, and the writes on the client jumped up: sdb 0,00 4543,40 0,00 333,40 0,00 44965,60 269,74 144,66 384,98 3,00 100,00 45MB/s is OK. I investigated a bit further: Seems the /proc/sys/vm values are strange, clients kernel is # uname -a Linux saturn 2.6.30-ZMI #1 SMP PREEMPT Wed Jun 10 20:07:31 CEST 2009 x86_64 x86_64 x86_64 GNU/Linux This makes rsync slow: cat /proc/sys/vm/dirty_* 0 5 0 8000 50 100 This fast: cat /proc/sys/vm/dirty_* cat dirty_* 16123456 0 524123456 8000 0 100 Seems more like a kernel related stuff, but do others see the same thing? So, I'm really out for a 1 week vacation now, have fun! mfg zmi -- // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From sandeen@sandeen.net Sat Jul 4 00:42:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n645gUMT216914 for ; Sat, 4 Jul 2009 00:42:31 -0500 X-ASG-Debug-ID: 1246686183-7e0d03140000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 44D271AF0658 for ; Fri, 3 Jul 2009 22:43:03 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id rXGg1OE59DahFwQs for ; Fri, 03 Jul 2009 22:43:03 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 672C8A9BF33; Sat, 4 Jul 2009 00:43:02 -0500 (CDT) Message-ID: <4A4EEBE6.6060909@sandeen.net> Date: Sat, 04 Jul 2009 00:43:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246686184 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2479 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Monnerie wrote: > Tonight our server rebooted, and I found in /var/log/warn that he was crying > a lot about xfs since June 7 already: ... > But XFS didn't go offline, so nobody found this messages. There are a lot of them. > They obviously are generated by the nightly "xfs_fsr -v -t 7200" which we run > since then. It would have been nice if xfs_fsr could have displayed > a message, so we would have received the cron mail. (But it got killed > by the kernel, that's a good excuse) ok yeah we should see why fsr didn't print anything ... > Anyway, so I went to xfs_repair (3.01) and got this: > > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > [snip] > - agno = 14 > local inode 3857051697 attr too small (size = 3, min size = 4) > bad attribute fork in inode 3857051697, clearing attr fork > clearing inode 3857051697 attributes > cleared inode 3857051697 > [snip] > Phase 4 - check for duplicate blocks... > [snip] > - agno = 15 > data fork in regular inode 3857051697 claims used block 537147998 > xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. Ok, so this is essentially some code which first does a scan; if it finds an error it bails out and clears the inode, but if not, it calls essentially the same function again, comments say "set bitmaps this time" - but on the 2nd call it finds an error, which isn't handled well. The ASSERT(err == 0) bit is presumably because if the first scan didn't find anything, the 2nd call shouldn't either, but ... not the case here :( There are more checks that can go wrong -after- the scan-only portion. So either the caller needs to cope w/ the error at this point, or the scan only business needs do all the checks, I think. Where's Barry when you need him .... Also I need to look at when the ASSERTs are active and when they should be; the Fedora packaged xfsprogs doesn't have the ASSERT active, and so this doesn't trip. After 2 calls to xfs_repair on Fedora, w/o the ASSERTs active, it checks clean on the 3rd (!). Not great. Not sure how much was cleared out in the process either... -Eric From BATV+602ac5bf566934fa39d3+2141+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 4 13:27:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n64IR9c6243601 for ; Sat, 4 Jul 2009 13:27:12 -0500 X-ASG-Debug-ID: 1246732062-45b6009c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 012153418DF for ; Sat, 4 Jul 2009 11:27:42 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 5W4jaVGXp43gTSBk for ; Sat, 04 Jul 2009 11:27:42 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MN9xe-00031C-7h for xfs@oss.sgi.com; Sat, 04 Jul 2009 18:27:42 +0000 Date: Sat, 4 Jul 2009 14:27:42 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Message-ID: <20090704182742.GA11083@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246732063 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Check that we correctly update the timestamps when writing to a file through an mmap mapping. Currently fails for XFS due a VFS bug but succeeds for many other filesystems. Signed-off-by: Christoph Hellwig Index: xfstests-dev/215 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/215 2009-07-04 18:25:43.000000000 +0000 @@ -0,0 +1,87 @@ +#! /bin/sh +# FS QA Test No. 215 +# +# Test out c/mtime updates after mapped writes. +# +# Based on the testcase in http://bugzilla.kernel.org/show_bug.cgi?id=2645 +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Christoph Hellwig. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=hch@lst.de + +seq=`basename $0` +echo "QA output created by $seq" + +_cleanup() +{ + cd / + rm -f $testfile +} + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +testfile=$TEST_DIR/tst.mmap + +echo +echo "creating test file" +dd if=/dev/zero of=$testfile count=4096 + +mtime1=`stat --printf="%Y" $testfile` +ctime1=`stat --printf="%Z" $testfile` + +sleep 1 + +echo +echo "writing via mmap" +$XFS_IO_PROG -F -f \ + -c 'mmap 0 4096' \ + -c 'mwrite 0 4096' \ + $testfile | _filter_xfs_io_unique + +mtime2=`stat --printf="%Y" $testfile` +ctime2=`stat --printf="%Z" $testfile` + +let mtime_diff=$mtime2-$mtime1 +let ctime_diff=$ctime2-$ctime1 + +if [ "$mtime_diff" -eq "0" ]; then + echo "FAIL: mtime not update after mapped write" + status=1 +fi + +if [ "$ctime_diff" -eq "0" ]; then + echo "FAIL: ctime not update after mapped write" + status=1 +fi + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 Index: xfstests-dev/group =================================================================== --- xfstests-dev.orig/group 2009-07-04 18:07:40.000000000 +0000 +++ xfstests-dev/group 2009-07-04 18:07:55.000000000 +0000 @@ -323,3 +323,4 @@ 212 auto aio quick 213 rw auto prealloc quick 214 rw auto prealloc quick +215 auto metadata quick From felixb@sgi.com Sat Jul 4 23:00:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6540Oew006590 for ; Sat, 4 Jul 2009 23:00:24 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0482B3040C8 for ; Sat, 4 Jul 2009 21:00:56 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id BB333700016A; Sat, 4 Jul 2009 23:00:55 -0500 (CDT) Cc: "Vitaly V. Ch" , sandeen@sandeen.net, xfs@oss.sgi.com Message-Id: <8B9C6BFA-0092-4AEA-9552-59A9291B68D9@sgi.com> From: Felix Blyakher To: tharindu@sentstory.com In-Reply-To: <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: Clustered version of XFS Date: Sat, 4 Jul 2009 23:00:54 -0500 References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 3, 2009, at 10:24 AM, Tharindu Rukshan Bamunuarachchi wrote: > Thankx lot for your responses. > > > I recently send inqury over SGI website. Still no-reply. Today is a national holiday in US, and SGI was closed yesterday. I'm sure somebody will get back to you on Monday. > If there is someone related to SGI's CXFS in this list, please be kind > enough to provide contact details. I forwarded you inquiry to right channels. You should hear from SGI soon. > one of the world largest stock market likes to try out CXFS .... Hope you will like CXFS. Felix > __ > tharindu > > > > On Fri, Jul 3, 2009 at 8:11 PM, Vitaly V. Ch > wrote: >> On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan >> Bamunuarachchi wrote: >>> we are using XFS high speed transaction processing system. >>> >>> we are very happy with XFS performance compared to ZFS, EXT3, JFS >>> etc. >>> >>> i have two questions regarding XFS ... >>> >>> 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) >> >> Yes. Your need cxfs. >> >>> 2. I am currently using my root partition as XFS. but i need to >>> modify >>> XFS source code and reload module without rebooting machine. >>> Is there anyway to play with XFS source/module while using XFS >>> module for mounted file system ....? >> >> Yes. duplicate Your code and use non-reloadable copy for root fs and >> reloadable under other name ("my_xfs" for example) for other >> partitions. >> >>> >>> >>> cheers >>> __ >>> tharindu >>> >> >> \\wbr Vitaly Chernookiy >> >>> _______________________________________________ >>> xfs mailing list >>> xfs@oss.sgi.com >>> http://oss.sgi.com/mailman/listinfo/xfs >>> >> > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sentstory@gmail.com Sun Jul 5 04:52:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n659qMfs019509 for ; Sun, 5 Jul 2009 04:52:23 -0500 X-ASG-Debug-ID: 1246787976-08d9026a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yx0-f203.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BC2959E0371 for ; Sun, 5 Jul 2009 02:59:36 -0700 (PDT) Received: from mail-yx0-f203.google.com (mail-yx0-f203.google.com [209.85.210.203]) by cuda.sgi.com with ESMTP id eLG3XHW5skVx85mt for ; Sun, 05 Jul 2009 02:59:36 -0700 (PDT) Received: by yxe41 with SMTP id 41so4408848yxe.20 for ; Sun, 05 Jul 2009 02:52:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type:content-transfer-encoding; bh=RjknxGa9GaF8deEIP2u3fV8/vHEca4gwCY4ImpFwWnA=; b=r0CbbbxL8zZjSqnK/btmDZ81NgyfHlh71+/jVzm09dofSGfNwerjN+1zJDuDGivuB1 SgN+Y1CJ5OSbFGj9F+fUQ/NOphWXLeuuAInCkvmR0tqZ5cmjOHgLvs0hEbgdP6qGyR9N mL55oGPuKDqJ7SZ65lWaoNV1xM+oL6bimRa3w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=M8F/jry66fQbdecsmEhnmQlQmrL3gg4OpnOxtgAQb1T5qNE5n7yElPkm0oRVkcKs6a buTGQsFuzOu3a9tOBCgEVbXK25NPTGHIq+HQDZjXPnP/El/UQqO+gUMPxFBHAfCwS96o XrU/M/59cCvpvUVODD+3oLySC7b6zDxYwYyrw= MIME-Version: 1.0 Sender: sentstory@gmail.com Reply-To: tharindu@sentstory.com Received: by 10.100.132.4 with SMTP id f4mr6034283and.109.1246787574625; Sun, 05 Jul 2009 02:52:54 -0700 (PDT) In-Reply-To: <8B9C6BFA-0092-4AEA-9552-59A9291B68D9@sgi.com> References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> <8B9C6BFA-0092-4AEA-9552-59A9291B68D9@sgi.com> Date: Sun, 5 Jul 2009 15:22:54 +0530 X-Google-Sender-Auth: 6448430bf964428a Message-ID: <7778c60e0907050252x4ca88f51vca131ce05be47f01@mail.gmail.com> X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS From: Tharindu Rukshan Bamunuarachchi To: Felix Blyakher Cc: "Vitaly V. Ch" , sandeen@sandeen.net, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-yx0-f203.google.com[209.85.210.203] X-Barracuda-Start-Time: 1246787977 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0207 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean thankx, i want to believe that CXFS will perform same or better than XFS. __ tharindu On Sun, Jul 5, 2009 at 9:30 AM, Felix Blyakher wrote: > > On Jul 3, 2009, at 10:24 AM, Tharindu Rukshan Bamunuarachchi wrote: > >> Thankx lot for your responses. >> >> >> I recently send inqury over SGI website. Still no-reply. > > Today is a national holiday in US, and SGI was closed yesterday. > I'm sure somebody will get back to you on Monday. > >> If there is someone related to SGI's CXFS in this list, please be kind >> enough to provide contact details. > > I forwarded you inquiry to right channels. You should hear from > SGI soon. > >> one of the world largest stock market likes to try out CXFS .... > > Hope you will like CXFS. > > Felix > >> __ >> tharindu >> >> >> >> On Fri, Jul 3, 2009 at 8:11 PM, Vitaly V. Ch wrot= e: >>> >>> On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan >>> Bamunuarachchi wrote: >>>> >>>> we are using XFS high speed transaction processing system. >>>> >>>> we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. >>>> >>>> i have two questions regarding XFS ... >>>> >>>> 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) >>> >>> Yes. Your need cxfs. >>> >>>> 2. I am currently using my root partition as XFS. but i need to modify >>>> XFS source code and reload module without rebooting machine. >>>> =A0 Is there anyway to play with XFS source/module while using XFS >>>> module for mounted file system ....? >>> >>> Yes. duplicate Your code and use non-reloadable copy for root fs and >>> reloadable under other name ("my_xfs" for example) for other >>> partitions. >>> >>>> >>>> >>>> cheers >>>> __ >>>> tharindu >>>> >>> >>> \\wbr Vitaly Chernookiy >>> >>>> _______________________________________________ >>>> xfs mailing list >>>> xfs@oss.sgi.com >>>> http://oss.sgi.com/mailman/listinfo/xfs >>>> >>> >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > > From sandeen@sandeen.net Sun Jul 5 12:23:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n65HN5P3038539 for ; Sun, 5 Jul 2009 12:23:06 -0500 X-ASG-Debug-ID: 1246815020-115e01fa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7162B1309523 for ; Sun, 5 Jul 2009 10:30:20 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id w2NtNZHNJY7CdvQY for ; Sun, 05 Jul 2009 10:30:20 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id D6EF38D78C5 for ; Sun, 5 Jul 2009 12:23:35 -0500 (CDT) Message-ID: <4A50E197.3070209@sandeen.net> Date: Sun, 05 Jul 2009 12:23:35 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH (trivial)] remove XFS_INO64_OFFSET Subject: [PATCH (trivial)] remove XFS_INO64_OFFSET Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246815022 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2615 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the ino64 option but left the XFS_INO64_OFFSET define it used in place - just remove it. Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/xfs_inum.h b/fs/xfs/xfs_inum.h index 7a28191..b8e4ee4 100644 --- a/fs/xfs/xfs_inum.h +++ b/fs/xfs/xfs_inum.h @@ -72,7 +72,6 @@ struct xfs_mount; #if XFS_BIG_INUMS #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL)) -#define XFS_INO64_OFFSET ((xfs_ino_t)(1ULL << 32)) #else #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 32) - 1ULL)) #endif From egcdcgis@nb.aibn.com Sun Jul 5 13:23:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.9 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, SUBJ_ALL_CAPS,URIBL_SBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n65IN05x041434 for ; Sun, 5 Jul 2009 13:23:00 -0500 X-ASG-Debug-ID: 1246818213-2c6f00860000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tomts35-srv.bellnexxia.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 48F15342C59 for ; Sun, 5 Jul 2009 11:23:33 -0700 (PDT) Received: from tomts35-srv.bellnexxia.net (tomts35-srv.bellnexxia.net [209.226.175.109]) by cuda.sgi.com with ESMTP id Yu9j5kYaKproxZ0t for ; Sun, 05 Jul 2009 11:23:33 -0700 (PDT) Received: from toip35-bus.srvr.bell.ca ([67.69.240.36]) by tomts35-srv.bellnexxia.net (InterMail vM.5.01.06.13 201-253-122-130-113-20050324) with ESMTP id <20090705182333.OWYF8518.tomts35-srv.bellnexxia.net@toip35-bus.srvr.bell.ca>; Sun, 5 Jul 2009 14:23:33 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUJAJ+MUErR4q/5/2dsb2JhbACBMIo6gxSJFoFeozaMOII2GgeBJgU Received: from tofep1.bellnexxia.net (HELO smtp.bellnexxia.net) ([209.226.175.249]) by toip35-bus.srvr.bell.ca with SMTP; 05 Jul 2009 14:23:32 -0400 X-Mailer: Openwave WebEngine, version 2.8.11 (webedge20-101-194-20030622) X-Originating-IP: [65.120.57.68] From: Reply-To: cgnlcenter@9.cn To: X-ASG-Orig-Subj: =?ISO-8859-1?B?KioqSkFDS1BPVEpPWaMxLDIzMCw=?= =?ISO-8859-1?B?MzEw?= GBP*** Subject: =?ISO-8859-1?B?KioqSkFDS1BPVEpPWaMxLDIzMCw=?= =?ISO-8859-1?B?MzEw?= GBP*** Date: Sun, 5 Jul 2009 14:23:32 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Message-Id: <20090705182333.OWYF8518.tomts35-srv.bellnexxia.net@toip35-bus.srvr.bell.ca> X-Barracuda-Connect: tomts35-srv.bellnexxia.net[209.226.175.109] X-Barracuda-Start-Time: 1246818214 X-Barracuda-Bayes: INNOCENT GLOBAL 0.7575 1.0000 1.8374 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.84 X-Barracuda-Spam-Status: No, SCORE=1.84 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2620 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean You have won congratulation,Please Verify this mail by sending your name, address, age, phone number Occuption etc to cgnlcenter@9.cn From BATV+2656bd01c2aa4c7de599+2142+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 5 14:38:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n65JcFvs045012 for ; Sun, 5 Jul 2009 14:38:21 -0500 X-ASG-Debug-ID: 1246822728-2f5501980000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8BE29342DDF for ; Sun, 5 Jul 2009 12:38:48 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id NwSl991HZV5W3ySu for ; Sun, 05 Jul 2009 12:38:48 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MNXY0-0000oM-AF; Sun, 05 Jul 2009 19:38:48 +0000 Date: Sun, 5 Jul 2009 15:38:48 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH (trivial)] remove XFS_INO64_OFFSET Subject: Re: [PATCH (trivial)] remove XFS_INO64_OFFSET Message-ID: <20090705193848.GA1330@infradead.org> References: <4A50E197.3070209@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A50E197.3070209@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246822729 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Jul 05, 2009 at 12:23:35PM -0500, Eric Sandeen wrote: > Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the > ino64 option but left the XFS_INO64_OFFSET define it used > in place - just remove it. Looks good to me. From BATV+2656bd01c2aa4c7de599+2142+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 5 14:40:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.1 required=5.0 tests=AWL,BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n65JecHZ045184 for ; Sun, 5 Jul 2009 14:40:38 -0500 X-ASG-Debug-ID: 1246822871-1d4301a80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7FF371AF22F1 for ; Sun, 5 Jul 2009 12:41:11 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id xFd1umf4Aa7GRZFh for ; Sun, 05 Jul 2009 12:41:11 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MNXaJ-0007JZ-6T for xfs@oss.sgi.com; Sun, 05 Jul 2009 19:41:11 +0000 Date: Sun, 5 Jul 2009 15:41:11 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfstests: add tests to check log size scaling Subject: [PATCH] xfstests: add tests to check log size scaling Message-ID: <20090705194111.GA3834@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246822872 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean XFS-QA test to check that log size scaling works correctly for old and new maximum log sizes. [hch: split into two testcases for old "small" log scaling and the large logs that require recent xfsprogs, and reduce the maximum size by 1GB to make it possible to run the test on 32 bit platforms] Signed-off-by: Dave Chinner Signed-off-by: Christoph Hellwig Index: xfstests-dev/216 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/216 2009-07-05 09:11:49.000000000 +0000 @@ -0,0 +1,79 @@ +#! /bin/sh +# FS QA Test No. 216 +# +# log size mkfs test - ensure the log size scaling works for small filesystems +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=dgc@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* + _cleanup_testdir +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_setup_testdir +_require_scratch +_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mount + +_require_loop +LOOP_DEV=$SCRATCH_MNT/test_fs +LOOP_MNT=$SCRATCH_MNT/test_fs_dir + +_do_mkfs() +{ + for i in $*; do + echo -n "fssize=${i}g " + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ + -d name=$LOOP_DEV,size=${i}g |grep log + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT + echo "test write" > $LOOP_MNT/test + umount $LOOP_MNT + done +} +# make large holey file +$XFS_IO_PROG -f -c "truncate 256g" $LOOP_DEV + +#make loopback mount dir +mkdir $LOOP_MNT + +# walk over standard sizes (up to 256GB) +_do_mkfs 1 2 4 8 16 32 64 128 256 + +status=0 +exit Index: xfstests-dev/216.out =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/216.out 2009-07-05 09:07:36.000000000 +0000 @@ -0,0 +1,10 @@ +QA output created by 216 +fssize=1g log =internal log bsize=4096 blocks=2560, version=2 +fssize=2g log =internal log bsize=4096 blocks=2560, version=2 +fssize=4g log =internal log bsize=4096 blocks=2560, version=2 +fssize=8g log =internal log bsize=4096 blocks=2560, version=2 +fssize=16g log =internal log bsize=4096 blocks=2560, version=2 +fssize=32g log =internal log bsize=4096 blocks=4096, version=2 +fssize=64g log =internal log bsize=4096 blocks=8192, version=2 +fssize=128g log =internal log bsize=4096 blocks=16384, version=2 +fssize=256g log =internal log bsize=4096 blocks=32768, version=2 Index: xfstests-dev/group =================================================================== --- xfstests-dev.orig/group 2009-07-04 18:07:55.000000000 +0000 +++ xfstests-dev/group 2009-07-05 09:16:04.000000000 +0000 @@ -324,3 +324,5 @@ 213 rw auto prealloc quick 214 rw auto prealloc quick 215 auto metadata quick +216 log metadata auto quick +217 log metadata auto Index: xfstests-dev/217 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/217 2009-07-05 09:26:57.000000000 +0000 @@ -0,0 +1,89 @@ +#! /bin/sh +# FS QA Test No. 217 +# +# large log size mkfs test - ensure the log size scaling works +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=dgc@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* + _cleanup_testdir +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_setup_testdir +_require_scratch +_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mount + +_require_loop +LOOP_DEV=$SCRATCH_MNT/test_fs +LOOP_MNT=$SCRATCH_MNT/test_fs_dir + +_do_mkfs() +{ + for i in $*; do + echo -n "fssize=${i}g " + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ + -d name=$LOOP_DEV,size=${i}g |grep log + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT + echo "test write" > $LOOP_MNT/test + umount $LOOP_MNT + done +} +# make large holey file +$XFS_IO_PROG -f -c "truncate 16383g" $LOOP_DEV + +#make loopback mount dir +mkdir $LOOP_MNT + +# test if large logs are supported +$MKFS_XFS_PROG -f -l size=256m -d name=$LOOP_DEV,size=10g > /dev/null 2>&1 +if [ $? -ne 0 ]; then + _notrun "large log sizes not supported by mkfs" +fi + +# +# walk over "new" sizes supported by recent xfsprogs. +# Note that the last test is for 16TB-1GB as 32bit platforms only support +# device slightly smaller than 16TB. +# +_do_mkfs 512 1024 2048 4096 8192 16383 + +status=0 +exit Index: xfstests-dev/217.out =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/217.out 2009-07-05 09:20:17.000000000 +0000 @@ -0,0 +1,7 @@ +QA output created by 217 +fssize=512g log =internal log bsize=4096 blocks=65536, version=2 +fssize=1024g log =internal log bsize=4096 blocks=131072, version=2 +fssize=2048g log =internal log bsize=4096 blocks=262144, version=2 +fssize=4096g log =internal log bsize=4096 blocks=521728, version=2 +fssize=8192g log =internal log bsize=4096 blocks=521728, version=2 +fssize=16383g log =internal log bsize=4096 blocks=521728, version=2 From felixb@sgi.com Sun Jul 5 15:20:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n65KKg0K047328 for ; Sun, 5 Jul 2009 15:20:42 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id A983A8F8035 for ; Sun, 5 Jul 2009 13:21:13 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 3CEBE7000103; Sun, 5 Jul 2009 15:21:13 -0500 (CDT) Cc: xfs-oss Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A50E197.3070209@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH (trivial)] remove XFS_INO64_OFFSET Date: Sun, 5 Jul 2009 15:21:11 -0500 References: <4A50E197.3070209@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 5, 2009, at 12:23 PM, Eric Sandeen wrote: > Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the > ino64 option but left the XFS_INO64_OFFSET define it used > in place - just remove it. > > Signed-off-by: Eric Sandeen Reviewed-by: Felix Blyakher > > --- > > diff --git a/fs/xfs/xfs_inum.h b/fs/xfs/xfs_inum.h > index 7a28191..b8e4ee4 100644 > --- a/fs/xfs/xfs_inum.h > +++ b/fs/xfs/xfs_inum.h > @@ -72,7 +72,6 @@ struct xfs_mount; > > #if XFS_BIG_INUMS > #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL)) > -#define XFS_INO64_OFFSET ((xfs_ino_t)(1ULL << 32)) > #else > #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 32) - 1ULL)) > #endif > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@oss.sgi.com Sun Jul 5 20:16:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n661G6eV058815 for ; Sun, 5 Jul 2009 20:16:06 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n661G5ij058786; Sun, 5 Jul 2009 20:16:05 -0500 Date: Sun, 5 Jul 2009 20:16:05 -0500 Message-Id: <200907060116.n661G5ij058786@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1244-gb560634 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: ab8b9baac3f48fb3fc3d47790950c0eec134e678 X-Git-Newrev: b56063453881a6d94cf5718c6769de6e35e67753 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated b560634 xfs: remove XFS_INO64_OFFSET from ab8b9baac3f48fb3fc3d47790950c0eec134e678 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b56063453881a6d94cf5718c6769de6e35e67753 Author: Eric Sandeen Date: Sun Jul 5 12:23:35 2009 -0500 xfs: remove XFS_INO64_OFFSET Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the ino64 option but left the XFS_INO64_OFFSET define it used in place - just remove it. Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_inum.h | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Mon Jul 6 00:32:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n665WHvt071522 for ; Mon, 6 Jul 2009 00:32:17 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 944388F8096 for ; Sun, 5 Jul 2009 22:32:49 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 32B947000103 for ; Mon, 6 Jul 2009 00:32:49 -0500 (CDT) Message-Id: From: Felix Blyakher To: xfs-oss list Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: maintainer on vacation, backup from sgi Date: Mon, 6 Jul 2009 00:32:47 -0500 X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, I'm going to be on vacation and not reachable till July 20. The whole xfs SGI team will be backing me up for the maintainership tasks. The point man for this, though, will be Olaf Weber . See you all in two weeks. Felix From sandeen@sandeen.net Mon Jul 6 13:25:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n66IP3dR102914 for ; Mon, 6 Jul 2009 13:25:03 -0500 X-ASG-Debug-ID: 1246905145-7ebb01360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3692A9E798C for ; Mon, 6 Jul 2009 11:32:25 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id LuyRK26nHQnObAnG for ; Mon, 06 Jul 2009 11:32:25 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n66IPaZX018178 for ; Mon, 6 Jul 2009 14:25:36 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n66IPZOZ005312 for ; Mon, 6 Jul 2009 14:25:35 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n66IPYDQ013176 for ; Mon, 6 Jul 2009 14:25:34 -0400 Message-ID: <4A52419E.5020301@sandeen.net> Date: Mon, 06 Jul 2009 13:25:34 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH, RFC] default to inode64 on 64-bit systems Subject: [PATCH, RFC] default to inode64 on 64-bit systems Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246905146 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2705 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean I'm tiring of telling people to use the inode64 mount option when they are experiencing bad performance on large xfs filesystems... 32-bit userspace is still largely broken when it comes to still using 32-bit stat calls, but on 64-bit systems this should be safe. The only problem here is moving the disk onto a 32-bit system, or using 32-bit apps. But I think it's a small risk. What do we think about the following? Thanks, -Eric Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index a220d36..5d134fd 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c @@ -195,7 +195,9 @@ xfs_parseargs( */ mp->m_flags |= XFS_MOUNT_BARRIER; mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; +#if BITS_PER_LONG == 32 mp->m_flags |= XFS_MOUNT_SMALL_INUMS; +#endif /* * These can be overridden by the mount option parsing. From BATV+5a26e7b33d6d7fac9e67+2143+infradead.org+hch@bombadil.srs.infradead.org Mon Jul 6 13:47:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n66IlNGB103947 for ; Mon, 6 Jul 2009 13:47:25 -0500 X-ASG-Debug-ID: 1246906486-7e4c01630000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 38282603586 for ; Mon, 6 Jul 2009 11:54:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id F749aTZiNLQ6fATs for ; Mon, 06 Jul 2009 11:54:47 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MNt9V-0004n6-MJ; Mon, 06 Jul 2009 18:42:57 +0000 Date: Mon, 6 Jul 2009 14:42:57 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems Message-ID: <20090706184257.GA18107@infradead.org> References: <4A52419E.5020301@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52419E.5020301@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246906487 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 06, 2009 at 01:25:34PM -0500, Eric Sandeen wrote: > I'm tiring of telling people to use the inode64 mount option > when they are experiencing bad performance on large xfs > filesystems... > > 32-bit userspace is still largely broken when it comes to still > using 32-bit stat calls, but on 64-bit systems this should be > safe. > > The only problem here is moving the disk onto a 32-bit system, or using > 32-bit apps. But I think it's a small risk. > > What do we think about the following? Looks good to me, but it could use a comment in the code explaining why we do this. From sandeen@sandeen.net Mon Jul 6 23:00:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6740jTV124053 for ; Mon, 6 Jul 2009 23:00:45 -0500 X-ASG-Debug-ID: 1246939277-184e03280000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3263C1AFCDC6 for ; Mon, 6 Jul 2009 21:01:18 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id WTTbgsbyjGiyp35T for ; Mon, 06 Jul 2009 21:01:18 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 7A98DA9BE20; Mon, 6 Jul 2009 23:01:16 -0500 (CDT) Message-ID: <4A52C88C.2040600@sandeen.net> Date: Mon, 06 Jul 2009 23:01:16 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes References: <20090704182742.GA11083@infradead.org> In-Reply-To: <20090704182742.GA11083@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246939279 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Check that we correctly update the timestamps when writing to a file > through an mmap mapping. Currently fails for XFS due a VFS bug but > succeeds for many other filesystems. > > > Signed-off-by: Christoph Hellwig Test seems mostly ok, but aren't you missing 215.out in the patch? couple comments below > Index: xfstests-dev/215 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/215 2009-07-04 18:25:43.000000000 +0000 > @@ -0,0 +1,87 @@ > +#! /bin/sh > +# FS QA Test No. 215 > +# > +# Test out c/mtime updates after mapped writes. > +# > +# Based on the testcase in http://bugzilla.kernel.org/show_bug.cgi?id=2645 > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2009 Christoph Hellwig. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > +# creator > +owner=hch@lst.de > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +_cleanup() > +{ > + cd / > + rm -f $testfile > +} > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs generic > +_supported_os Linux > + > +testfile=$TEST_DIR/tst.mmap > + > +echo > +echo "creating test file" > +dd if=/dev/zero of=$testfile count=4096 > + > +mtime1=`stat --printf="%Y" $testfile` > +ctime1=`stat --printf="%Z" $testfile` > + > +sleep 1 Is there any slight chance a sleep 1 won't catch it? Would sleep 2 do better to be sure? > +echo > +echo "writing via mmap" > +$XFS_IO_PROG -F -f \ > + -c 'mmap 0 4096' \ > + -c 'mwrite 0 4096' \ > + $testfile | _filter_xfs_io_unique > + > +mtime2=`stat --printf="%Y" $testfile` > +ctime2=`stat --printf="%Z" $testfile` > + > +let mtime_diff=$mtime2-$mtime1 > +let ctime_diff=$ctime2-$ctime1 > + > +if [ "$mtime_diff" -eq "0" ]; then > + echo "FAIL: mtime not update after mapped write" > + status=1 > +fi > + > +if [ "$ctime_diff" -eq "0" ]; then > + echo "FAIL: ctime not update after mapped write" > + status=1 > +fi Should these just be _fail calls? Otherwise... > +# success, all done > +echo "*** done" > +rm -f $seq.full > +status=0 don't you always exit w/ status 0 and remove the full output? I guess i'm not sure when to use _fail and when to let the golden output difference kill the test, I suppose it doesn't much matter, it should pass & fail correctly either way. -Eric > Index: xfstests-dev/group > =================================================================== > --- xfstests-dev.orig/group 2009-07-04 18:07:40.000000000 +0000 > +++ xfstests-dev/group 2009-07-04 18:07:55.000000000 +0000 > @@ -323,3 +323,4 @@ > 212 auto aio quick > 213 rw auto prealloc quick > 214 rw auto prealloc quick > +215 auto metadata quick > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Mon Jul 6 23:10:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n674ATtI124290 for ; Mon, 6 Jul 2009 23:10:29 -0500 X-ASG-Debug-ID: 1246939863-4ac1016b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E255D347997 for ; Mon, 6 Jul 2009 21:11:03 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id RNHy0V5CwW65hsHE for ; Mon, 06 Jul 2009 21:11:03 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id C9646A9B0A7; Mon, 6 Jul 2009 23:11:02 -0500 (CDT) Message-ID: <4A52CAD6.1070807@sandeen.net> Date: Mon, 06 Jul 2009 23:11:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add tests to check log size scaling Subject: Re: [PATCH] xfstests: add tests to check log size scaling References: <20090705194111.GA3834@infradead.org> In-Reply-To: <20090705194111.GA3834@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246939863 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2740 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > XFS-QA test to check that log size scaling works correctly > for old and new maximum log sizes. > > [hch: split into two testcases for old "small" log scaling and the > large logs that require recent xfsprogs, and reduce the maximum > size by 1GB to make it possible to run the test on 32 bit platforms] > > Signed-off-by: Dave Chinner > Signed-off-by: Christoph Hellwig minor question below > > Index: xfstests-dev/216 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/216 2009-07-05 09:11:49.000000000 +0000 > @@ -0,0 +1,79 @@ > +#! /bin/sh > +# FS QA Test No. 216 > +# > +# log size mkfs test - ensure the log size scaling works for small filesystems > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > +# creator > +owner=dgc@sgi.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > + _cleanup_testdir > +} > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs xfs > +_supported_os Linux > + > +_setup_testdir > +_require_scratch > +_scratch_mkfs_xfs >/dev/null 2>&1 > +_scratch_mount Any reason to do this on the scratch dir vs. the test dir? (Since scratch dir became optional, I figure stuff that can go on the test dev instead, probably should?) not a big deal, it looks fine otherwise. -Eric > +_require_loop > +LOOP_DEV=$SCRATCH_MNT/test_fs > +LOOP_MNT=$SCRATCH_MNT/test_fs_dir > + > +_do_mkfs() > +{ > + for i in $*; do > + echo -n "fssize=${i}g " > + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ > + -d name=$LOOP_DEV,size=${i}g |grep log > + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT > + echo "test write" > $LOOP_MNT/test > + umount $LOOP_MNT > + done > +} > +# make large holey file > +$XFS_IO_PROG -f -c "truncate 256g" $LOOP_DEV > + > +#make loopback mount dir > +mkdir $LOOP_MNT > + > +# walk over standard sizes (up to 256GB) > +_do_mkfs 1 2 4 8 16 32 64 128 256 > + > +status=0 > +exit > Index: xfstests-dev/216.out > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/216.out 2009-07-05 09:07:36.000000000 +0000 > @@ -0,0 +1,10 @@ > +QA output created by 216 > +fssize=1g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=2g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=4g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=8g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=16g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=32g log =internal log bsize=4096 blocks=4096, version=2 > +fssize=64g log =internal log bsize=4096 blocks=8192, version=2 > +fssize=128g log =internal log bsize=4096 blocks=16384, version=2 > +fssize=256g log =internal log bsize=4096 blocks=32768, version=2 > Index: xfstests-dev/group > =================================================================== > --- xfstests-dev.orig/group 2009-07-04 18:07:55.000000000 +0000 > +++ xfstests-dev/group 2009-07-05 09:16:04.000000000 +0000 > @@ -324,3 +324,5 @@ > 213 rw auto prealloc quick > 214 rw auto prealloc quick > 215 auto metadata quick > +216 log metadata auto quick > +217 log metadata auto > Index: xfstests-dev/217 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/217 2009-07-05 09:26:57.000000000 +0000 > @@ -0,0 +1,89 @@ > +#! /bin/sh > +# FS QA Test No. 217 > +# > +# large log size mkfs test - ensure the log size scaling works > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > +# creator > +owner=dgc@sgi.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > + _cleanup_testdir > +} > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs xfs > +_supported_os Linux > + > +_setup_testdir > +_require_scratch > +_scratch_mkfs_xfs >/dev/null 2>&1 > +_scratch_mount > + > +_require_loop > +LOOP_DEV=$SCRATCH_MNT/test_fs > +LOOP_MNT=$SCRATCH_MNT/test_fs_dir > + > +_do_mkfs() > +{ > + for i in $*; do > + echo -n "fssize=${i}g " > + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ > + -d name=$LOOP_DEV,size=${i}g |grep log > + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT > + echo "test write" > $LOOP_MNT/test > + umount $LOOP_MNT > + done > +} > +# make large holey file > +$XFS_IO_PROG -f -c "truncate 16383g" $LOOP_DEV > + > +#make loopback mount dir > +mkdir $LOOP_MNT > + > +# test if large logs are supported > +$MKFS_XFS_PROG -f -l size=256m -d name=$LOOP_DEV,size=10g > /dev/null 2>&1 > +if [ $? -ne 0 ]; then > + _notrun "large log sizes not supported by mkfs" > +fi > + > +# > +# walk over "new" sizes supported by recent xfsprogs. > +# Note that the last test is for 16TB-1GB as 32bit platforms only support > +# device slightly smaller than 16TB. > +# > +_do_mkfs 512 1024 2048 4096 8192 16383 > + > +status=0 > +exit > Index: xfstests-dev/217.out > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/217.out 2009-07-05 09:20:17.000000000 +0000 > @@ -0,0 +1,7 @@ > +QA output created by 217 > +fssize=512g log =internal log bsize=4096 blocks=65536, version=2 > +fssize=1024g log =internal log bsize=4096 blocks=131072, version=2 > +fssize=2048g log =internal log bsize=4096 blocks=262144, version=2 > +fssize=4096g log =internal log bsize=4096 blocks=521728, version=2 > +fssize=8192g log =internal log bsize=4096 blocks=521728, version=2 > +fssize=16383g log =internal log bsize=4096 blocks=521728, version=2 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From SEMA-CR-1-58SIH9@ptcmarketing.com Tue Jul 7 01:13:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.5 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n676DK20130010 for ; Tue, 7 Jul 2009 01:13:20 -0500 X-ASG-Debug-ID: 1246947233-4ab203670000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay2.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2196B347B4A for ; Mon, 6 Jul 2009 23:13:53 -0700 (PDT) Received: from relay2.ptc.com (relay2.ptc.com [12.11.148.122]) by cuda.sgi.com with ESMTP id oYnKAFeNQ4AePMMG for ; Mon, 06 Jul 2009 23:13:53 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.42,361,1243828800"; d="scan'208,217";a="305349706" Received: from hqcrmprdint18.ptcnet.ptc.com ([132.253.201.206]) by crmmaxx.ptc.com with ESMTP; 07 Jul 2009 02:12:44 -0400 To: MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Info" X-ASG-Orig-Subj: Upgrade to ProductView Professional - Now Available at the PTC Web Store Subject: Upgrade to ProductView Professional - Now Available at the PTC Web Store Sender: "PTC Info" Message-ID: Content-Type: multipart/alternative; boundary=BF_1246946970080_2118487217 X-Barracuda-Connect: relay2.ptc.com[12.11.148.122] X-Barracuda-Start-Time: 1246947234 Date: Mon, 6 Jul 2009 23:13:53 -0700 (PDT) X-Barracuda-Bayes: INNOCENT GLOBAL 0.3864 1.0000 -0.0363 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.78 X-Barracuda-Spam-Status: No, SCORE=0.78 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e, HTML_MESSAGE, MIME_QP_LONG_LINE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2747 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.82 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.00 BSF_SC5_SA210e Custom Rule SA210e X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1246946970080_2118487217 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Now Available at the PTC Web Store =E2=80=93 ProductView Lite to MCAD Profes= sional Upgrade (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-4AOWXZ= &o=3D= 1-50D7OL= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fgo%2Fviewupgrade) ProductView MCAD Professional =E2=80=93 Ultra Scalable Visual Collaboration ProductView MCAD Professional is a universal viewer that brings 3D MCAD prod= uct models, assemblies, drawings, images and documents to everyone=E2=80=99s= desktop for comprehensive interrogation and visual collaboration=E2=80=93al= l without the need for native authoring applications. Key Benefits: =E2=80=A2 Accelerate the Design Process =E2=80=93 By offering comprehensive = view, markup and annotation tools, and market-leading performance, ProductVi= ew MCAD Professional can accelerate the important design reviews that occur = throughout the product development process. Now people around the world can = simultaneously be involved in the design process. And, with its ultrascalabi= lity, ProductView MCAD Professional supports a full range of visualization, = spanning from simple desktop viewing of single CAD models to the interaction with your most massi= ve digital models of over one million parts. =E2=80=A2 Reduce IT Infrastructure to Overhead =E2=80=93 Having a single too= l toview many types of detailed product data lowers the amount of overhead r= equiredfrom the IT department. A common, consistent interface that can acces= s digitalproduct definition data across the enterprise lowers expenses assoc= iated withsoftware maintenance, product upgrades and internal training. Elim= inating datainteroperability issues translates into lower overhead and highe= r productivity. =E2=80=A2 Improve Efficiency =E2=80=93 Productivity improves by allowing eng= ineersto easily share visual information across the enterprise, while still = permitting users to accurately measure dimensions. Not only can ProductView = MCAD Professional accelerate time-to-market, but its visual collaboration an= d markup capabilities can also help reduce costs. =E2=80=A2 Increase Control and Security =E2=80=93 ProductView MCAD Professio= nal allows critical business documents (both drawings and 2D documents) to b= e securely managed when collaborating on projects both within and beyond the= enterprise.Now, you can view more information and easily and instantly purc= hase ProductView products from the PTC Web Store. To upgrade to ProductView MCAD Professional or to visit the PTC Web Store, g= o to: http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-4AOWXZ= &o=3D= 1-50D7OL= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fgo%2Fviewupgrade =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-50D7OL= &campd=3D= 1-4AOWXZ= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change email preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-50D7OL= &campd=3D= 1-4AOWXZ= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= . --BF_1246946970080_2118487217 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Upgrade System Notice Email Q309 NA SMB DR - ProductView
3D"PTC.com"

Now Available = at the PTC Web Store – ProductView Lite to MCAD Professional Upgrade=20

ProductView MCAD Professional – Ultra Scalable Visual Colla= boration

ProductView MCAD Professional is a universal viewer that brings 3D MCAD p= roduct models, assemblies, drawings, images and documents to everyone’= s desktop for comprehensive interrogation and visual collaboration–all= without the need for native authoring applications.

Key Benefits:

•       Accelerate the Design= Process – By offering comprehensive view, markup and annotat= ion tools, and market-leading performance, ProductView MCAD Professional can= accelerate the important design reviews that occur throughout the product d= evelopment process. Now people around the world can simultaneously be involv= ed in the design process. And, with its ultrascalability, ProductView MCAD P= rofessional supports a full range of visualization, spanning from simple des= ktop viewing of single CAD models to the interaction with your most massive = digital models of over one million parts.

•       Reduce IT Infrastruct= ure to Overhead – Having a single tool to view many types of = detailed product data lowers the amount of overhead required from the IT dep= artment. A common, consistent interface that can access digital product defi= nition data across the enterprise lowers expenses associated with software m= aintenance, product upgrades and internal training. Eliminating data interop= erability issues translates into lower overhead and higher productivity.

•       Improve Efficiency &#= 8211; Productivity improves by allowing engineers to easily share v= isual information across the enterprise, while still permitting users to acc= urately measure dimensions. Not only can ProductView MCAD Professional accel= erate time-to-market, but its visual collaboration and markup capabilities c= an also help reduce costs.

•       Increase Control and = Security – ProductView MCAD Professional allows critical busi= ness documents (both drawings and 2D documents) to be securely managed when = collaborating on projects both within and beyond the enterprise.Now, you can= view more information and easily and instantly purchase ProductView product= s from the PTC Web Store.

To upgrade to ProductView MCAD Professional or to visit the PTC W= eb Store, go to: www.ptc.com/go= /viewupgrade

3D""

contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1246946970080_2118487217-- From info@uio.no Tue Jul 7 03:42:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.3 required=5.0 tests=BAYES_20,SUBJ_ATTENTION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n678gjxA133918 for ; Tue, 7 Jul 2009 03:42:45 -0500 X-ASG-Debug-ID: 1246956199-666a004b0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from olc-14.verat.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3B50A34820B for ; Tue, 7 Jul 2009 01:43:19 -0700 (PDT) Received: from olc-14.verat.net (olc-14.verat.net [62.108.127.40]) by cuda.sgi.com with ESMTP id vyaIp9g5x7ai009t for ; Tue, 07 Jul 2009 01:43:19 -0700 (PDT) Received: from webmail.verat.net (webmail.verat.net [85.222.160.153]) by olc-14.verat.net (Postfix) with ESMTP id 56409C0827; Tue, 7 Jul 2009 10:38:21 +0200 (CEST) Received: from 41.220.75.3 (SquirrelMail authenticated user chuch) by webmail.verat.net with HTTP; Tue, 7 Jul 2009 10:43:16 +0200 (CEST) Message-ID: <47552.41.220.75.3.1246956196.squirrel@webmail.verat.net> Date: Tue, 7 Jul 2009 10:43:16 +0200 (CEST) X-ASG-Orig-Subj: ATTENTION: Subject: ATTENTION: From: "Universitetet i Oslo (UiO)" Reply-To: account.unitq12@gmail.com User-Agent: SquirrelMail/1.4.13 MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-Barracuda-Connect: olc-14.verat.net[62.108.127.40] X-Barracuda-Start-Time: 1246956200 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3970 1.0000 -0.0077 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.01 X-Barracuda-Spam-Status: No, SCORE=-0.01 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2756 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ATTENTION: Denne posten er å informere alle våre [Uio.no] brukere at webmail konto har blitt kompromittert av spammere ved å få tilgang til din webmail konto og har brukt den til ulovlige internett-aktiviteter. Du er bedt om å gi din nåværende påloggings-IDen for at vi nullstiller din webpostkontoen passord umiddelbart å aviod misbruk av kontoen. * E-postadresse: * Gjeldende passord: * Future Passord: Du skal bli kontaktet med et nytt passord ved ferdigstillelse, og du er anbefales å gi informasjonen ovenfor eller kontoen din vil bli avbrutt av misbruk team. Takk for at du bruker Uio.no Webmail! Uio.no Vedlikehold Team. From olaf@sgi.com Tue Jul 7 03:59:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n678x6wU134291 for ; Tue, 7 Jul 2009 03:59:07 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n678xdK6275740; Tue, 7 Jul 2009 10:59:39 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n678xdwx275743; Tue, 7 Jul 2009 10:59:39 +0200 (MEST) To: Christoph Hellwig Cc: Eric Sandeen , xfs mailing list Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090706184257.GA18107@infradead.org> From: Olaf Weber Date: Tue, 07 Jul 2009 10:59:37 +0200 In-Reply-To: <20090706184257.GA18107@infradead.org> (Christoph Hellwig's message of "Mon, 6 Jul 2009 14:42:57 -0400") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig writes: > On Mon, Jul 06, 2009 at 01:25:34PM -0500, Eric Sandeen wrote: >> I'm tiring of telling people to use the inode64 mount option >> when they are experiencing bad performance on large xfs >> filesystems... >> >> 32-bit userspace is still largely broken when it comes to still >> using 32-bit stat calls, but on 64-bit systems this should be >> safe. >> >> The only problem here is moving the disk onto a 32-bit system, or using >> 32-bit apps. But I think it's a small risk. >> >> What do we think about the following? > Looks good to me, but it could use a comment in the code explaining why > we do this. Making inode64 the default on 64 bit systems seems like a good idea to me. But would it not be advisable to have a mount option that forces the old behaviour, just in case? Something like "broken32bituserspace" (or maybe "inode32"). -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From olaf@sgi.com Tue Jul 7 04:07:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6796xXZ134507 for ; Tue, 7 Jul 2009 04:07:00 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6797VDe275899; Tue, 7 Jul 2009 11:07:32 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6797Uk1275913; Tue, 7 Jul 2009 11:07:30 +0200 (MEST) To: Eric Sandeen Cc: xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, "MASON, CHRISTOPHER" Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage References: <4A4D26C5.9070606@redhat.com> From: Olaf Weber Date: Tue, 07 Jul 2009 11:07:30 +0200 In-Reply-To: <4A4D26C5.9070606@redhat.com> (Eric Sandeen's message of "Thu, 02 Jul 2009 16:29:41 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: > Talking w/ someone who had a raid6 of 15 drives on an areca > controller, he wondered why he could only get 300MB/s or so > out of a streaming buffered write to xfs like so: > dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 > 10737418240 bytes (11 GB) copied, 34.294 s, 313 MB/s > when the same write directly to the device was going closer > to 700MB/s... > With the following change things get moving again for xfs: > dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 > 10737418240 bytes (11 GB) copied, 16.2938 s, 659 MB/s > Chris had sent out something similar at Christoph's suggestion, > and Christoph reminded me of it, and I tested it a variant of > it, and it seems to help shockingly well. > Feels like a bandaid though; thoughts? Other tests to do? If the nr_to_write calculation really yields a value that is too small, shouldn't it be fixed elsewhere? Otherwise it might make sense to make the fudge factor tunable. > + > + /* > + * VM calculation for nr_to_write seems off. Bump it way > + * up, this gets simple streaming writes zippy again. > + */ > + wbc->nr_to_write *= 4; > + -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From ms@citd.de Tue Jul 7 04:37:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n679br9i135713 for ; Tue, 7 Jul 2009 04:37:53 -0500 X-ASG-Debug-ID: 1246959911-3f1a01510000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 43E719F20AE for ; Tue, 7 Jul 2009 02:45:11 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id 5lnjPOsbiLbYIFxQ for ; Tue, 07 Jul 2009 02:45:11 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id BF0842BCAC; Tue, 7 Jul 2009 11:38:18 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 4GDdm3NdT1Qy; Tue, 7 Jul 2009 11:38:06 +0200 (CEST) Received: from citd.de (p4FC4D1F7.dip.t-dialin.net [79.196.209.247]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 246A62BC77; Tue, 7 Jul 2009 11:38:05 +0200 (CEST) Date: Tue, 7 Jul 2009 11:38:02 +0200 From: Matthias Schniedermeyer To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems Message-ID: <20090707093802.GA32125@citd.de> References: <4A52419E.5020301@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52419E.5020301@sandeen.net> User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1246959913 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 06.07.2009 13:25, Eric Sandeen wrote: > I'm tiring of telling people to use the inode64 mount option > when they are experiencing bad performance on large xfs > filesystems... > > 32-bit userspace is still largely broken when it comes to still > using 32-bit stat calls, but on 64-bit systems this should be > safe. > > The only problem here is moving the disk onto a 32-bit system, or using > 32-bit apps. But I think it's a small risk. > > What do we think about the following? What is with people running 64bit kernel but 32bit Userspace? Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From mw@dermichi.com Tue Jul 7 05:12:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67ACTdT138193 for ; Tue, 7 Jul 2009 05:12:30 -0500 X-ASG-Debug-ID: 1246961995-71f503400000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from firestarter.dermichi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D6825129A68C; Tue, 7 Jul 2009 03:19:56 -0700 (PDT) Received: from firestarter.dermichi.com (firestarter.dermichi.com [83.64.48.195]) by cuda.sgi.com with ESMTP id fm6PNvrZ9VZhtZdb; Tue, 07 Jul 2009 03:19:56 -0700 (PDT) Received: from cerberus.net4you.net ([194.177.153.130] helo=[192.168.200.110]) by firestarter.dermichi.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1MO7fa-0004g2-9y; Tue, 07 Jul 2009 12:13:02 +0200 Message-ID: <4A531FAB.3050406@dermichi.com> Date: Tue, 07 Jul 2009 12:12:59 +0200 From: Michael Weissenbacher User-Agent: Thunderbird 2.0.0.22 (X11/20090608) MIME-Version: 1.0 To: Olaf Weber CC: Christoph Hellwig , Eric Sandeen , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090706184257.GA18107@infradead.org> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: firestarter.dermichi.com[83.64.48.195] X-Barracuda-Start-Time: 1246961996 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1341 1.0000 -1.1918 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.59 X-Barracuda-Spam-Status: No, SCORE=-0.59 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2763 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi! > Making inode64 the default on 64 bit systems seems like a good idea to > me. But would it not be advisable to have a mount option that forces > the old behaviour, just in case? Something like "broken32bituserspace" > (or maybe "inode32"). > I think such a mount option would be a must. There is lots of 32-bit Software that cannot cope with 64-bit inodes. Unfortunately there are closed-source 32-bit apps (which can be run on 64 bit systems) where nothing can be done for 64-bit inode compatiblity in the short term. Had this problem very recently with the Zmanda Enterprise Backup Software, which forced me to remove the inode64 option. regards, Michael From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:17:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AH2pd138418 for ; Tue, 7 Jul 2009 05:17:04 -0500 X-ASG-Debug-ID: 1246961857-666d03770000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2606D34864C for ; Tue, 7 Jul 2009 03:17:37 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id nehaQs40YZiDGbhb for ; Tue, 07 Jul 2009 03:17:37 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7k1-0002Jh-BO; Tue, 07 Jul 2009 10:17:37 +0000 Date: Tue, 7 Jul 2009 06:17:37 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Message-ID: <20090707101737.GA1934@infradead.org> References: <20090704182742.GA11083@infradead.org> <4A52C88C.2040600@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52C88C.2040600@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246961858 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 06, 2009 at 11:01:16PM -0500, Eric Sandeen wrote: > Christoph Hellwig wrote: > > Check that we correctly update the timestamps when writing to a file > > through an mmap mapping. Currently fails for XFS due a VFS bug but > > succeeds for many other filesystems. > > > > > > Signed-off-by: Christoph Hellwig > > Test seems mostly ok, but aren't you missing 215.out in the patch? Yeah, looks like it. It's in my local tree, though :) > > +sleep 1 > > Is there any slight chance a sleep 1 won't catch it? Would sleep 2 do > better to be sure? A one second sleep should always increase the wall time by one second, shouldn't it? We can do the sleep 2 to be double safe in case of rounging issues, though. > > + echo "FAIL: mtime not update after mapped write" > > + status=1 > > +fi > > + > > +if [ "$ctime_diff" -eq "0" ]; then > > + echo "FAIL: ctime not update after mapped write" > > + status=1 > > +fi > > Should these just be _fail calls? Otherwise... > > > +# success, all done > > +echo "*** done" > > +rm -f $seq.full > > +status=0 > > don't you always exit w/ status 0 and remove the full output? > > I guess i'm not sure when to use _fail and when to let the golden output > difference kill the test, I suppose it doesn't much matter, it should > pass & fail correctly either way. You're right, the status=1 is overrident currently and it only fails due to the golden output difference. I'll respin it to just kill the superflous status assignment. From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:19:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AJaBR138519 for ; Tue, 7 Jul 2009 05:19:37 -0500 X-ASG-Debug-ID: 1246962007-6669037f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B0AD9348256; Tue, 7 Jul 2009 03:20:07 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id farTyuekZL14028d; Tue, 07 Jul 2009 03:20:07 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7m6-0007pV-4l; Tue, 07 Jul 2009 10:19:46 +0000 Date: Tue, 7 Jul 2009 06:19:46 -0400 From: Christoph Hellwig To: Olaf Weber Cc: Eric Sandeen , xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, "MASON, CHRISTOPHER" X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707101946.GB1934@infradead.org> References: <4A4D26C5.9070606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246962007 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Jul 07, 2009 at 11:07:30AM +0200, Olaf Weber wrote: > If the nr_to_write calculation really yields a value that is too > small, shouldn't it be fixed elsewhere? In theory it should. But given the amazing feedback of the VM people on this I'd rather make sure we do get the full HW bandwith on large arrays instead of sucking badly and not just wait forever. From kosaki.motohiro@jp.fujitsu.com Tue Jul 7 05:32:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AWaxr138929 for ; Tue, 7 Jul 2009 05:32:37 -0500 X-ASG-Debug-ID: 1246962790-4d4203020000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail7.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C536F1AFE2C0 for ; Tue, 7 Jul 2009 03:33:10 -0700 (PDT) Received: from fgwmail7.fujitsu.co.jp (fgwmail7.fujitsu.co.jp [192.51.44.37]) by cuda.sgi.com with ESMTP id oQ88IXO5Q4pzcWgM for ; Tue, 07 Jul 2009 03:33:10 -0700 (PDT) Received: from m4.gw.fujitsu.co.jp ([10.0.50.74]) by fgwmail7.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n67AX9UK001663 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Tue, 7 Jul 2009 19:33:09 +0900 Received: from smail (m4 [127.0.0.1]) by outgoing.m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 3D2E145DE6E for ; Tue, 7 Jul 2009 19:33:09 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4.gw.fujitsu.co.jp [10.0.50.94]) by m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 12FEB45DE60 for ; Tue, 7 Jul 2009 19:33:09 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id E6AB81DB8037 for ; Tue, 7 Jul 2009 19:33:08 +0900 (JST) Received: from m108.s.css.fujitsu.com (m108.s.css.fujitsu.com [10.249.87.108]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 97C941DB803F for ; Tue, 7 Jul 2009 19:33:05 +0900 (JST) Received: from m108.css.fujitsu.com (m108 [127.0.0.1]) by m108.s.css.fujitsu.com (Postfix) with ESMTP id 6D0FA428058; Tue, 7 Jul 2009 19:33:05 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by m108.s.css.fujitsu.com (Postfix) with ESMTP id BF4FB428052; Tue, 7 Jul 2009 19:33:04 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Tue, 07 Jul 2009 19:33:03 +0900 (JST) From: KOSAKI Motohiro To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Olaf Weber , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, "MASON, CHRISTOPHER" In-Reply-To: <20090707101946.GB1934@infradead.org> References: <20090707101946.GB1934@infradead.org> Message-Id: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Tue, 7 Jul 2009 19:33:04 +0900 (JST) X-Barracuda-Connect: fgwmail7.fujitsu.co.jp[192.51.44.37] X-Barracuda-Start-Time: 1246962791 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3017 1.0000 -0.3410 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.34 X-Barracuda-Spam-Status: No, SCORE=-0.34 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2764 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > On Tue, Jul 07, 2009 at 11:07:30AM +0200, Olaf Weber wrote: > > If the nr_to_write calculation really yields a value that is too > > small, shouldn't it be fixed elsewhere? > > In theory it should. But given the amazing feedback of the VM people > on this I'd rather make sure we do get the full HW bandwith on large > arrays instead of sucking badly and not just wait forever. At least, I agree with Olaf. if you got someone's NAK in past thread, Could you please tell me its url? From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:32:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AWgmW138938 for ; Tue, 7 Jul 2009 05:32:42 -0500 X-ASG-Debug-ID: 1246962797-4d4402fe0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 11D451AFE2CA for ; Tue, 7 Jul 2009 03:33:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id eo0SDpdN6vjzEVVQ for ; Tue, 07 Jul 2009 03:33:17 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7zB-0005Xb-CL; Tue, 07 Jul 2009 10:33:17 +0000 Date: Tue, 7 Jul 2009 06:33:17 -0400 From: Christoph Hellwig To: Jan Engelhardt Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: A rescue tool: xfs_irecover Subject: Re: A rescue tool: xfs_irecover Message-ID: <20090707103317.GA20410@infradead.org> References: <20090204082816.GA9111@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246962798 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jun 29, 2009 at 03:25:22PM +0200, Jan Engelhardt wrote: > Just wanted to check back????? did you finalize this idea of using > libxfs and/or importing it into xfsprogs? I started converting it to libxfs, but I got a bit distracted. It's still on my TODO list to finish it. From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:32:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_54 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AWv0j138961 for ; Tue, 7 Jul 2009 05:32:58 -0500 X-ASG-Debug-ID: 1246962813-048900870000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 37A961AFE2D7 for ; Tue, 7 Jul 2009 03:33:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IHYX4DHX8W5Y8dkQ for ; Tue, 07 Jul 2009 03:33:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7zQ-0005aB-UQ for xfs@oss.sgi.com; Tue, 07 Jul 2009 10:33:32 +0000 Date: Tue, 7 Jul 2009 06:33:32 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device Subject: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device Message-ID: <20090707103332.GB20410@infradead.org> References: <20090620173554.GA26470@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090620173554.GA26470@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246962813 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ping? On Sat, Jun 20, 2009 at 01:35:54PM -0400, Christoph Hellwig wrote: > Also clean up the way the test configuration is printed. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests-dev/check > =================================================================== > --- xfstests-dev.orig/check 2009-06-20 17:31:00.000000000 +0000 > +++ xfstests-dev/check 2009-06-20 17:33:46.000000000 +0000 > @@ -161,18 +161,15 @@ > > [ -f check.time ] || touch check.time > > -FULL_FSTYP_DETAILS=`_full_fstyp_details` > -FULL_HOST_DETAILS=`_full_platform_details` > -FULL_MKFS_OPTIONS=`_scratch_mkfs_options` > -FULL_MOUNT_OPTIONS=`_scratch_mount_options` > - > -cat < -FSTYP -- $FULL_FSTYP_DETAILS > -PLATFORM -- $FULL_HOST_DETAILS > -MKFS_OPTIONS -- $FULL_MKFS_OPTIONS > -MOUNT_OPTIONS -- $FULL_MOUNT_OPTIONS > +# print out our test configuration > +echo "FSTYP -- `_full_fstyp_details`" > +echo "PLATFORM -- `_full_platform_details`" > +if [ ! -z "$SCRATCH_DEV" ]; then > + echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" > + echo "MOUNT_OPTIONS -- `_scratch_mount_options`" > +fi > +echo > > -EOF > > if [ ! -z "$SCRATCH_DEV" ]; then > umount $SCRATCH_DEV 2>/dev/null > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:33:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AX3BY138982 for ; Tue, 7 Jul 2009 05:33:04 -0500 X-ASG-Debug-ID: 1246962819-423a00430000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 465FD3483EC for ; Tue, 7 Jul 2009 03:33:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9bgBC1toEFJtHpLV for ; Tue, 07 Jul 2009 03:33:39 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7zX-0005aq-02 for xfs@oss.sgi.com; Tue, 07 Jul 2009 10:33:39 +0000 Date: Tue, 7 Jul 2009 06:33:38 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: small common.config cleanup Subject: Re: [PATCH] xfstests: small common.config cleanup Message-ID: <20090707103338.GC20410@infradead.org> References: <20090620173818.GA26809@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090620173818.GA26809@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246962819 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ping? On Sat, Jun 20, 2009 at 01:38:18PM -0400, Christoph Hellwig wrote: > Don't list various non-mandatory options near the check for the > mandatory ones, and make the test for the mandatory ones a proper if > statements. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests-dev/common.config > =================================================================== > --- xfstests-dev.orig/common.config 2009-06-20 19:15:14.576805079 +0200 > +++ xfstests-dev/common.config 2009-06-20 19:16:48.956930262 +0200 > @@ -191,27 +191,18 @@ known_hosts() > [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST > [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config > > + # Mandatory Config values. > MC="" > -# Non-Mandatory Config values. > -# [ -z "$MODULAR" ] && MC="$MC MODULAR" > -# [ -z "$TEST_LOGDEV" ] && MC="$MC TEST_LOGDEV" > -# [ -z "$SCRATCH_LOGDEV" ] && MC="$MC SCRATCH_LOGDEV" > -# [ -z "$SCRATCH_RTDEV" ] && MC="$MC SCRATCH_RTDEV" > -# [ -z "$SCRATCH_MNT" ] && MC="$MC SCRATCH_MNT" > -# [ -z "$SCRATCH_DEV" ] && MC="$MC SCRATCH_DEV" > - > [ -z "$EMAIL" ] && MC="$MC EMAIL" > [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" > [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" > > - [ "$MC" ] && (echo "Warning: need to define parameters for host $HOST";\ > - echo " or set variables:"; \ > - echo " $MC") > -# if [ -e configs/$HOST.config ] > -# then echo "Not carring, we have a configfile ($HOST_CONFIG_DIR/$HOST)" > -# else > - [ "$MC" ] && exit 1 > -# fi > + if [ -n "$MC" ]; then > + echo "Warning: need to define parameters for host $HOST" > + echo " or set variables:" > + echo " $MC" > + exit 1 > + fi > } > > if [ -f "$HOST_OPTIONS" ]; then > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:43:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AhSoO139652 for ; Tue, 7 Jul 2009 05:43:28 -0500 X-ASG-Debug-ID: 1246963443-044d00bc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D8DC11AFE537 for ; Tue, 7 Jul 2009 03:44:03 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9FHzLxG4rYMybQb3 for ; Tue, 07 Jul 2009 03:44:03 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO89b-0000go-7I; Tue, 07 Jul 2009 10:44:03 +0000 Date: Tue, 7 Jul 2009 06:44:03 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add tests to check log size scaling Subject: Re: [PATCH] xfstests: add tests to check log size scaling Message-ID: <20090707104403.GA21747@infradead.org> References: <20090705194111.GA3834@infradead.org> <4A52CAD6.1070807@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52CAD6.1070807@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246963443 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 06, 2009 at 11:11:02PM -0500, Eric Sandeen wrote: > Any reason to do this on the scratch dir vs. the test dir? (Since > scratch dir became optional, I figure stuff that can go on the test dev > instead, probably should?) > > not a big deal, it looks fine otherwise. The test should work just fine using the test dir, and given that these bits all cam from Dave I can't speak for his reason to use the scratch dir. But given that even creating an empty 16TB filesystem uses up a lot of space I'd rather have as much as possible free space available instead of sharing it with an aged filesystem. From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:44:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67Ai8fL139676 for ; Tue, 7 Jul 2009 05:44:08 -0500 X-ASG-Debug-ID: 1246963483-2248022b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BCB8834877A; Tue, 7 Jul 2009 03:44:43 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id CRQFwdKWzUphqF2R; Tue, 07 Jul 2009 03:44:43 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO8AC-00081I-HS; Tue, 07 Jul 2009 10:44:40 +0000 Date: Tue, 7 Jul 2009 06:44:40 -0400 From: Christoph Hellwig To: KOSAKI Motohiro Cc: Christoph Hellwig , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber , "MASON, CHRISTOPHER" X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707104440.GB21747@infradead.org> References: <20090707101946.GB1934@infradead.org> <20090707193015.7DCD.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246963483 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > At least, I agree with Olaf. if you got someone's NAK in past thread, > Could you please tell me its url? The previous thread was simply dead-ended and nothing happened. From olaf@sgi.com Tue Jul 7 06:36:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67BaXNW142072 for ; Tue, 7 Jul 2009 06:36:34 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n67Bb6b2277062; Tue, 7 Jul 2009 13:37:07 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n67Bb5NY276867; Tue, 7 Jul 2009 13:37:05 +0200 (MEST) To: Christoph Hellwig Cc: Eric Sandeen , linux-mm@kvack.org, "MASON, CHRISTOPHER" , xfs mailing list Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage References: <4A4D26C5.9070606@redhat.com> <20090707101946.GB1934@infradead.org> From: Olaf Weber Date: Tue, 07 Jul 2009 13:37:05 +0200 In-Reply-To: <20090707101946.GB1934@infradead.org> (Christoph Hellwig's message of "Tue, 7 Jul 2009 06:19:46 -0400") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig writes: > On Tue, Jul 07, 2009 at 11:07:30AM +0200, Olaf Weber wrote: >> If the nr_to_write calculation really yields a value that is too >> small, shouldn't it be fixed elsewhere? > In theory it should. But given the amazing feedback of the VM people > on this I'd rather make sure we do get the full HW bandwith on large > arrays instead of sucking badly and not just wait forever. So how do you feel about making the fudge factor tunable? I don't have a good sense myself of what the value should be, whether the hard-coded 4 is good enough in general. -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Tue Jul 7 08:54:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67Dswmm147654 for ; Tue, 7 Jul 2009 08:54:58 -0500 X-ASG-Debug-ID: 1246975344-5b8102c50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7A98E9F5D26 for ; Tue, 7 Jul 2009 07:02:25 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id zYeFYhfUADuCdz84 for ; Tue, 07 Jul 2009 07:02:25 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 90702A9BE23; Tue, 7 Jul 2009 08:55:30 -0500 (CDT) Message-ID: <4A5353D2.7010508@sandeen.net> Date: Tue, 07 Jul 2009 08:55:30 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add tests to check log size scaling Subject: Re: [PATCH] xfstests: add tests to check log size scaling References: <20090705194111.GA3834@infradead.org> <4A52CAD6.1070807@sandeen.net> <20090707104403.GA21747@infradead.org> In-Reply-To: <20090707104403.GA21747@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246975346 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2777 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Mon, Jul 06, 2009 at 11:11:02PM -0500, Eric Sandeen wrote: >> Any reason to do this on the scratch dir vs. the test dir? (Since >> scratch dir became optional, I figure stuff that can go on the test dev >> instead, probably should?) >> >> not a big deal, it looks fine otherwise. > > The test should work just fine using the test dir, and given that these > bits all cam from Dave I can't speak for his reason to use the scratch > dir. But given that even creating an empty 16TB filesystem uses up a > lot of space I'd rather have as much as possible free space available > instead of sharing it with an aged filesystem. Ok, it's fine by me as posted then, consider it reviewed. -Eric From sandeen@sandeen.net Tue Jul 7 08:57:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_54 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67Dvv2L147740 for ; Tue, 7 Jul 2009 08:57:57 -0500 X-ASG-Debug-ID: 1246975110-329e02fa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7CCD13490EC for ; Tue, 7 Jul 2009 06:58:31 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id CrQC7KEuvJnF5xis for ; Tue, 07 Jul 2009 06:58:31 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id AC476A9BE23; Tue, 7 Jul 2009 08:58:29 -0500 (CDT) Message-ID: <4A535485.8050901@sandeen.net> Date: Tue, 07 Jul 2009 08:58:29 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device Subject: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device References: <20090620173554.GA26470@infradead.org> In-Reply-To: <20090620173554.GA26470@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246975112 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2778 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Also clean up the way the test configuration is printed. > > > Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen > Index: xfstests-dev/check > =================================================================== > --- xfstests-dev.orig/check 2009-06-20 17:31:00.000000000 +0000 > +++ xfstests-dev/check 2009-06-20 17:33:46.000000000 +0000 > @@ -161,18 +161,15 @@ > > [ -f check.time ] || touch check.time > > -FULL_FSTYP_DETAILS=`_full_fstyp_details` > -FULL_HOST_DETAILS=`_full_platform_details` > -FULL_MKFS_OPTIONS=`_scratch_mkfs_options` > -FULL_MOUNT_OPTIONS=`_scratch_mount_options` > - > -cat < -FSTYP -- $FULL_FSTYP_DETAILS > -PLATFORM -- $FULL_HOST_DETAILS > -MKFS_OPTIONS -- $FULL_MKFS_OPTIONS > -MOUNT_OPTIONS -- $FULL_MOUNT_OPTIONS > +# print out our test configuration > +echo "FSTYP -- `_full_fstyp_details`" > +echo "PLATFORM -- `_full_platform_details`" > +if [ ! -z "$SCRATCH_DEV" ]; then > + echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" > + echo "MOUNT_OPTIONS -- `_scratch_mount_options`" > +fi > +echo > > -EOF > > if [ ! -z "$SCRATCH_DEV" ]; then > umount $SCRATCH_DEV 2>/dev/null > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Jul 7 09:04:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67E4RP2147956 for ; Tue, 7 Jul 2009 09:04:27 -0500 X-ASG-Debug-ID: 1246975502-398303200000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C63B1348DA7 for ; Tue, 7 Jul 2009 07:05:02 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id kJb2A680AZ1Iul63 for ; Tue, 07 Jul 2009 07:05:02 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 07A33A9BF30; Tue, 7 Jul 2009 09:05:02 -0500 (CDT) Message-ID: <4A53560D.5080409@sandeen.net> Date: Tue, 07 Jul 2009 09:05:01 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: small common.config cleanup Subject: Re: [PATCH] xfstests: small common.config cleanup References: <20090620173818.GA26809@infradead.org> In-Reply-To: <20090620173818.GA26809@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246975502 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2778 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Don't list various non-mandatory options near the check for the > mandatory ones, and make the test for the mandatory ones a proper if > statements. > > > Signed-off-by: Christoph Hellwig Looks ok to me: Reviewed-by: Eric Sandeen > Index: xfstests-dev/common.config > =================================================================== > --- xfstests-dev.orig/common.config 2009-06-20 19:15:14.576805079 +0200 > +++ xfstests-dev/common.config 2009-06-20 19:16:48.956930262 +0200 > @@ -191,27 +191,18 @@ known_hosts() > [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST > [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config > > + # Mandatory Config values. > MC="" > -# Non-Mandatory Config values. > -# [ -z "$MODULAR" ] && MC="$MC MODULAR" > -# [ -z "$TEST_LOGDEV" ] && MC="$MC TEST_LOGDEV" > -# [ -z "$SCRATCH_LOGDEV" ] && MC="$MC SCRATCH_LOGDEV" > -# [ -z "$SCRATCH_RTDEV" ] && MC="$MC SCRATCH_RTDEV" > -# [ -z "$SCRATCH_MNT" ] && MC="$MC SCRATCH_MNT" > -# [ -z "$SCRATCH_DEV" ] && MC="$MC SCRATCH_DEV" > - > [ -z "$EMAIL" ] && MC="$MC EMAIL" > [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" > [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" > > - [ "$MC" ] && (echo "Warning: need to define parameters for host $HOST";\ > - echo " or set variables:"; \ > - echo " $MC") > -# if [ -e configs/$HOST.config ] > -# then echo "Not carring, we have a configfile ($HOST_CONFIG_DIR/$HOST)" > -# else > - [ "$MC" ] && exit 1 > -# fi > + if [ -n "$MC" ]; then > + echo "Warning: need to define parameters for host $HOST" > + echo " or set variables:" > + echo " $MC" > + exit 1 > + fi > } > > if [ -f "$HOST_OPTIONS" ]; then > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Jul 7 09:05:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67E5YPh147997 for ; Tue, 7 Jul 2009 09:05:34 -0500 X-ASG-Debug-ID: 1246975569-3298034b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7B660349147 for ; Tue, 7 Jul 2009 07:06:09 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id VKCHSocrRgRbDxdL for ; Tue, 07 Jul 2009 07:06:09 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0644CA9C9A9; Tue, 7 Jul 2009 09:06:09 -0500 (CDT) Message-ID: <4A535650.7020309@sandeen.net> Date: Tue, 07 Jul 2009 09:06:08 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Matthias Schniedermeyer CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090707093802.GA32125@citd.de> In-Reply-To: <20090707093802.GA32125@citd.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246975569 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2778 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Matthias Schniedermeyer wrote: > On 06.07.2009 13:25, Eric Sandeen wrote: >> I'm tiring of telling people to use the inode64 mount option >> when they are experiencing bad performance on large xfs >> filesystems... >> >> 32-bit userspace is still largely broken when it comes to still >> using 32-bit stat calls, but on 64-bit systems this should be >> safe. >> >> The only problem here is moving the disk onto a 32-bit system, or using >> 32-bit apps. But I think it's a small risk. >> >> What do we think about the following? > > What is with people running 64bit kernel but 32bit Userspace? > Good point. I wonder how many do that... hrm. -Eric From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 09:45:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67EjSBv149558 for ; Tue, 7 Jul 2009 09:45:28 -0500 X-ASG-Debug-ID: 1246977962-170c01440000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 765E31AFF99E; Tue, 7 Jul 2009 07:46:02 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id KFIE6lghN8R78ttI; Tue, 07 Jul 2009 07:46:02 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MOBvl-0000x3-IG; Tue, 07 Jul 2009 14:46:01 +0000 Date: Tue, 7 Jul 2009 10:46:01 -0400 From: Christoph Hellwig To: Olaf Weber Cc: Christoph Hellwig , Eric Sandeen , linux-mm@kvack.org, "MASON, CHRISTOPHER" , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707144601.GA705@infradead.org> References: <4A4D26C5.9070606@redhat.com> <20090707101946.GB1934@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246977963 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Jul 07, 2009 at 01:37:05PM +0200, Olaf Weber wrote: > > In theory it should. But given the amazing feedback of the VM people > > on this I'd rather make sure we do get the full HW bandwith on large > > arrays instead of sucking badly and not just wait forever. > > So how do you feel about making the fudge factor tunable? I don't > have a good sense myself of what the value should be, whether the > hard-coded 4 is good enough in general. A tunable means exposing an ABI, which I'd rather not do for a hack like this. If you don't like the number feel free to experiment around with it, SGI should have enough large systems that can be used to test this out. From chris.mason@oracle.com Tue Jul 7 10:17:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00, UNPARSEABLE_RELAY autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67FH0WR151716 for ; Tue, 7 Jul 2009 10:17:00 -0500 X-ASG-Debug-ID: 1246979855-218e02170000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from acsinet12.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BD3531AFFC77 for ; Tue, 7 Jul 2009 08:17:35 -0700 (PDT) Received: from acsinet12.oracle.com (acsinet12.oracle.com [141.146.126.234]) by cuda.sgi.com with ESMTP id KDlGwF6fR6GAEzDU for ; Tue, 07 Jul 2009 08:17:35 -0700 (PDT) Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by acsinet12.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n67FHE8D007003 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 Jul 2009 15:17:15 GMT Received: from abhmt008.oracle.com (abhmt008.oracle.com [141.146.116.17]) by acsinet15.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n67FJ9JJ010745; Tue, 7 Jul 2009 15:19:10 GMT Received: from localhost (/72.225.47.21) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 07 Jul 2009 08:17:22 -0700 Date: Tue, 7 Jul 2009 11:17:20 -0400 From: Chris Mason To: Eric Sandeen Cc: xfs mailing list , linux-mm@kvack.org, Christoph Hellwig , jens.axboe@oracle.com X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707151720.GA4159@think> References: <4A4D26C5.9070606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4D26C5.9070606@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Source-IP: abhmt008.oracle.com [141.146.116.17] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090207.4A536703.0064:SCFSTAT5015188,ss=1,fgs=0 X-Barracuda-Connect: acsinet12.oracle.com[141.146.126.234] X-Barracuda-Start-Time: 1246979855 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2782 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 02, 2009 at 04:29:41PM -0500, Eric Sandeen wrote: > Talking w/ someone who had a raid6 of 15 drives on an areca > controller, he wondered why he could only get 300MB/s or so > out of a streaming buffered write to xfs like so: > > dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 > 10737418240 bytes (11 GB) copied, 34.294 s, 313 MB/s I did some quick tests and found some unhappy things ;) On my 5 drive sata array (configured via LVM in a stripeset), dd with O_DIRECT to the block device can stream writes at a healthy 550MB/s. On 2.6.30, XFS does O_DIRECT at the exact same 550MB/s, and buffered writes at 370MB/s. Btrfs does a little better on buffered and a little worse on O_DIRECT. Ext4 splits the middle and does 400MB/s on both buffered and O_DIRECT. 2.6.31-rc2 gave similar results. One thing I noticed was that pdflush and friends aren't using the right flag in congestion_wait after it was updated to do congestion based on sync/async instead of read/write. I'm always happy when I get to blame bugs on Jens, but fixing the congestion flag usage actually made the runs slower (he still promises to send a patch for the congestion). A little while ago, Jan Kara sent seekwatcher changes that let it graph per-process info about IO submission, so I cooked up a graph of the IO done by pdflush, dd, and others during an XFS buffered streaming write. http://oss.oracle.com/~mason/seekwatcher/xfs-dd-2.6.30.png The dark blue dots are dd doing writes and the light green dots are pdflush. The graph shows that pdflush spends almost the entire run sitting around doing nothing, and sysrq-w shows all the pdflush threads waiting around in congestion_wait. Just to make sure the graphing wasn't hiding work done by pdflush, I filtered out all the dd IO: http://oss.oracle.com/~mason/seekwatcher/xfs-dd-2.6.30-filtered.png With all of this in mind, I think the reason why the nr_to_write change is helping is because dd is doing all the IO during balance_dirty_pages, and the higher nr_to_write number is making sure that more IO goes out at a time. Once dd starts doing IO in balance_dirty_pages, our queues get congested. From that moment on, the bdi_congested checks in the writeback path make pdflush sit down. I doubt the queue every really leaves congestion because we get over the dirty high water mark and dd is jumping in and sending IO down the pipe without waiting for congestion to clear. sysrq-w supports this. dd is always in get_request_wait and pdflush is always in congestion_wait. This bad interaction between pdflush and congestion was one of the motivations for Jens' new writeback work, so I was really hoping to git pull and post a fantastic new benchmark result. With Jens' code the graph ends up completely inverted, with roughly the same performance. Instead of dd doing all the work, the flusher thread is doing all the work (horray!) and dd is almost always in congestion_wait (boo). I think the cause is a little different, it seems that with Jens' code, dd finds the flusher thread has the inode locked, and so balance_dirty_pages doesn't find any work to do. It waits on congestion_wait(). If I replace the balance_dirty_pages() congestion_wait() with schedule_timeout(1) in Jens' writeback branch, xfs buffered writes go from 370MB/s to 520MB/s. There are still some big peaks and valleys, but it at least shows where we need to think harder about congestion flags, IO waiting and other issues. All of this is a long way of saying that until Jens' new code goes in, (with additional tuning) the nr_to_write change makes sense to me. I don't see a 2.6.31 suitable way to tune things without his work. -chris From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 11:40:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67Ge4Mh155908 for ; Tue, 7 Jul 2009 11:40:04 -0500 X-ASG-Debug-ID: 1246984839-194301520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CEAAB1B00567 for ; Tue, 7 Jul 2009 09:40:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id j90KOTNS6FkRfsHj for ; Tue, 07 Jul 2009 09:40:39 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MODig-0003Hx-Ue for xfs@oss.sgi.com; Tue, 07 Jul 2009 16:40:39 +0000 Date: Tue, 7 Jul 2009 12:40:38 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfstests: fix trivial typo in test 204 description Subject: [PATCH] xfstests: fix trivial typo in test 204 description Message-ID: <20090707164038.GA9609@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246984839 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Signed-off-by: Christoph Hellwig Index: xfstests-dev/204 =================================================================== --- xfstests-dev.orig/204 2009-07-04 18:07:47.000000000 +0000 +++ xfstests-dev/204 2009-07-04 18:07:51.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # FS QA Test No. 204 # -# Test out ENOSPC flushiung on small filesystems. +# Test out ENOSPC flushing on small filesystems. # #----------------------------------------------------------------------- # Copyright (c) 2009 Christoph Hellwig. From sandeen@sandeen.net Tue Jul 7 12:09:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67H9965156892 for ; Tue, 7 Jul 2009 12:09:10 -0500 X-ASG-Debug-ID: 1246986583-3c87013f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 043C81B00475 for ; Tue, 7 Jul 2009 10:09:43 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id adcWsAUuoZ4vFRvU for ; Tue, 07 Jul 2009 10:09:43 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 2DE03A9DADB; Tue, 7 Jul 2009 12:09:43 -0500 (CDT) Message-ID: <4A538157.8000704@sandeen.net> Date: Tue, 07 Jul 2009 12:09:43 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix trivial typo in test 204 description Subject: Re: [PATCH] xfstests: fix trivial typo in test 204 description References: <20090707164038.GA9609@infradead.org> In-Reply-To: <20090707164038.GA9609@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246986585 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2789 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig > > Index: xfstests-dev/204 > =================================================================== > --- xfstests-dev.orig/204 2009-07-04 18:07:47.000000000 +0000 > +++ xfstests-dev/204 2009-07-04 18:07:51.000000000 +0000 > @@ -1,7 +1,7 @@ > #! /bin/sh > # FS QA Test No. 204 > # > -# Test out ENOSPC flushiung on small filesystems. > +# Test out ENOSPC flushing on small filesystems. > # > #----------------------------------------------------------------------- > # Copyright (c) 2009 Christoph Hellwig. > Reviewed! ;) (that always bugged me!) -Eric From ms@citd.de Tue Jul 7 13:13:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67IDVEL159584 for ; Tue, 7 Jul 2009 13:13:31 -0500 X-ASG-Debug-ID: 1246990859-77cb020e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B1D819F8EDE for ; Tue, 7 Jul 2009 11:21:00 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id ANgMiRJqsVjM8XgQ for ; Tue, 07 Jul 2009 11:21:00 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id 6B5F12BCAC; Tue, 7 Jul 2009 20:14:05 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id fkpvhg+REVhq; Tue, 7 Jul 2009 20:13:56 +0200 (CEST) Received: from citd.de (p4FC4D1F7.dip.t-dialin.net [79.196.209.247]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 70B192BC77; Tue, 7 Jul 2009 20:13:55 +0200 (CEST) Date: Tue, 7 Jul 2009 20:13:52 +0200 From: Matthias Schniedermeyer To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems Message-ID: <20090707181352.GA3357@citd.de> References: <4A52419E.5020301@sandeen.net> <20090707093802.GA32125@citd.de> <4A535650.7020309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A535650.7020309@sandeen.net> User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1246990860 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 07.07.2009 09:06, Eric Sandeen wrote: > Matthias Schniedermeyer wrote: > > On 06.07.2009 13:25, Eric Sandeen wrote: > >> I'm tiring of telling people to use the inode64 mount option > >> when they are experiencing bad performance on large xfs > >> filesystems... > >> > >> 32-bit userspace is still largely broken when it comes to still > >> using 32-bit stat calls, but on 64-bit systems this should be > >> safe. > >> > >> The only problem here is moving the disk onto a 32-bit system, or using > >> 32-bit apps. But I think it's a small risk. > >> > >> What do we think about the following? > > > > What is with people running 64bit kernel but 32bit Userspace? > > Good point. I wonder how many do that... hrm. I'd guess pretty much anybody who what's to utilize the amount of RAM you can have nowadays, but doesn't have any single program that needs that amount of memory. Or, like in my case, just needs it for tmpfs/buffer cache. Throw in some "i don't want to reinstall" or "my Distribution isn't biarch" and you have someone who justs recompils their kernel and be done with it. It took me only a few minutes (rotating my hardware around that day took way longer) Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From sandeen@sandeen.net Tue Jul 7 13:16:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67IGmmO159806 for ; Tue, 7 Jul 2009 13:16:48 -0500 X-ASG-Debug-ID: 1246990642-55f501960000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 406C31B00C36 for ; Tue, 7 Jul 2009 11:17:22 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id AXZk44lE63mQjGQH for ; Tue, 07 Jul 2009 11:17:22 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 63E07A9DADB; Tue, 7 Jul 2009 13:17:22 -0500 (CDT) Message-ID: <4A539132.40907@sandeen.net> Date: Tue, 07 Jul 2009 13:17:22 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Matthias Schniedermeyer CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090707093802.GA32125@citd.de> <4A535650.7020309@sandeen.net> <20090707181352.GA3357@citd.de> In-Reply-To: <20090707181352.GA3357@citd.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1246990643 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Matthias Schniedermeyer wrote: > On 07.07.2009 09:06, Eric Sandeen wrote: >> Matthias Schniedermeyer wrote: >>> On 06.07.2009 13:25, Eric Sandeen wrote: >>>> I'm tiring of telling people to use the inode64 mount option >>>> when they are experiencing bad performance on large xfs >>>> filesystems... >>>> >>>> 32-bit userspace is still largely broken when it comes to still >>>> using 32-bit stat calls, but on 64-bit systems this should be >>>> safe. >>>> >>>> The only problem here is moving the disk onto a 32-bit system, or using >>>> 32-bit apps. But I think it's a small risk. >>>> >>>> What do we think about the following? >>> What is with people running 64bit kernel but 32bit Userspace? >> Good point. I wonder how many do that... hrm. > > I'd guess pretty much anybody who what's to utilize the amount of RAM > you can have nowadays, but doesn't have any single program that needs > that amount of memory. Or, like in my case, just needs it for > tmpfs/buffer cache. > > Throw in some "i don't want to reinstall" or "my Distribution isn't > biarch" and you have someone who justs recompils their kernel and be > done with it. It took me only a few minutes (rotating my hardware around > that day took way longer) > *nod* I waved hands about the mount path checking whether the "mount" command that started it was a 32-bit binary, and making a decision based on that... and Christoph pointed out that it'd be easy ... and then he gave me a dirty look for even thinking about it ;) -Eric From paul@mad-scientist.net Tue Jul 7 13:42:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_23 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67Igx5c161359 for ; Tue, 7 Jul 2009 13:42:59 -0500 X-ASG-Debug-ID: 1246992626-4789015c0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from netezza.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3FF8A129B2C5 for ; Tue, 7 Jul 2009 11:50:26 -0700 (PDT) Received: from netezza.com (mta.netezza.com [12.148.248.132]) by cuda.sgi.com with ESMTP id Ta3eQYM7pqDMCJ7W for ; Tue, 07 Jul 2009 11:50:26 -0700 (PDT) Received: from ([172.29.50.72]) by mta.netezza.com with SMTP id 4441227.13730409; Tue, 07 Jul 2009 14:42:16 -0400 Received: from [172.29.82.111] ([172.29.82.111]) by mail1.netezza.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 7 Jul 2009 14:42:16 -0400 X-ASG-Orig-Subj: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Subject: [2.6.27.25] assfail in xfs_attr_quiesce() during umount From: Paul Smith Reply-To: paul@mad-scientist.net To: Linux XFS , christoph hellwig , david chinner , linux-kernel@vger.kernel.org References: 20080307104918.GA20000@infradead.org In-Reply-To: 20080307104918.GA20000@infradead.org mp->m_active_trans)%20: = 0, file: Message-ID: X-OriginalArrivalTime: 07 Jul 2009 18:42:16.0380 (UTC) FILETIME=[A682AFC0:01C9FF32] Date: 7 Jul 2009 14:42:16 -0400 X-Barracuda-Connect: mta.netezza.com[12.148.248.132] X-Barracuda-Start-Time: 1246992628 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: BODY (http://marc\.info/\?) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > fs/xfs/xfs_vfsops.c, line: 708 > kernel BUG at fs/xfs/support/debug.c: 82! > infalid opcode: 0000 [#1] > Modules lined in: nvidia(P) xt_multiport iptable_filter ip_tables x_tables > Pid: 25313, comm: mount Tainted: P (2.6.24.3-686-initrd-crk1 #1) > EIP: 0060:[>f8a67a3f>] EFLAGS: 00010292 CPU: 0 > EAX: 00000061 EBX: f7faa400 ECX: ffffffff EDX: c034bda0 > ESI: dfc97000 EDI: f7faa400 EBP: db175e14 ESP: db175dcc > DS: 007b ES: 007b FS: 0000 GS: 033 SS: 0068 > Process mount (pid: 25313, ti=db174000 task=f7c32560 task.ti=db174000) > Stack: f8a6cc60 f8a6c6b0 f8a6a135 000002c4 f8a57e38 f7faa400 f8a57ee7 00000000 > Call Trace: > Code: d7 6b c7 83 c3 08 81 fb c8 02 a8 f8 75 ee 5b c3 83 ec 10 89 4c 24 0c 89 > EIP: [] assfail+0x1b/0x1f [xfs] SS:ESP 0068:db175dcc > WARNING: at kernel/exit.c:917 do_exit() > Pid: 25313, comm: mount Tainted: P D 2.6.24.3-686-initrd-crk1 #1 > /etc/rc6.d/S60umountroot: line17: 25313 Segmentation fault mount Content-Type: text/plain Organization: GNU's Not Unix! Date: Tue, 07 Jul 2009 14:42:15 -0400 Message-Id: <1246992135.9022.7291.camel@psmith-ubeta.netezza.com> Mime-Version: 1.0 X-Mailer: Evolution 2.24.3 Content-Transfer-Encoding: 7bit Hi all. I've seen this failure (only once so far, but even one kernel panic is not good!) in my 2.6.27.25 kernel. Output below. This was seen before, in earlier kernels; see (2.6.23): http://marc.info/?l=linux-kernel&m=120106649923499&w=2 And also (2.6.24): http://archives.free.net.ph/message/20080307.104918.4ea41ede.en.html According to the thread for the former, it was intended to be resolved by "proper per-vfsmount write count in 2.6.25 as part of the per-mount r/o patches" (C.Hellwig) Did those fixes indeed go into 2.6.25 (or 2.6.27 or below)? Was there something else that needed to be done for XFS to be able take advantage of that enhancement? And, is the patch posted by DavidC here: http://marc.info/?l=linux-kernel&m=120106649923499&w=2 still appropriate to work around this issue for 2.5.27.25? Thanks! =================================== umount: cannot remount /dev/md110 read-only Assertion failed: atomic_read(&mp->m_active_trans) == 0, file: /home/psmith/build/linux/fs/xfs/xfs_vfsops.c, line: 105 ------------[ cut here ]------------ Kernel BUG at ffffffffa02340ca [verbose debug info unavailable] invalid opcode: 0000 [1] PREEMPT SMP CPU 7 Modules linked in: rng_core dock scsi_mod libata ata_piix zlib_inflate bnx2 libphy tg3 ipmi_msghandler ipmi_si ipmi_devintf bonding sd_mod sg scsi_transport_sas mptbase mptscsih mptsas mptctl md_mod raid1 raid10 raid0 linear dm_mod dm_multipath dm_round_robin jbd ext3 dm_ioband xfs disklog xxds(P) Pid: 8546, comm: umount Tainted: P 2.6.27.25 #1 RIP: 0010:[] [] assfail+0x1a/0x20 [xfs] RSP: 0000:ffff8801a357fd38 EFLAGS: 00010292 RAX: 00000000000000a5 RBX: ffff880462188000 RCX: ffff88046bcebef0 RDX: ffffffff8054dfc8 RSI: 0000000000000096 RDI: 0000000000000001 RBP: ffff8801a357fd60 R08: ffff88046f84db38 R09: 001c90dd7a1c63bb R10: 0000000000000000 R11: 0000000000000001 R12: ffff8801a357fd68 R13: ffff8801a357fdcc R14: 0000000000000000 R15: 0000000000000040 FS: 0000000000000000(0000) GS:ffff88046f819280(0063) knlGS:00000000f7f9c6c0 CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b CR2: 000000004d8800e1 CR3: 0000000322097000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process umount (pid: 8546, threadinfo ffff8801a357e000, task ffff880390a7f1c0) Stack: ffff8801a357fd60 ffffffffa022178e ffff880462188000 ffffffffa023332c ffff88046cbb7000 0000000000000000 0000000000000000 0000000000000001 0000000000000000 7fffffffffffffff 0000000000000000 0000000000000000 Call Trace: [] ? xfs_attr_quiesce+0x4e/0x90 [xfs] [] ? xfs_fs_remount+0x10c/0x130 [xfs] [] ? do_remount_sb+0x131/0x1d0 [] ? do_remount+0x195/0x1b0 [] ? do_mount+0x1ba/0x230 [] ? __get_free_pages+0x1e/0x50 [] ? compat_sys_mount+0x11f/0x260 [] ? ia32_syscall_done+0x0/0x21 Code: c7 96 69 23 a0 e8 57 66 13 e0 48 83 c4 18 c3 66 90 89 d1 48 83 ec 08 48 89 f2 31 c0 48 89 fe 48 c7 c7 a0 9e 23 a0 e8 a5 6e 25 e0 <0f> 0b eb fe 66 90 41 55 41 54 49 89 f4 55 89 fd 53 48 c7 c7 a0 RIP [] assfail+0x1a/0x20 [xfs] RSP Kernel panic - not syncing: Fatal exception From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 14:06:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67J69ea162999 for ; Tue, 7 Jul 2009 14:06:11 -0500 X-ASG-Debug-ID: 1246994018-296b022a0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B96529F9735 for ; Tue, 7 Jul 2009 12:13:38 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Suh1dJIsFapL8cbM for ; Tue, 07 Jul 2009 12:13:38 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MOG03-00065z-Eb; Tue, 07 Jul 2009 19:06:43 +0000 Date: Tue, 7 Jul 2009 15:06:43 -0400 From: Christoph Hellwig To: Paul Smith Cc: Linux XFS , christoph hellwig , david chinner , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Subject: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Message-ID: <20090707190643.GA32467@infradead.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1246994018 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Jul 07, 2009 at 02:42:16PM -0400, Paul Smith wrote: > According to the thread for the former, it was intended to be resolved > by "proper per-vfsmount write count in 2.6.25 as part of the per-mount > r/o patches" (C.Hellwig) > > Did those fixes indeed go into 2.6.25 (or 2.6.27 or below)? Was there > something else that needed to be done for XFS to be able take advantage > of that enhancement? We haven't fixed the VFS issues yet. In some later kernel we just changed the assert to a warn on for now until the issue is sorted out. > And, is the patch posted by DavidC here: > http://marc.info/?l=linux-kernel&m=120106649923499&w=2 It looks somehwat dangerous for me. For now I would just comment out the assert or change it to a WARN_ON as in the newer kernels. I've recently started looking at that area in the VFS again and I'll hopefully make progress on a solution that sets MS_RDONLY at the correct time. From paul@mad-scientist.net Tue Jul 7 15:19:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67KJuec171954 for ; Tue, 7 Jul 2009 15:19:56 -0500 X-ASG-Debug-ID: 1246998030-390501b60000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from netezza.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 11B2934AF29 for ; Tue, 7 Jul 2009 13:20:30 -0700 (PDT) Received: from netezza.com (mta.netezza.com [12.148.248.132]) by cuda.sgi.com with ESMTP id qWdMH5VVSE2QeaW9 for ; Tue, 07 Jul 2009 13:20:30 -0700 (PDT) Received: from ([172.29.50.72]) by mta.netezza.com with SMTP id 4441227.13733111; Tue, 07 Jul 2009 16:18:51 -0400 Received: from [172.29.82.111] ([172.29.82.111]) by mail1.netezza.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 7 Jul 2009 16:18:51 -0400 X-ASG-Orig-Subj: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Subject: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount From: Paul Smith Reply-To: paul@mad-scientist.net To: Christoph Hellwig Cc: Linux XFS , christoph hellwig , david chinner , linux-kernel@vger.kernel.org In-Reply-To: <20090707190643.GA32467@infradead.org> References: <20090707190643.GA32467@infradead.org> Content-Type: text/plain Organization: GNU's Not Unix! Date: Tue, 07 Jul 2009 16:18:43 -0400 Message-Id: <1246997925.2984.1.camel@psmith-ubeta.netezza.com> Mime-Version: 1.0 X-Mailer: Evolution 2.24.3 Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 07 Jul 2009 20:18:51.0728 (UTC) FILETIME=[24CE9D00:01C9FF40] X-Barracuda-Connect: mta.netezza.com[12.148.248.132] X-Barracuda-Start-Time: 1246998031 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1182 1.0000 -1.2845 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.28 X-Barracuda-Spam-Status: No, SCORE=-1.28 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2800 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, 2009-07-07 at 15:06 -0400, Christoph Hellwig wrote: > It looks somehwat dangerous for me. For now I would just comment > out the assert or change it to a WARN_ON as in the newer kernels. Hah! :-). OK, that works for me. Thanks Christoph. From news@studiokappa.it Tue Jul 7 22:02:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.7 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6832d21198048 for ; Tue, 7 Jul 2009 22:02:39 -0500 X-ASG-Debug-ID: 1247022192-60c501a90000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtpsmart3.aruba.it (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 13FD934BD36 for ; Tue, 7 Jul 2009 20:03:12 -0700 (PDT) Received: from smtpsmart3.aruba.it (smtpweb101.aruba.it [62.149.158.101]) by cuda.sgi.com with SMTP id 03Bfj0RZe6laOIAC for ; Tue, 07 Jul 2009 20:03:12 -0700 (PDT) Received: (qmail 8732 invoked by uid 89); 8 Jul 2009 03:03:08 -0000 Received: by simscan 1.2.0 ppid: 8619, pid: 8621, t: 2.2601s scanners: clamav: 0.88.4/m:40/d:1945 spam: 3.1.4 Received: from unknown (HELO webxc08s08.ad.aruba.it) (62.149.141.100) by smtpsmart3.fe.aruba.it with SMTP; 8 Jul 2009 03:03:05 -0000 Received: (qmail 23688 invoked by uid 18002703); 8 Jul 2009 03:03:08 -0000 To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Promozione della salute ed empowerment della comunita' Subject: Promozione della salute ed empowerment della comunita' Date: Wed, 8 Jul 2009 05:03:08 +0200 From: news@studiokappa.it Message-ID: <1744c47eb79505c180988a12c8d0b27b@www.studiokappa.it> X-Priority: 3 X-Mailer: PHPMailer [version 1.73] X-Mailer: phplist v2.10.4 X-MessageID: 102 X-ListMember: linux-xfs@oss.sgi.com Precedence: bulk Errors-To: news@studiokappa.it MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_1744c47eb79505c180988a12c8d0b27b" X-Barracuda-Connect: smtpweb101.aruba.it[62.149.158.101] X-Barracuda-Start-Time: 1247022194 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5151 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.95 X-Barracuda-Spam-Status: No, SCORE=0.95 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA038b, HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC0_SA038b RAW: Custom Rule SA038b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --b1_1744c47eb79505c180988a12c8d0b27b Content-Type: text/plain; charset = "UTF-8" Content-Transfer-Encoding: 8bit Sperando di far cosa gradita, segnaliamo le iniziative del nostro partner MartiniAssociati: Promozione della salute ed empowerment della comunita'. Fiducia partecipazione e responsabilità. 23-27 Agosto 2009 Certosa di Pontignano (SI) Cordialmente. -- Per cancellarti da questa lista clicca su http://www.studiokappa.it/lists/?p=unsubscribe&uid=f95d79661173a656ad12f819a35cc5d5 Per aggiornare le tue preferenze clicca su http://www.studiokappa.it/lists/?p=preferences&uid=f95d79661173a656ad12f819a35cc5d5 -- Powered by PHPlist, www.phplist.com -- --b1_1744c47eb79505c180988a12c8d0b27b Content-Type: text/html; charset = "UTF-8" Content-Transfer-Encoding: 8bit prova template kappa



Sperando di far cosa gradita, segnaliamo le iniziative del nostro partner MartiniAssociati:



Clicca per scaricare la locandina
Cordialmente.

 

Studio Kappa

Segreteria

cell. +39 347.867.24.67

info@studiokappa.it

www.studiokappa.it

 

© Studio Kappa - Via Duca d'Aosta, 14 - 14100 Asti - Tel. 347.8672467
info@studiokappa.it - Part. IVA 01411460056 - Cod. Fiscale 92049850057



--
Per cancellarti da questa lista clicca su questo link
Per aggiornare le tue preferenze clicca su questo link
--b1_1744c47eb79505c180988a12c8d0b27b-- From jaswinder@kernel.org Wed Jul 8 11:04:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,RCVD_IN_BRBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n68G4bxa235609 for ; Wed, 8 Jul 2009 11:04:37 -0500 X-ASG-Debug-ID: 1247069111-4dca039f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from hera.kernel.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F20C134E7DA; Wed, 8 Jul 2009 09:05:11 -0700 (PDT) Received: from hera.kernel.org (hera.kernel.org [140.211.167.34]) by cuda.sgi.com with ESMTP id bvr0w6B9yLI6FLNA; Wed, 08 Jul 2009 09:05:11 -0700 (PDT) Received: from [192.168.1.220] (triband-del-59.180.9.101.bol.net.in [59.180.9.101] (may be forged)) (authenticated bits=0) by hera.kernel.org (8.14.2/8.13.8) with ESMTP id n68G550w026877 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 8 Jul 2009 16:05:09 GMT X-ASG-Orig-Subj: [PATCH 34/44] includecheck fix: fs/xfs, xfs_iops.c Subject: [PATCH 34/44] includecheck fix: fs/xfs, xfs_iops.c From: Jaswinder Singh Rajput To: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, Sam Ravnborg , LKML In-Reply-To: <1247063308.4382.12.camel@ht.satnam> References: <1247063308.4382.12.camel@ht.satnam> Content-Type: text/plain Date: Wed, 08 Jul 2009 21:16:11 +0530 Message-Id: <1247067971.4382.94.camel@ht.satnam> Mime-Version: 1.0 X-Mailer: Evolution 2.24.5 (2.24.5-2.fc10) Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV 0.93.3/9546/Wed Jul 8 11:39:15 2009 on hera.kernel.org X-Virus-Status: Clean X-Barracuda-Connect: hera.kernel.org[140.211.167.34] X-Barracuda-Start-Time: 1247069112 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2872 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- fix the following 'make includecheck' warning: fs/xfs/linux-2.6/xfs_iops.c: xfs_acl.h is included more than once. Signed-off-by: Jaswinder Singh Rajput --- fs/xfs/linux-2.6/xfs_iops.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb..793a146 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -43,7 +43,6 @@ #include "xfs_error.h" #include "xfs_itable.h" #include "xfs_rw.h" -#include "xfs_acl.h" #include "xfs_attr.h" #include "xfs_buf_item.h" #include "xfs_utils.h" -- 1.6.0.6 From sandeen@sandeen.net Wed Jul 8 11:38:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n68GcOJB237053 for ; Wed, 8 Jul 2009 11:38:24 -0500 X-ASG-Debug-ID: 1247071555-31c202af0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 85A5472B67E for ; Wed, 8 Jul 2009 09:45:55 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id V7mDLaUFwSwGD5y7 for ; Wed, 08 Jul 2009 09:45:55 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id C4E18A9BF32; Wed, 8 Jul 2009 11:38:53 -0500 (CDT) Message-ID: <4A54CB9D.9030005@sandeen.net> Date: Wed, 08 Jul 2009 11:38:53 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes References: <20090704182742.GA11083@infradead.org> <4A52C88C.2040600@sandeen.net> <20090707101737.GA1934@infradead.org> In-Reply-To: <20090707101737.GA1934@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247071558 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2875 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Mon, Jul 06, 2009 at 11:01:16PM -0500, Eric Sandeen wrote: >> Christoph Hellwig wrote: >>> Check that we correctly update the timestamps when writing to a file >>> through an mmap mapping. Currently fails for XFS due a VFS bug but >>> succeeds for many other filesystems. >>> >>> >>> Signed-off-by: Christoph Hellwig >> Test seems mostly ok, but aren't you missing 215.out in the patch? > > Yeah, looks like it. It's in my local tree, though :) ah, but it didn't get committed, yet ;) -Eric From BATV+89ee0b3c752fae473647+2145+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 8 12:14:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n68HEpv1238643 for ; Wed, 8 Jul 2009 12:14:55 -0500 X-ASG-Debug-ID: 1247073326-3f6e02420000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1A34834ECBB for ; Wed, 8 Jul 2009 10:15:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id FjTEkStx86qf2EsH for ; Wed, 08 Jul 2009 10:15:26 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MOaju-0006Xm-In; Wed, 08 Jul 2009 17:15:26 +0000 Date: Wed, 8 Jul 2009 13:15:26 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Message-ID: <20090708171526.GA15011@infradead.org> References: <20090704182742.GA11083@infradead.org> <4A52C88C.2040600@sandeen.net> <20090707101737.GA1934@infradead.org> <4A54CB9D.9030005@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A54CB9D.9030005@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247073327 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jul 08, 2009 at 11:38:53AM -0500, Eric Sandeen wrote: > ah, but it didn't get committed, yet ;) Sorry, it's in now. From kosaki.motohiro@jp.fujitsu.com Wed Jul 8 21:04:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69242bR000346 for ; Wed, 8 Jul 2009 21:04:02 -0500 X-ASG-Debug-ID: 1247105075-440200090000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail7.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EDD2F1B4C16D for ; Wed, 8 Jul 2009 19:04:36 -0700 (PDT) Received: from fgwmail7.fujitsu.co.jp (fgwmail7.fujitsu.co.jp [192.51.44.37]) by cuda.sgi.com with ESMTP id xqXE2Fpllrjb4AqV for ; Wed, 08 Jul 2009 19:04:36 -0700 (PDT) Received: from m4.gw.fujitsu.co.jp ([10.0.50.74]) by fgwmail7.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n6924ZRr014807 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Thu, 9 Jul 2009 11:04:35 +0900 Received: from smail (m4 [127.0.0.1]) by outgoing.m4.gw.fujitsu.co.jp (Postfix) with ESMTP id B068845DE7D for ; Thu, 9 Jul 2009 11:04:34 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4.gw.fujitsu.co.jp [10.0.50.94]) by m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 8124B45DE60 for ; Thu, 9 Jul 2009 11:04:34 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 3C613E08001 for ; Thu, 9 Jul 2009 11:04:34 +0900 (JST) Received: from ml14.s.css.fujitsu.com (ml14.s.css.fujitsu.com [10.249.87.104]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id D5917E08003 for ; Thu, 9 Jul 2009 11:04:33 +0900 (JST) Received: from ml14.css.fujitsu.com (ml14 [127.0.0.1]) by ml14.s.css.fujitsu.com (Postfix) with ESMTP id 667769F61EF; Thu, 9 Jul 2009 11:04:33 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by ml14.s.css.fujitsu.com (Postfix) with ESMTP id A96C39F61EE; Thu, 9 Jul 2009 11:04:32 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Thu, 09 Jul 2009 11:04:31 +0900 (JST) From: KOSAKI Motohiro To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber , "MASON, CHRISTOPHER" In-Reply-To: <20090707104440.GB21747@infradead.org> References: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> <20090707104440.GB21747@infradead.org> Message-Id: <20090709110342.2386.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Thu, 9 Jul 2009 11:04:32 +0900 (JST) X-Barracuda-Connect: fgwmail7.fujitsu.co.jp[192.51.44.37] X-Barracuda-Start-Time: 1247105077 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0484 1.0000 -1.7101 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.71 X-Barracuda-Spam-Status: No, SCORE=-1.71 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2910 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > > At least, I agree with Olaf. if you got someone's NAK in past thread, > > Could you please tell me its url? > > The previous thread was simply dead-ended and nothing happened. > Can you remember this thread subject? sorry, I haven't remember it. From chris.mason@oracle.com Thu Jul 9 08:01:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00, UNPARSEABLE_RELAY autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69D1IsO028956 for ; Thu, 9 Jul 2009 08:01:19 -0500 X-ASG-Debug-ID: 1247144936-50b103160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from acsinet12.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DD4E2149B832 for ; Thu, 9 Jul 2009 06:08:56 -0700 (PDT) Received: from acsinet12.oracle.com (acsinet12.oracle.com [141.146.126.234]) by cuda.sgi.com with ESMTP id HEbXQtV5VAosvxIk for ; Thu, 09 Jul 2009 06:08:56 -0700 (PDT) Received: from rgminet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by acsinet12.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n69D1RQA008310 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 Jul 2009 13:01:29 GMT Received: from abhmt003.oracle.com (abhmt003.oracle.com [141.146.116.12]) by rgminet15.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n69D1i31015254; Thu, 9 Jul 2009 13:01:45 GMT Received: from localhost (/72.225.47.21) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 09 Jul 2009 06:01:35 -0700 Date: Thu, 9 Jul 2009 09:01:34 -0400 From: Chris Mason To: KOSAKI Motohiro Cc: Christoph Hellwig , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090709130134.GH18008@think> References: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> <20090707104440.GB21747@infradead.org> <20090709110342.2386.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090709110342.2386.A69D9226@jp.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Source-IP: abhmt003.oracle.com [141.146.116.12] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A010206.4A55EA31.00B5:SCFSTAT5015188,ss=1,fgs=0 X-Barracuda-Connect: acsinet12.oracle.com[141.146.126.234] X-Barracuda-Start-Time: 1247144937 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0200 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2954 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 09, 2009 at 11:04:32AM +0900, KOSAKI Motohiro wrote: > > On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > > > At least, I agree with Olaf. if you got someone's NAK in past thread, > > > Could you please tell me its url? > > > > The previous thread was simply dead-ended and nothing happened. > > > > Can you remember this thread subject? sorry, I haven't remember it. This is the original thread, it did lead to a few different patches going in, but the nr_to_write change wasn't one of them. http://kerneltrap.org/mailarchive/linux-kernel/2008/10/1/3472704/thread -chris From bloodyscarion@gmail.com Thu Jul 9 09:12:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69ECls5032219 for ; Thu, 9 Jul 2009 09:12:47 -0500 X-ASG-Debug-ID: 1247148803-586202010000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0E57A352592 for ; Thu, 9 Jul 2009 07:13:23 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id qXHML4VkG5isvI6O for ; Thu, 09 Jul 2009 07:13:23 -0700 (PDT) Received: by bwz10 with SMTP id 10so174823bwz.20 for ; Thu, 09 Jul 2009 07:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:content-type :content-transfer-encoding; bh=IxJWGWpqeJ0YDedFt1Q8WkZOWzmB204oojOGQ+LFokE=; b=Vui2J7a8SOBzmo84ZP+6DiiBHWubA+c7DR1SnfNRim1u3N8ZHgba9UChNJFSoK7IDO eah5zRVrrNHQIQJozJi7xW3bnk/iYzmY0+DlmvRKMBAkZF1ECDxR4nfuXJ+T+UQ8sD5P wp9D9sBGeZoNnX9YbAhSWO4eOnE/2mHdTDA5k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; b=YFGEOXxmPo8NFMlSQgcrOSsjR3zpGxD+bXWNBy/m91cmWW7J0czXn2/32FlxzbSIjx NNzhhWKjORSOF1HwAPWi5BFsCK+x+w6rh0nzpbhUwjzVYqudzV2i1RzxYWTmOcLa4PMO E1U1b6lwlUrn9qle+JRLyib1lLJJ/cqnezRIg= Received: by 10.204.67.141 with SMTP id r13mr751628bki.166.1247148802190; Thu, 09 Jul 2009 07:13:22 -0700 (PDT) Received: from ?10.3.1.176? (proxy.platige.com [193.192.62.134]) by mx.google.com with ESMTPS id g28sm18230185fkg.15.2009.07.09.07.13.21 (version=SSLv3 cipher=RC4-MD5); Thu, 09 Jul 2009 07:13:21 -0700 (PDT) Message-ID: <4A55FAF7.5040908@gmail.com> Date: Thu, 09 Jul 2009 16:13:11 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_repair stops on "traversing filesystem..." Subject: xfs_repair stops on "traversing filesystem..." Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1247148804 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2956 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello! I have a little problem with XFS filesystem that I have on one of my machines. I try to make xfs_repair that was not making any problems before, but xfs_repair stops on: Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... CPU usage grows up to 100%. I left it in the night hoping it will finish job till morning, but the situation hasn't changed... System is Debian Lenny with current updates and custom 2.6.30.1 kernel xfsprogs-2.9.8. Filesysystem is placed on LVM2 Logical Volume. I upgraded xfsprogs to 3.0.2 version and the problem still persists. Then I reverted to 2.9.8 package from Debian Lenny. Switching back to debian default 2.6.26 kernel doesn't help too. I can mount this filesystem and operate on it. Data on this system is not so crucial, because it's backup/testing machine, but it would be great to keep this data, because synchronizing 14TB of data will take some time. Output from xfs_info: # xfs_info /mnt/storage/ meta-data=/dev/mapper/p02bvg-p02blv isize=256 agcount=32, agsize=268435455 blks = sectsz=512 attr=2 data = bsize=4096 blocks=8410889216, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=2 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents=0 Any ideas how to make xfs_repair working again? Best regards, Tomasz Kruszona From olaf@sgi.com Thu Jul 9 09:52:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69EqHCI035045; Thu, 9 Jul 2009 09:52:18 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n69EqnBQ300103; Thu, 9 Jul 2009 16:52:49 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n69EqnWF299759; Thu, 9 Jul 2009 16:52:49 +0200 (MEST) To: Jaswinder Singh Rajput Cc: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, Sam Ravnborg , LKML Subject: Re: [PATCH 34/44] includecheck fix: fs/xfs, xfs_iops.c References: <1247063308.4382.12.camel@ht.satnam> <1247067971.4382.94.camel@ht.satnam> From: Olaf Weber Date: Thu, 09 Jul 2009 16:52:48 +0200 In-Reply-To: <1247067971.4382.94.camel@ht.satnam> (Jaswinder Singh Rajput's message of "Wed, 08 Jul 2009 21:16:11 +0530") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Jaswinder Singh Rajput writes: > fix the following 'make includecheck' warning: > fs/xfs/linux-2.6/xfs_iops.c: xfs_acl.h is included more than once. > Signed-off-by: Jaswinder Singh Rajput Acked-By: Olaf Weber > --- > fs/xfs/linux-2.6/xfs_iops.c | 1 - > 1 files changed, 0 insertions(+), 1 deletions(-) > diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c > index 58973bb..793a146 100644 > --- a/fs/xfs/linux-2.6/xfs_iops.c > +++ b/fs/xfs/linux-2.6/xfs_iops.c > @@ -43,7 +43,6 @@ > #include "xfs_error.h" > #include "xfs_itable.h" > #include "xfs_rw.h" > -#include "xfs_acl.h" > #include "xfs_attr.h" > #include "xfs_buf_item.h" > #include "xfs_utils.h" > -- > 1.6.0.6 -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Thu Jul 9 09:53:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69ErgCH035115 for ; Thu, 9 Jul 2009 09:53:43 -0500 X-ASG-Debug-ID: 1247151681-344900d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DE906A14B33 for ; Thu, 9 Jul 2009 08:01:21 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 3pravGHEnPOENKEa for ; Thu, 09 Jul 2009 08:01:21 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 3C5CDA9C9A9; Thu, 9 Jul 2009 09:54:16 -0500 (CDT) Message-ID: <4A560497.7@sandeen.net> Date: Thu, 09 Jul 2009 09:54:15 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> In-Reply-To: <4A55FAF7.5040908@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247151681 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0208 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2959 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tomek Kruszona wrote: > Hello! > > I have a little problem with XFS filesystem that I have on one of my > machines. I try to make xfs_repair that was not making any problems > before, but xfs_repair stops on: > > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > > CPU usage grows up to 100%. I left it in the night hoping it will finish > job till morning, but the situation hasn't changed... ... > Any ideas how to make xfs_repair working again? You might try running with -P, though I doubt that's the issue. If that doesn't help, you could provide an xfs_metadump image (in public or to me in private) and I'll take a look to see what's going on. -Eric From bloodyscarion@gmail.com Thu Jul 9 10:02:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69F2a3n035469 for ; Thu, 9 Jul 2009 10:02:36 -0500 X-ASG-Debug-ID: 1247151791-3509013f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C32B3133A73D for ; Thu, 9 Jul 2009 08:03:12 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by cuda.sgi.com with ESMTP id GU3weSDmjcBST87g for ; Thu, 09 Jul 2009 08:03:12 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id l27so1320168fgb.8 for ; Thu, 09 Jul 2009 08:03:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=VJvp4Q4pCzi3tdY3WNi+Y66JUQLkaempfsshTjkcLzw=; b=A2dcUECAsVWB9oTgTCcOwlEbnInb5rfRyaOrao9bXwBJEAc6JXVhpLkxSbTwGZT32B /C6TRK1XkgNy9N8uw3aqlu8omRIvve1mXrw3Tp6lLpPD1LP69D2RK30/Fag2Nonnwxqn RSLzp9vPkTiUyrz5n4LY1YIBwkIAW7EDTRlyE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=qP0Kh17iZfofWY46gkhK4pBACk6ppdGiFL+OSSfuM4kjZ1S6VDNwudqhys7QPdliI1 BakFjostf3KRPQD/bBD3f3phoA/Z3/3hjdyMO47SlyYmdyN5vpU9wm4y8tShS2QDRzIk 9XEKuHFvrrE22KRSt9JL6wrxey+kllKbYIv30= Received: by 10.86.76.4 with SMTP id y4mr254199fga.22.1247151791507; Thu, 09 Jul 2009 08:03:11 -0700 (PDT) Received: from ?10.3.1.176? (proxy.platige.com [193.192.62.134]) by mx.google.com with ESMTPS id 3sm80093fge.3.2009.07.09.08.03.10 (version=SSLv3 cipher=RC4-MD5); Thu, 09 Jul 2009 08:03:10 -0700 (PDT) Message-ID: <4A5606A7.7070109@gmail.com> Date: Thu, 09 Jul 2009 17:03:03 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A560497.7@sandeen.net> In-Reply-To: <4A560497.7@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.154] X-Barracuda-Start-Time: 1247151792 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4025 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2960 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > You might try running with -P, though I doubt that's the issue. > > If that doesn't help, you could provide an xfs_metadump image (in public > or to me in private) and I'll take a look to see what's going on. Thank you! I will just left xfs_repair -P to do the job and let you know if it helps. Otherwise, I'll send you metadump image in private. Best regards, Tomasz Kruszona From Frederic.Patrault@exane.com Thu Jul 9 10:32:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69FW7ZW036827 for ; Thu, 9 Jul 2009 10:32:08 -0500 X-ASG-Debug-ID: 1247153983-42e801340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail6.exane.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5B1D2A1571D for ; Thu, 9 Jul 2009 08:39:44 -0700 (PDT) Received: from mail6.exane.com (mail6.exane.com [195.13.36.55]) by cuda.sgi.com with ESMTP id N0PCuKnrA6HReAmM for ; Thu, 09 Jul 2009 08:39:44 -0700 (PDT) Received: from mail6.exane.com (mail6.exane.com [127.0.0.1]) by localhost (MailServerExane-9) with SMTP id 6ECECF8188 for ; Thu, 9 Jul 2009 17:32:38 +0200 (CEST) Received: from spl-nothu-002.insitu.ad.exane.com (spl-nothu-002 [10.176.12.1]) by mail6.exane.com (MailServerExane-9) with ESMTP id 60414F8184 for ; Thu, 9 Jul 2009 17:32:38 +0200 (CEST) X-ASG-Orig-Subj: Growfs 10Tb extension corrupted FS Subject: Growfs 10Tb extension corrupted FS X-KeepSent: D6EDBDC1:E3DD344B-C12575EE:0054FDE0; type=4; name=$KeepSent To: xfs@oss.sgi.com X-Mailer: Lotus Notes Release 8.5 December 05, 2008 Message-ID: <17646_1247153558_4A560D96_17646_249626_1_OFD6EDBDC1.E3DD344B-ONC12575EE.0054FDE0-C12575EE.00556215@exane.com> From: Frederic Patrault Date: Thu, 9 Jul 2009 17:32:27 +0200 X-MIMETrack: Serialize by Router on spl-nothu-002/Exane(Release 8.5|December 05, 2008) at 07/09/2009 05:32:38 PM MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII X-Barracuda-Connect: mail6.exane.com[195.13.36.55] X-Barracuda-Start-Time: 1247153985 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0206 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2963 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello, i ran into the bug http://oss.sgi.com/archives/xfs/2007-01/msg00053.html on Centos 5.2 x64 TAKE 959978 - growing an XFS filesystem by more than 2TB is broken XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1588 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_alloc.c. Caller 0xffffffff8859056b Call Trace: [] :xfs:xfs_free_ag_extent+0x19f/0x67f [] :xfs:xfs_free_extent+0xa9/0xc9 [] :xfs:xfs_growfs_data+0x7b3/0x999 [] :xfs:xfs_ioctl+0x11ec/0x137c [] n_tty_receive_buf+0xd45/0xdc5 [] n_tty_receive_buf+0xd45/0xdc5 [] pty_write+0x32/0x3a [] __wake_up+0x38/0x4f [] default_wake_function+0x0/0xe [] :xfs:xfs_file_ioctl+0x2f/0x57 [] do_ioctl+0x21/0x6b [] vfs_ioctl+0x248/0x261 [] sys_ioctl+0x59/0x78 [] tracesys+0xd5/0xe0 Filesystem "dm-10": XFS internal error xfs_trans_cancel at line 1138 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. Caller 0xffffffff885b30a4 Call Trace: [] :xfs:xfs_trans_cancel+0x5b/0xfe [] :xfs:xfs_growfs_data+0x949/0x999 [] :xfs:xfs_ioctl+0x11ec/0x137c [] n_tty_receive_buf+0xd45/0xdc5 [] n_tty_receive_buf+0xd45/0xdc5 [] pty_write+0x32/0x3a [] __wake_up+0x38/0x4f [] default_wake_function+0x0/0xe [] :xfs:xfs_file_ioctl+0x2f/0x57 [] do_ioctl+0x21/0x6b [] vfs_ioctl+0x248/0x261 [] sys_ioctl+0x59/0x78 [] tracesys+0xd5/0xe0 xfs_force_shutdown(dm-10,0x8) called from line 1139 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. Return address = 0xffffffff885ca941 Filesystem "dm-10": Corruption of in-memory data detected. Shutting down filesystem: dm-10 Please umount the filesystem, and rectify the problem(s) xfs_force_shutdown(dm-10,0x1) called from line 424 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. Return address = 0xffffffff885d47f1 xfs_force_shutdown(dm-10,0x1) called from line 424 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. Return address = 0xffffffff885d47f1 Filesystem "dm-10": Disabling barriers, not supported by the underlying device attempt to access beyond end of device dm-10: rw=0, want=71676493824, limit=49392123904 I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff ("xfs_read_buf") error 5 buf count 512 XFS: size check 2 failed Filesystem "dm-10": Disabling barriers, not supported by the underlying device attempt to access beyond end of device dm-10: rw=0, want=71676493824, limit=49392123904 I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff ("xfs_read_buf") error 5 buf count 512 XFS: size check 2 failed Filesystem "dm-10": Disabling barriers, not supported by the underlying device attempt to access beyond end of device dm-10: rw=0, want=71676493824, limit=49392123904 I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff ("xfs_read_buf") error 5 buf count 512 XFS: size check 2 failed i'm trying to sort out to get the situation back before the extension but i did not manage please advise on how i could : Original FS was ~13Tb i added ~10Tb then XFS failed to growfs because of the bug Now i xfs_repair it is a success but when i mount the FS i have a ~35Tb FS umount the trying to mount it give an error same problem, 1st magic number can't be found i don't know how to fix it ;-( xfs_db -r /dev/VG_SAN_DATA01/VDL_DATA01 xfs_db> sb 0 xfs_db> p magicnum = 0x58465342 blocksize = 4096 dblocks = 8959561728 rblocks = 0 rextents = 0 uuid = cc4a679f-5153-4b6b-8620-8a12546845ef logstart = 2147483652 rootino = 128 rbmino = 129 rsumino = 130 rextsize = 1 agblocks = 75112352 agcount = 120 rbmblocks = 0 logblocks = 32768 versionnum = 0x3084 sectsize = 512 inodesize = 256 inopblock = 16 fname = "\000\000\000\000\000\000\000\000\000\000\000\000" blocklog = 12 sectlog = 9 inodelog = 8 inopblog = 4 agblklog = 27 rextslog = 0 inprogress = 0 imax_pct = 25 icount = 768 ifree = 49 fdblocks = 5599584628 frextents = 0 uquotino = 0 gquotino = 0 qflags = 0 flags = 0 shared_vn = 0 inoalignmt = 2 unit = 0 width = 0 dirblklog = 0 logsectlog = 0 logsectsize = 0 logsunit = 0 features2 = 0 #cat /proc/partitions 253 10 24696061952 dm-10 kind regards Frederic Patrault ___________________________________ The integrity of this message cannot be guaranteed on the internet .Therefore EXANE cannot be considered responsible for the contents. If you are not the intended recipient of this message ,please delete it and notify the sender. This message is provided for information purposes only and should not be construed as a solicitation or offer to buy or sell any securities or related financial instruments Although it may contain some elements from publications produced by Exane's research department ,this message is not research. Please consult our web site for important disclaimers and disclosures concerning Exane's research (http://www.exane.com) ___________________________________ From cattelan@thebarn.com Thu Jul 9 17:15:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69MFOfx056124 for ; Thu, 9 Jul 2009 17:15:25 -0500 X-ASG-Debug-ID: 1247177759-14ca01890000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from slurp.thebarn.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A403354743 for ; Thu, 9 Jul 2009 15:16:00 -0700 (PDT) Received: from slurp.thebarn.com (mail.thebarn.com [208.42.117.202]) by cuda.sgi.com with ESMTP id Wz00Gv1eh5UEWX47 for ; Thu, 09 Jul 2009 15:16:00 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.x.thebarn.com [10.0.0.11]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n69MFa85099917; Thu, 9 Jul 2009 17:15:52 -0500 (CDT) (envelope-from cattelan@xfs.org) Message-ID: <4A566C08.6070302@xfs.org> Date: Thu, 09 Jul 2009 17:15:36 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Frederic Patrault CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Growfs 10Tb extension corrupted FS Subject: Re: Growfs 10Tb extension corrupted FS References: <17646_1247153558_4A560D96_17646_249626_1_OFD6EDBDC1.E3DD344B-ONC12575EE.0054FDE0-C12575EE.00556215@exane.com> In-Reply-To: <17646_1247153558_4A560D96_17646_249626_1_OFD6EDBDC1.E3DD344B-ONC12575EE.0054FDE0-C12575EE.00556215@exane.com> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.thebarn.com[208.42.117.202] X-Barracuda-Start-Time: 1247177761 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1812 1.0000 -0.9282 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.93 X-Barracuda-Spam-Status: No, SCORE=-0.93 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2982 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Frederic Patrault wrote: > Hello, > > > > i ran into the bug http://oss.sgi.com/archives/xfs/2007-01/msg00053.html on > Centos 5.2 x64 > TAKE 959978 - growing an XFS filesystem by more than 2TB is broken > > Heh ya our old friend. I do have experience with trying to back out from this issue, but the amount of data depends on how much the fs was mucked with. Basically what you will need to do is with xfs_db reset the the FS size and ag count back to what is was before the grow cmd messed it up. The last ag will still potentially be wrong since the grow cmd try to convert it from a partial ag a full ag and those numbers are probably wrong as well. If repair was run that is a different story and may or may not have made big mess of things. > > XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1588 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_alloc.c. > Caller 0xffffffff8859056b > > Call Trace: > [] :xfs:xfs_free_ag_extent+0x19f/0x67f > [] :xfs:xfs_free_extent+0xa9/0xc9 > [] :xfs:xfs_growfs_data+0x7b3/0x999 > [] :xfs:xfs_ioctl+0x11ec/0x137c > [] n_tty_receive_buf+0xd45/0xdc5 > [] n_tty_receive_buf+0xd45/0xdc5 > [] pty_write+0x32/0x3a > [] __wake_up+0x38/0x4f > [] default_wake_function+0x0/0xe > [] :xfs:xfs_file_ioctl+0x2f/0x57 > [] do_ioctl+0x21/0x6b > [] vfs_ioctl+0x248/0x261 > [] sys_ioctl+0x59/0x78 > [] tracesys+0xd5/0xe0 > > Filesystem "dm-10": XFS internal error xfs_trans_cancel at line 1138 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. > Caller 0xffffffff885b30a4 > > Call Trace: > [] :xfs:xfs_trans_cancel+0x5b/0xfe > [] :xfs:xfs_growfs_data+0x949/0x999 > [] :xfs:xfs_ioctl+0x11ec/0x137c > [] n_tty_receive_buf+0xd45/0xdc5 > [] n_tty_receive_buf+0xd45/0xdc5 > [] pty_write+0x32/0x3a > [] __wake_up+0x38/0x4f > [] default_wake_function+0x0/0xe > [] :xfs:xfs_file_ioctl+0x2f/0x57 > [] do_ioctl+0x21/0x6b > [] vfs_ioctl+0x248/0x261 > [] sys_ioctl+0x59/0x78 > [] tracesys+0xd5/0xe0 > > xfs_force_shutdown(dm-10,0x8) called from line 1139 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. > Return address = 0xffffffff885ca941 > Filesystem "dm-10": Corruption of in-memory data detected. Shutting down > filesystem: dm-10 > Please umount the filesystem, and rectify the problem(s) > xfs_force_shutdown(dm-10,0x1) called from line 424 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. > Return address = 0xffffffff885d47f1 > xfs_force_shutdown(dm-10,0x1) called from line 424 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. > Return address = 0xffffffff885d47f1 > Filesystem "dm-10": Disabling barriers, not supported by the underlying > device > attempt to access beyond end of device > dm-10: rw=0, want=71676493824, limit=49392123904 > I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff > ("xfs_read_buf") error 5 buf count 512 > XFS: size check 2 failed > Filesystem "dm-10": Disabling barriers, not supported by the underlying > device > attempt to access beyond end of device > dm-10: rw=0, want=71676493824, limit=49392123904 > I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff > ("xfs_read_buf") error 5 buf count 512 > XFS: size check 2 failed > Filesystem "dm-10": Disabling barriers, not supported by the underlying > device > attempt to access beyond end of device > dm-10: rw=0, want=71676493824, limit=49392123904 > I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff > ("xfs_read_buf") error 5 buf count 512 > XFS: size check 2 failed > > > > > i'm trying to sort out to get the situation back before the extension but i > did not manage > please advise on how i could : > > Original FS was ~13Tb i added ~10Tb then XFS failed to growfs because of > the bug > Now i xfs_repair it is a success but when i mount the FS i have a ~35Tb FS > > umount the trying to mount it give an error same problem, 1st magic number > can't be found > > > i don't know how to fix it ;-( > > xfs_db -r /dev/VG_SAN_DATA01/VDL_DATA01 > xfs_db> sb 0 > xfs_db> p > magicnum = 0x58465342 > blocksize = 4096 > dblocks = 8959561728 > rblocks = 0 > rextents = 0 > uuid = cc4a679f-5153-4b6b-8620-8a12546845ef > logstart = 2147483652 > rootino = 128 > rbmino = 129 > rsumino = 130 > rextsize = 1 > agblocks = 75112352 > agcount = 120 > rbmblocks = 0 > logblocks = 32768 > versionnum = 0x3084 > sectsize = 512 > inodesize = 256 > inopblock = 16 > fname = "\000\000\000\000\000\000\000\000\000\000\000\000" > blocklog = 12 > sectlog = 9 > inodelog = 8 > inopblog = 4 > agblklog = 27 > rextslog = 0 > inprogress = 0 > imax_pct = 25 > icount = 768 > ifree = 49 > fdblocks = 5599584628 > frextents = 0 > uquotino = 0 > gquotino = 0 > qflags = 0 > flags = 0 > shared_vn = 0 > inoalignmt = 2 > unit = 0 > width = 0 > dirblklog = 0 > logsectlog = 0 > logsectsize = 0 > logsunit = 0 > features2 = 0 > > #cat /proc/partitions > 253 10 24696061952 dm-10 > > kind regards > Frederic Patrault > > > > ___________________________________ > > The integrity of this message cannot be guaranteed on the internet .Therefore EXANE cannot be considered responsible for the contents. > If you are not the intended recipient of this message ,please delete it and notify the sender. > > This message is provided for information purposes only and should not be construed as a solicitation or offer to buy or sell any securities or related financial instruments > Although it may contain some elements from publications produced by Exane's research department ,this message is not research. > Please consult our web site for important disclaimers and disclosures concerning Exane's research (http://www.exane.com) > ___________________________________ > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > > From christopher.walker@gmail.com Thu Jul 9 18:23:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69NNhQ4059397 for ; Thu, 9 Jul 2009 18:23:44 -0500 X-ASG-Debug-ID: 1247182284-084201230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from an-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9D338A24B57 for ; Thu, 9 Jul 2009 16:31:25 -0700 (PDT) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.241]) by cuda.sgi.com with ESMTP id k2NMzE3lXituxodH for ; Thu, 09 Jul 2009 16:31:25 -0700 (PDT) Received: by an-out-0708.google.com with SMTP id b2so301276ana.32 for ; Thu, 09 Jul 2009 16:24:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=D2xplzGJSh4nkkdIcqJCCxyfyCCtL2bq1VEbEzva4KE=; b=SoBEvY6Gpu4ci+m25y3JBcSUiMp7BkLiIEsiJPCwkaVSsd2zO0TL+bubPZlhp5p3Zz g81FXv09T9fIzrmNEo6Lwzw5gDy8pm78LjRzA5ao+RIjZYRJ37dQj98EW4CDj/7kAIjI 5C2c8XGMZOSbVKp0beOHKD27xswy9Kr1EfhKg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=Ht6xfyAqHtn/3u4FD9qg2VTVuj2chOKJoWhc1UKOFDQHgWgsNpYdcmyPQA+WFkacPq bF0txJblR2mrasZ9jNT/6lKITFZKYmAs2hJHCxSdOwytjSdAdMlNwPmLVWYsDz9IjuFi IDe8g3jPrl5ql1QML7cdkFot9Hf59o0jkupkA= MIME-Version: 1.0 Received: by 10.100.242.11 with SMTP id p11mr1856702anh.113.1247181858850; Thu, 09 Jul 2009 16:24:18 -0700 (PDT) Date: Thu, 9 Jul 2009 19:24:18 -0400 Message-ID: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> X-ASG-Orig-Subj: kernel BUG with xfs_quota Subject: kernel BUG with xfs_quota From: Chris Walker To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: an-out-0708.google.com[209.85.132.241] X-Barracuda-Start-Time: 1247182285 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2987 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello, I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g bsoft=2048g bhard=2148g hepl' /seltzer_lab), which triggered a kernel BUG: Assertion failed: dst->d_btimer != 0, file: fs/xfs/quota/xfs_qm_syscalls.c, line: 927 ------------[ cut here ]------------ kernel BUG at fs/xfs/support/debug.c:108! invalid opcode: 0000 [#1] SMP last sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map CPU 3 Modules linked in: hidp rfcomm l2cap bluetooth bonding ipv6 xfs nfsd lockd nfs_acl auth_rpcgss exportfs sunrpc dm_mirror dm_region_hash dm_log dm_multipath dm_mod sbs sbshc battery acpi_memhotplug ac parport_pc lp parport sr_mod cdrom sg joydev usb_storage e1000 button serio_raw rtc_cmos rtc_core rtc_lib amd_rng i2c_amd756 k8temp pata_acpi i2c_amd8111 hwmon shpchp i2c_core pcspkr raid456 async_xor async_memcpy async_tx xor sata_mv libata sd_mod scsi_mod raid1 ext3 jbd ehci_hcd ohci_hcd uhci_hcd Pid: 7826, comm: xfs_quota Not tainted 2.6.29.4 #1 Sun Fire X4500 RIP: 0010:[] [] assfail+0x1a/0x1e [xfs] RSP: 0018:ffff8803ed811e48 EFLAGS: 00010292 RAX: 0000000000000059 RBX: ffff8803ed811ec8 RCX: 000000000001b4e7 RDX: ffff8802869c8000 RSI: 0000000000000046 RDI: ffffffff80893f74 RBP: ffff8803f4cbcbd8 R08: 0000000000000000 R09: ffff880028083080 R10: ffff880028083080 R11: 0000010000000296 R12: ffff8803fdc96000 R13: 0000000000000000 R14: ffff8803fdc93c00 R15: 0000000000004e39 FS: 00007fb60e5596f0(0000) GS:ffff8803fe8220c0(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 00000000008c58d0 CR3: 00000001f98a8000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process xfs_quota (pid: 7826, threadinfo ffff8803ed810000, task ffff8803fd23a7c0) Stack: ffff8803ed811ec8 ffffffffa02c2fde 0000000000000000 ffff8803fdc96000 ffff8803ed811ec8 ffffffffa02c30bf 0000000000005803 ffff8803f4cbcb60 0000000000000000 ffff8803ed811ec8 0000000000005803 ffffffffa0329d25 Call Trace: [] ? xfs_qm_export_dquot+0x1af/0x1e4 [xfs] [] ? xfs_qm_scall_getquota+0xac/0xc0 [xfs] [] ? xfs_fs_getxquota+0x37/0x3b [xfs] [] ? sys_quotactl+0x574/0x604 [] ? system_call_fastpath+0x16/0x1b Code: 44 24 08 01 00 00 00 e8 4e c7 00 e0 48 83 c4 18 c3 89 d1 48 83 ec 08 48 89 f2 31 c0 48 89 fe 48 c7 c7 2b 03 34 a0 e8 2c bd f0 df <0f> 0b eb fe 41 56 83 e7 07 83 ff 07 41 55 49 89 d5 41 54 49 89 RIP [] assfail+0x1a/0x1e [xfs] RSP ---[ end trace 1c72dd68c3f985d1 ]--- This rendered the filesystem increasingly unstable until a hard reboot was necessary. Now any xfs_quota command, even just reporting, throws the same assertion. Any idea how I can repair this? Thanks, Chris Thanks, Chris From sandeen@sandeen.net Thu Jul 9 22:59:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6A3xvg0071735 for ; Thu, 9 Jul 2009 22:59:57 -0500 X-ASG-Debug-ID: 1247198432-3ec700470000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B04403551A6 for ; Thu, 9 Jul 2009 21:00:32 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id ZoG0zLlx2jB2szQ1 for ; Thu, 09 Jul 2009 21:00:32 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 40E9FA54764; Thu, 9 Jul 2009 23:00:30 -0500 (CDT) Message-ID: <4A56BCDE.2010609@sandeen.net> Date: Thu, 09 Jul 2009 23:00:30 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Chris Walker CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: kernel BUG with xfs_quota Subject: Re: kernel BUG with xfs_quota References: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> In-Reply-To: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247198433 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3006 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Chris Walker wrote: > Hello, > > I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g > bsoft=2048g bhard=2148g hepl' /seltzer_lab), which triggered a kernel > BUG: > > Assertion failed: dst->d_btimer != 0, file: > fs/xfs/quota/xfs_qm_syscalls.c, line: 927 Well, you hit this: #ifdef DEBUG if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == XFS_USER_QUOTA) || (XFS_IS_OQUOTA_ENFORCED(mp) && (dst->d_flags & (XFS_PROJ_QUOTA | XFS_GROUP_QUOTA)))) && dst->d_id != 0) { if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && (dst->d_blk_softlimit > 0)) { ASSERT(dst->d_btimer != 0); } ... which first raises the question, why are you running with CONFIG_XFS_DEBUG? :) I'm no quota guru, but this is something like... If quota is enabled and the block count is over a non-0 soft limit, then assert that the timer is non-0 (the timer being how much time is left before service is refused. It also got all those values off the disk just prior to the ASSERT. ... and I'm not sure what the problem may be. But you hit an internal debugging assert which is only on with CONFIG_XFS_DEBUG, you may get away with just running without that for now :) -Eric From marcelin@zebra.uem.mz Fri Jul 10 00:19:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=BAYES_50,URIBL_SBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6A5J4K9078233 for ; Fri, 10 Jul 2009 00:19:05 -0500 X-ASG-Debug-ID: 1247203606-673800a30000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from zebra.uem.mz (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 502BFA27889 for ; Thu, 9 Jul 2009 22:26:47 -0700 (PDT) Received: from zebra.uem.mz (zebra.uem.mz [196.3.96.67]) by cuda.sgi.com with ESMTP id gxHwmdRCtdws0fO6 for ; Thu, 09 Jul 2009 22:26:47 -0700 (PDT) Received: from zebra.uem.mz (localhost.uem.mz [127.0.0.1]) by zebra.uem.mz (Postfix) with ESMTP id B138097E832; Fri, 10 Jul 2009 04:47:17 +0200 (CAT) Received: from zebra.uem.mz (localhost.uem.mz [127.0.0.1]) by zebra.uem.mz (Postfix) with ESMTP id 5F32197E764; Fri, 10 Jul 2009 04:47:17 +0200 (CAT) From: "Marcelino MCT" Reply-To: mrterrysteven22@w.cn X-ASG-Orig-Subj: Claims Subject: Claims Date: Fri, 10 Jul 2009 05:47:17 +0300 Message-Id: <20090710024717.M32498@zebra.uem.mz> X-Mailer: OpenWebMail 2.53 X-OriginatingIP: 78.138.3.238 (marcelin) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 To: undisclosed-recipients:; X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: zebra.uem.mz[196.3.96.67] X-Barracuda-Start-Time: 1247203608 X-Barracuda-Bayes: INNOCENT GLOBAL 0.7158 1.0000 1.4908 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.49 X-Barracuda-Spam-Status: No, SCORE=1.49 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3011 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email X-Virus-Status: Clean We congratulate you on the selection of the Nokia'N'Series Program held on 05/07/09. You have been approved claim the sum of £ 1,000,000.00 GBP. For claims contact Mr. Terry Steven E-mail: mrterrysteven22@w.cn with the following details 1. full Name: 2. Address: 3. Nationality: 4. Date of Birth: 5. Occupation: 6. Phone: 7. Mobile: 8. Fax: 9. State of Origin: 10.Country: 11.Sex: 12.E-mail Address: From sandeen@sandeen.net Fri Jul 10 00:27:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6A5Ruex078696 for ; Fri, 10 Jul 2009 00:27:57 -0500 X-ASG-Debug-ID: 1247204130-7869000a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AF0B8A25B63 for ; Thu, 9 Jul 2009 22:35:30 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id JOMIOgkV8QhEaCPW for ; Thu, 09 Jul 2009 22:35:30 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 9D6CBA9DADB; Fri, 10 Jul 2009 00:28:22 -0500 (CDT) Message-ID: <4A56D176.9010702@sandeen.net> Date: Fri, 10 Jul 2009 00:28:22 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> In-Reply-To: <4A55FAF7.5040908@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247204130 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3013 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tomek Kruszona wrote: > Hello! > > I have a little problem with XFS filesystem that I have on one of my > machines. I try to make xfs_repair that was not making any problems > before, but xfs_repair stops on: > > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > > CPU usage grows up to 100%. I left it in the night hoping it will finish > job till morning, but the situation hasn't changed... > > System is Debian Lenny with current updates and custom 2.6.30.1 kernel > xfsprogs-2.9.8. Filesysystem is placed on LVM2 Logical Volume. > > I upgraded xfsprogs to 3.0.2 version and the problem still persists. > Then I reverted to 2.9.8 package from Debian Lenny. > Switching back to debian default 2.6.26 kernel doesn't help too. > > I can mount this filesystem and operate on it. > > Data on this system is not so crucial, because it's backup/testing > machine, but it would be great to keep this data, because synchronizing > 14TB of data will take some time. > > Output from xfs_info: > # xfs_info /mnt/storage/ > meta-data=/dev/mapper/p02bvg-p02blv isize=256 agcount=32, > agsize=268435455 blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=8410889216, imaxpct=5 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 > log =internal bsize=4096 blocks=32768, version=2 > = sectsz=512 sunit=0 blks, lazy-count=0 > realtime =none extsz=4096 blocks=0, rtextents=0 > > Any ideas how to make xfs_repair working again? No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, and it looks like cache_node_allocate() fails to get a new node and we keep spinning. I need to look some more at what's going on.... -Eric From kosaki.motohiro@jp.fujitsu.com Fri Jul 10 02:11:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6A7BiTa083200 for ; Fri, 10 Jul 2009 02:11:45 -0500 X-ASG-Debug-ID: 1247209938-08e003dc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail5.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 94B78355BF4 for ; Fri, 10 Jul 2009 00:12:19 -0700 (PDT) Received: from fgwmail5.fujitsu.co.jp (fgwmail5.fujitsu.co.jp [192.51.44.35]) by cuda.sgi.com with ESMTP id Il6eomRkAY0MUCkP for ; Fri, 10 Jul 2009 00:12:19 -0700 (PDT) Received: from m3.gw.fujitsu.co.jp ([10.0.50.73]) by fgwmail5.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n6A7CHWa006342 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Fri, 10 Jul 2009 16:12:17 +0900 Received: from smail (m3 [127.0.0.1]) by outgoing.m3.gw.fujitsu.co.jp (Postfix) with ESMTP id 22FB045DE55 for ; Fri, 10 Jul 2009 16:12:17 +0900 (JST) Received: from s3.gw.fujitsu.co.jp (s3.gw.fujitsu.co.jp [10.0.50.93]) by m3.gw.fujitsu.co.jp (Postfix) with ESMTP id CABCC45DE57 for ; Fri, 10 Jul 2009 16:12:16 +0900 (JST) Received: from s3.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s3.gw.fujitsu.co.jp (Postfix) with ESMTP id 307171DB8042 for ; Fri, 10 Jul 2009 16:12:16 +0900 (JST) Received: from m107.s.css.fujitsu.com (m107.s.css.fujitsu.com [10.249.87.107]) by s3.gw.fujitsu.co.jp (Postfix) with ESMTP id C68D11DB803B for ; Fri, 10 Jul 2009 16:12:15 +0900 (JST) Received: from m107.css.fujitsu.com (m107 [127.0.0.1]) by m107.s.css.fujitsu.com (Postfix) with ESMTP id 9B30B670026; Fri, 10 Jul 2009 16:12:15 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by m107.s.css.fujitsu.com (Postfix) with ESMTP id 1A2BE670029; Fri, 10 Jul 2009 16:12:15 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Fri, 10 Jul 2009 16:12:13 +0900 (JST) From: KOSAKI Motohiro To: Chris Mason X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Christoph Hellwig , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber In-Reply-To: <20090709130134.GH18008@think> References: <20090709110342.2386.A69D9226@jp.fujitsu.com> <20090709130134.GH18008@think> Message-Id: <20090710153349.17EC.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Fri, 10 Jul 2009 16:12:15 +0900 (JST) X-Barracuda-Connect: fgwmail5.fujitsu.co.jp[192.51.44.35] X-Barracuda-Start-Time: 1247209940 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3018 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > On Thu, Jul 09, 2009 at 11:04:32AM +0900, KOSAKI Motohiro wrote: > > > On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > > > > At least, I agree with Olaf. if you got someone's NAK in past thread, > > > > Could you please tell me its url? > > > > > > The previous thread was simply dead-ended and nothing happened. > > > > > > > Can you remember this thread subject? sorry, I haven't remember it. > > This is the original thread, it did lead to a few different patches > going in, but the nr_to_write change wasn't one of them. > > http://kerneltrap.org/mailarchive/linux-kernel/2008/10/1/3472704/thread Thanks good pointer. This thread have multiple interesting discussion. 1. making ext4_write_cache_pages() or modifying write_cache_pages() I think this is Christoph's homework. he said > I agree. But I'm still not quite sure if that requirement is unique to > ext4 anyway. Give me some time to dive into the writeback code again, > haven't been there for quite a while. if he says modifying write_cache_pages() is necessary, I'd like to review it. 2. Current mapping->writeback_index updating is not proper? I'm not sure which solution is better. but I think your first proposal is enough acceptable. 3. Current wbc->nr_to_write value is not proper? Current writeback_set_ratelimit() doesn't permit that ratelimit_pages exceed 4M byte. but it is too low restriction for nowadays. (that's my understand. right?) ======================================================= void writeback_set_ratelimit(void) { ratelimit_pages = vm_total_pages / (num_online_cpus() * 32); if (ratelimit_pages < 16) ratelimit_pages = 16; if (ratelimit_pages * PAGE_CACHE_SIZE > 4096 * 1024) ratelimit_pages = (4096 * 1024) / PAGE_CACHE_SIZE; } ======================================================= Yes, 4M bytes are pretty magical constant. We have three choice A. Remove magical 4M constant simple (a bit danger) B. Decide high border from IO capability C. Introduce new /proc knob (as Olaf proposed) In my personal prefer, B & C are better. From bloodyscarion@gmail.com Fri Jul 10 02:27:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6A7R0ei083704 for ; Fri, 10 Jul 2009 02:27:00 -0500 X-ASG-Debug-ID: 1247210855-124f01880000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AB7D81B4F1AA for ; Fri, 10 Jul 2009 00:27:35 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.152]) by cuda.sgi.com with ESMTP id NMAIx02ui830N7nE for ; Fri, 10 Jul 2009 00:27:35 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id l27so1514384fgb.8 for ; Fri, 10 Jul 2009 00:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=aKu1UiusR+oa/Im6If5EHNK5BYrGHMXC7BSyM3rEvNc=; b=uOHQNyU6lUIuoMozKXbxSh+ImUbUOPumJWHtx0QQm7qCIMPjCidczsfrU+mq7Hk84Z g+wxoKJ5r3nIVgtGIYgD6MOMdUiXMxilGfbewipjb3bN2oStkNGYgnn9jWb4g2kypIJE W7ViTrTH/ZwyhWyhjo2xjtvKRuqGBEpo9uxfc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=EghI3Og/q70+cTg9vxp+VyhTpIanYEPQ04oYvNo7DMac997QqDZs0WneIELoizKeX+ QiWo4x6YWzPAt6IFHF2TdlVu5QJLIxVjsLLYsbbHMFzo6UAy5XKQQ18DnGJacU74CNt/ +FhhTt4EuMXiXWympvLABL5TXsfe6sQJQiqKQ= Received: by 10.86.76.10 with SMTP id y10mr762247fga.63.1247210854964; Fri, 10 Jul 2009 00:27:34 -0700 (PDT) Received: from ?10.3.1.74? (proxy.platige.com [193.192.62.134]) by mx.google.com with ESMTPS id d6sm958015fga.20.2009.07.10.00.27.34 (version=SSLv3 cipher=RC4-MD5); Fri, 10 Jul 2009 00:27:34 -0700 (PDT) Message-ID: <4A56ED5F.10400@gmail.com> Date: Fri, 10 Jul 2009 09:27:27 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> In-Reply-To: <4A56D176.9010702@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.152] X-Barracuda-Start-Time: 1247210856 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0480 1.0000 -1.7124 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.71 X-Barracuda-Spam-Status: No, SCORE=-1.71 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3019 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, > and it looks like cache_node_allocate() fails to get a new node and we > keep spinning. I need to look some more at what's going on.... Hello! Is this specific behavior for this particular broken filesystem or is it a bug in functions you mentioned? I'm just curious :) Best regards, Tomasz Kruszona From sandeen@sandeen.net Fri Jul 10 09:34:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AEYW8D103779 for ; Fri, 10 Jul 2009 09:34:32 -0500 X-ASG-Debug-ID: 1247236508-44c4039e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 16CA8356FDA for ; Fri, 10 Jul 2009 07:35:08 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id bGYRxp1c8KWivoFG for ; Fri, 10 Jul 2009 07:35:08 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 298E4A9B0A7; Fri, 10 Jul 2009 09:35:06 -0500 (CDT) Message-ID: <4A575199.1050903@sandeen.net> Date: Fri, 10 Jul 2009 09:35:05 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> In-Reply-To: <4A56ED5F.10400@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247236509 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3035 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tomek Kruszona wrote: > Eric Sandeen wrote: >> No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, >> and it looks like cache_node_allocate() fails to get a new node and we >> keep spinning. I need to look some more at what's going on.... > > Hello! > > Is this specific behavior for this particular broken filesystem or is it > a bug in functions you mentioned? I'm just curious :) I don't know yet :) -Eric From christopher.walker@gmail.com Fri Jul 10 09:56:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AEucaO105533 for ; Fri, 10 Jul 2009 09:56:38 -0500 X-ASG-Debug-ID: 1247237834-523700ea0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from an-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7785035758B for ; Fri, 10 Jul 2009 07:57:15 -0700 (PDT) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.240]) by cuda.sgi.com with ESMTP id t1X4o98fGPIdiBPG for ; Fri, 10 Jul 2009 07:57:15 -0700 (PDT) Received: by an-out-0708.google.com with SMTP id b2so562800ana.32 for ; Fri, 10 Jul 2009 07:57:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=MWkfhr4mipIG+LMO9Z6A/1EnFNi2+GXMsnP3n99McHU=; b=dMPLKv57ovcIlq/wdK30GqvMvgWWzg/3vqqLVHg9lZMCKfZKyMBTA/5L38sfjtpaKi I03/faE/Um0OLSYJUt4oX18G6Lv1YO32K3WJ/qfoYCk5yLWUZANp0T1x4kcephR2iqPG owKvYXznouiCpxD3QErebJaAxBhEeAcZzomdo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=ePQFaoaPI0y17D08P7ustinfiSu01qRTZbT38QrGKQAEKdIpETVdPBR4VdNRo3RRbE iv/ISb3CJ5sRPe94rT7MtZ5wDoelSAmN53eV/OmImM5KG155zcLFYLQ222QN/ukmeoWZ H4YL3i3ukpS/EBM74gG4VmYEXLdFWmWzQXOMg= MIME-Version: 1.0 Received: by 10.100.41.4 with SMTP id o4mr2776623ano.53.1247237834730; Fri, 10 Jul 2009 07:57:14 -0700 (PDT) In-Reply-To: <4A56BCDE.2010609@sandeen.net> References: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> <4A56BCDE.2010609@sandeen.net> Date: Fri, 10 Jul 2009 10:57:14 -0400 Message-ID: <554e24be0907100757g7f891fa1t7517cb0258853779@mail.gmail.com> X-ASG-Orig-Subj: Re: kernel BUG with xfs_quota Subject: Re: kernel BUG with xfs_quota From: Chris Walker To: Eric Sandeen Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: an-out-0708.google.com[209.85.132.240] X-Barracuda-Start-Time: 1247237835 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Thanks a lot for your response Eric, I didn't realize that debugging could lead to problems (perhaps the EXPERIMENTAL should have warned me!) I will recompile without debugging. I'm a bit surprised that debugging could lead to general filesystem instability -- I assumed it was a 'read-only' process. Thanks! Chris On Fri, Jul 10, 2009 at 12:00 AM, Eric Sandeen wrote: > Chris Walker wrote: >> Hello, >> >> I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g >> bsoft=3D2048g bhard=3D2148g hepl' /seltzer_lab), which triggered a kerne= l >> BUG: >> >> Assertion failed: dst->d_btimer !=3D 0, file: >> fs/xfs/quota/xfs_qm_syscalls.c, line: 927 > > Well, you hit this: > > #ifdef DEBUG > =A0 =A0 =A0 =A0if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags =3D=3D > XFS_USER_QUOTA) || > =A0 =A0 =A0 =A0 =A0 =A0 (XFS_IS_OQUOTA_ENFORCED(mp) && > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(dst->d_flags & (XFS_PROJ_= QUOTA | > XFS_GROUP_QUOTA)))) && > =A0 =A0 =A0 =A0 =A0 =A0dst->d_id !=3D 0) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (((int) dst->d_bcount >=3D (int) dst->d= _blk_softlimit) && > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(dst->d_blk_softlimit > 0)) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ASSERT(dst->d_btimer !=3D = 0); > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > ... > > which first raises the question, why are you running with > CONFIG_XFS_DEBUG? :) > > I'm no quota guru, but this is something like... > > If quota is enabled and the block count is over a non-0 soft limit, then > assert that the timer is non-0 (the timer being how much time is left > before service is refused. > > It also got all those values off the disk just prior to the ASSERT. > > ... and I'm not sure what the problem may be. =A0But you hit an internal > debugging assert which is only on with CONFIG_XFS_DEBUG, you may get > away with just running without that for now :) > > -Eric > From sandeen@sandeen.net Fri Jul 10 09:58:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AEwlKa105623 for ; Fri, 10 Jul 2009 09:58:48 -0500 X-ASG-Debug-ID: 1247237964-4f5701280000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C22703575A6 for ; Fri, 10 Jul 2009 07:59:24 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Bn4Nx3KSULldxmGA for ; Fri, 10 Jul 2009 07:59:24 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0D39EA9BF30; Fri, 10 Jul 2009 09:59:24 -0500 (CDT) Message-ID: <4A57574B.2070006@sandeen.net> Date: Fri, 10 Jul 2009 09:59:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Chris Walker CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: kernel BUG with xfs_quota Subject: Re: kernel BUG with xfs_quota References: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> <4A56BCDE.2010609@sandeen.net> <554e24be0907100757g7f891fa1t7517cb0258853779@mail.gmail.com> In-Reply-To: <554e24be0907100757g7f891fa1t7517cb0258853779@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247237964 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Chris Walker wrote: > Thanks a lot for your response Eric, I didn't realize that debugging > could lead to problems (perhaps the EXPERIMENTAL should have warned > me!) I will recompile without debugging. I'm a bit surprised that > debugging could lead to general filesystem instability -- I assumed it > was a 'read-only' process. > Thanks! > Chris Well, in general the asserts should all be valid, but they are unforgiving, hence the stern warnings in the config help. Rather than printing out detailed info (though there is some of that), CONFIG_XFS_DEBUG will also trigger an intentional BUG(); in any of the assert conditions... so it's dangerous. If you are hitting some other problem, running with CONFIG_XFS_DEBUG may catch the problem sooner, but I would not recommend running with it in general production. -Eric > On Fri, Jul 10, 2009 at 12:00 AM, Eric Sandeen wrote: >> Chris Walker wrote: >>> Hello, >>> >>> I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g >>> bsoft=2048g bhard=2148g hepl' /seltzer_lab), which triggered a kernel >>> BUG: >>> >>> Assertion failed: dst->d_btimer != 0, file: >>> fs/xfs/quota/xfs_qm_syscalls.c, line: 927 >> Well, you hit this: >> >> #ifdef DEBUG >> if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == >> XFS_USER_QUOTA) || >> (XFS_IS_OQUOTA_ENFORCED(mp) && >> (dst->d_flags & (XFS_PROJ_QUOTA | >> XFS_GROUP_QUOTA)))) && >> dst->d_id != 0) { >> if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && >> (dst->d_blk_softlimit > 0)) { >> ASSERT(dst->d_btimer != 0); >> } >> ... >> >> which first raises the question, why are you running with >> CONFIG_XFS_DEBUG? :) >> >> I'm no quota guru, but this is something like... >> >> If quota is enabled and the block count is over a non-0 soft limit, then >> assert that the timer is non-0 (the timer being how much time is left >> before service is refused. >> >> It also got all those values off the disk just prior to the ASSERT. >> >> ... and I'm not sure what the problem may be. But you hit an internal >> debugging assert which is only on with CONFIG_XFS_DEBUG, you may get >> away with just running without that for now :) >> >> -Eric >> > From BATV+e1505189499ded28211b+2147+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 10 11:01:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AG1oIk107714 for ; Fri, 10 Jul 2009 11:01:53 -0500 X-ASG-Debug-ID: 1247241747-05ea03700000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B690E1B51C2A for ; Fri, 10 Jul 2009 09:02:27 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 05LquwRG3tDQExdS for ; Fri, 10 Jul 2009 09:02:27 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MPIYL-0003w2-NP; Fri, 10 Jul 2009 16:02:25 +0000 Date: Fri, 10 Jul 2009 12:02:25 -0400 From: Christoph Hellwig To: Sage Weil Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: inconsistent lock state on 2.6.30? Subject: Re: inconsistent lock state on 2.6.30? Message-ID: <20090710160225.GA14288@infradead.org> References: <20090623170844.GA23971@infradead.org> <20090626173558.GA402@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090626173558.GA402@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247241747 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean FYI all these warnings are due to the new in reclaim state tracking that was added to lockdep recently. I now have a tree fixing all these warnings including those two you see. It's all still a bit hacky, but I'll soon post a patch series to fix them all in one way or another. From sandeen@sandeen.net Fri Jul 10 15:16:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AKGX7D119702 for ; Fri, 10 Jul 2009 15:16:33 -0500 X-ASG-Debug-ID: 1247257029-57e2011c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1F5CE3588B0 for ; Fri, 10 Jul 2009 13:17:09 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id DTUFDvbjmLcwNiE0 for ; Fri, 10 Jul 2009 13:17:09 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id C2AA3A7CE6A; Fri, 10 Jul 2009 15:17:08 -0500 (CDT) Message-ID: <4A57A1C4.40004@sandeen.net> Date: Fri, 10 Jul 2009 15:17:08 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> In-Reply-To: <4A56ED5F.10400@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247257030 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3046 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tomek Kruszona wrote: > Eric Sandeen wrote: >> No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, >> and it looks like cache_node_allocate() fails to get a new node and we >> keep spinning. I need to look some more at what's going on.... > > Hello! > > Is this specific behavior for this particular broken filesystem or is it > a bug in functions you mentioned? I'm just curious :) This looks like some of the caching that xfs_repair does is mis-sized, and it gets stuck when it's unable to find a slot for a new node to cache. IMHO that's still a bug that I'd like to work out. If it gets stuck this way, it'd probably be better to exit, and suggest a larger hash size. But anyway, I forced a bigger hash size: xfs_repair -P -o bhash=1024 and it did complete. 1024 is probably over the top, but it worked for me on a 4G machine w/ some swap. I'd strongly suggest doing a non-obfuscated xfs_metadump, do xfs_mdrestore of that to some temp.img, run xfs_repair on that temp.img, mount it, and see what you're left with; that way you'll know what you're getting into w/ repair. I ended up w/ about 5000 files in lost+found just FWIW... Out of curiosity, do you know how the fs was damaged? -Eric From bloodyscarion@gmail.com Fri Jul 10 16:02:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, RCVD_IN_SORBS_WEB autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AL27vR122213 for ; Fri, 10 Jul 2009 16:02:08 -0500 X-ASG-Debug-ID: 1247259763-145800160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A55A41BD34C1 for ; Fri, 10 Jul 2009 14:02:43 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id QMMvZT0VMGpSLANh for ; Fri, 10 Jul 2009 14:02:43 -0700 (PDT) Received: by bwz10 with SMTP id 10so952692bwz.20 for ; Fri, 10 Jul 2009 14:02:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=RZMKG9LWrcaxvtgAiJ75RIOj0SseEEh6qh+lcxjP22E=; b=jx0lG7SVmGLTB8RNqHC381GNTIC2ozDEQO9/pgrrTBc6hdc9KjYeZViVtEwBId0N2q navWF8XDgSpcX41+Z5HyoXh38Y5xAri6fzchqRhswqgc/R61l57i1vS72Q3Qvh61PV4v Vt/u0vNaWHYhf1AfG+Xfn42b983O/CiHmOz6Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=H3UZTp6mVW1nrm82oUqkAv5vkNxoyukeNEG+XcEzz27vpJ41G+aMXQBskKWNBcq1lw yquddq9nxjWeAcq7whcj2WJSbdHoUkP6WzGjQZRRIX/0bNh6PE+4nl0w5GxdQiGmHTjv UgMSJyW7bBQ05CS3tFReVu+Ui06ki1TCUgoDs= Received: by 10.103.231.16 with SMTP id i16mr1322003mur.7.1247259761110; Fri, 10 Jul 2009 14:02:41 -0700 (PDT) Received: from ?192.168.1.118? (chello089077150083.chello.pl [89.77.150.83]) by mx.google.com with ESMTPS id s10sm8013349muh.57.2009.07.10.14.02.40 (version=SSLv3 cipher=RC4-MD5); Fri, 10 Jul 2009 14:02:40 -0700 (PDT) Message-ID: <4A57AC69.7070502@gmail.com> Date: Fri, 10 Jul 2009 23:02:33 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> In-Reply-To: <4A57A1C4.40004@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1247259764 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0208 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3050 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > This looks like some of the caching that xfs_repair does is mis-sized, > and it gets stuck when it's unable to find a slot for a new node to > cache. IMHO that's still a bug that I'd like to work out. If it gets > stuck this way, it'd probably be better to exit, and suggest a larger > hash size. > > But anyway, I forced a bigger hash size: > > xfs_repair -P -o bhash=1024 > > and it did complete. 1024 is probably over the top, but it worked for > me on a 4G machine w/ some swap. :D Is it safe to use xfs_repair without this options after the FS was repaired? Or maybe I should use them every time I have similar problem? > I'd strongly suggest doing a non-obfuscated xfs_metadump, do > xfs_mdrestore of that to some temp.img, run xfs_repair on that > temp.img, mount it, and see what you're left with; that way you'll know > what you're getting into w/ repair. > I ended up w/ about 5000 files in lost+found just FWIW... It doesn't matter. On this filesystem is a lot of small files. Those are image sequences used for video composition. It's backup machine so if they're gone from filesystem they will be copied back from original machine. No stress :) I'm doing xfs_repair on the image now - it's Phase 4 and for now list of files looks very similar to list that I saw during xfs_repair without options you suggested. > Out of curiosity, do you know how the fs was damaged? I'm not sure. I see some possibilities. I played with write cache options on the RAID controller when the FS was mounted and running. Maybe then something went wrong... Second possible reason is that we had power loss last time and this machine went down then :/ Last one is that I have some problems with XFS filesytems on LVM2. in kernels <2.6.30 barriers are automatically disabled when underlying device is some dm-device. As I'm using RAID controllers I should have write cache disabled. So after upgrade to 2.6.30 message about disabled barriers disappeared and it was safe to enable write cache again. Somewhere in the meantime I wanted to check filesystem that everything is ok with it and then the problem started - I couldn't finish xfs_repair. This power loss was IIRC after my troubles with xfs_repair, so the filesystem wasn't totally clean when power failed. Maybe this is the reason of this mess ;) Best regards Tomasz Kruszona From sandeen@sandeen.net Fri Jul 10 16:14:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ALEXZu123105 for ; Fri, 10 Jul 2009 16:14:34 -0500 X-ASG-Debug-ID: 1247260940-2fb200d20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 440B8A32B29 for ; Fri, 10 Jul 2009 14:22:20 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id tJUs2kjY6ljXHPCy for ; Fri, 10 Jul 2009 14:22:20 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id A3E9EA9BE28; Fri, 10 Jul 2009 16:15:09 -0500 (CDT) Message-ID: <4A57AF5D.6080603@sandeen.net> Date: Fri, 10 Jul 2009 16:15:09 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> <4A57AC69.7070502@gmail.com> In-Reply-To: <4A57AC69.7070502@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247260941 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3051 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tomek Kruszona wrote: > Eric Sandeen wrote: >> This looks like some of the caching that xfs_repair does is mis-sized, >> and it gets stuck when it's unable to find a slot for a new node to >> cache. IMHO that's still a bug that I'd like to work out. If it gets >> stuck this way, it'd probably be better to exit, and suggest a larger >> hash size. >> >> But anyway, I forced a bigger hash size: >> >> xfs_repair -P -o bhash=1024 >> >> and it did complete. 1024 is probably over the top, but it worked for >> me on a 4G machine w/ some swap. > :D > > Is it safe to use xfs_repair without this options after the FS was > repaired? Or maybe I should use them every time I have similar problem? These are all good questions ;) TBH I'm kind of digging through repair in earnest for the first time. I'm not certain why it got into this state, whether there is some underlying bug, perhaps leaving things wrongly referenced, or just a plain ol' mis-sizing of the caches. I have a patch now that ends like this; if all else fails at least it'd not spin forever, and give a hint of what to try. -Eric ... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... unknown magic number 0 for block 8388608 in directory inode 40541 rebuilding directory inode 40541 unknown magic number 0 for block 8388608 in directory inode 48934 rebuilding directory inode 48934 unknown magic number 0 for block 8388608 in directory inode 56139 rebuilding directory inode 56139 unknown magic number 0 for block 8388608 in directory inode 63785 rebuilding directory inode 63785 Unable to free any items in cache for new node; exiting. Try increasing the bhash and/or ihash size beyond 64 cache: 0x190ed4d0 Max supported entries = 512 Max utilized entries = 512 Active entries = 512 Hash table size = 64 Hits = 130779 Misses = 271155 Hit ratio = 32.54 MRU 0 entries = 0 ( 0%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 2 entries 2 ( 0%) Hash buckets with 3 entries 2 ( 1%) Hash buckets with 4 entries 4 ( 3%) Hash buckets with 5 entries 1 ( 0%) Hash buckets with 6 entries 8 ( 9%) Hash buckets with 7 entries 9 ( 12%) Hash buckets with 8 entries 9 ( 14%) Hash buckets with 9 entries 10 ( 17%) Hash buckets with 10 entries 9 ( 17%) Hash buckets with 11 entries 6 ( 12%) Hash buckets with 12 entries 1 ( 2%) Hash buckets with 13 entries 2 ( 5%) Hash buckets with 14 entries 1 ( 2%) From bloodyscarion@gmail.com Fri Jul 10 18:43:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, RCVD_IN_SORBS_WEB autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ANhoca129709 for ; Fri, 10 Jul 2009 18:43:50 -0500 X-ASG-Debug-ID: 1247269466-4edb02b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 50ED3358FE4 for ; Fri, 10 Jul 2009 16:44:26 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id VEBRbDWklSqBMRGQ for ; Fri, 10 Jul 2009 16:44:26 -0700 (PDT) Received: by bwz10 with SMTP id 10so997206bwz.20 for ; Fri, 10 Jul 2009 16:44:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=ByU/dnyeL0SBKBcSPon2+LFX0kqiETprVdMpFESm6Ag=; b=EfM6MXPulV32Xb58llej8qxxCPxoMT2g7c9Bs7qGjoI1XA9Nqof83I1pogXhSLcoNU ub2R2wB5RmqBOz34ZbZeHGwrgR2xCyWd4w5x7uEJDaHi/P8xN2EuCIF26HKNOMM04OFj TGokl8c75m7m5iT/6C1f/oCXj2lTyyo9G35wg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=tk+Zgxm+MOZbKVoRomJxEA2j2hUDj9yGiAmpPuV8+fhkee5vv79d0ytLdj62acvcTy NyJ2FKDrJp7bj1DoiYpUiGbQrRT9vt8rgPl1fpk1Gy4/kn8tICsLCQ24hf29+zIJCN9b oq37/tF7F7BwFfYp+nn01AXe6m57kDdFfuSiE= Received: by 10.103.174.18 with SMTP id b18mr1342095mup.129.1247269465446; Fri, 10 Jul 2009 16:44:25 -0700 (PDT) Received: from ?192.168.1.118? (chello089077150083.chello.pl [89.77.150.83]) by mx.google.com with ESMTPS id i7sm8359573mue.18.2009.07.10.16.44.24 (version=SSLv3 cipher=RC4-MD5); Fri, 10 Jul 2009 16:44:25 -0700 (PDT) Message-ID: <4A57D252.4020804@gmail.com> Date: Sat, 11 Jul 2009 01:44:18 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> <4A57AC69.7070502@gmail.com> <4A57AF5D.6080603@sandeen.net> In-Reply-To: <4A57AF5D.6080603@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1247269467 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0003 1.0000 -2.0192 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3051 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > These are all good questions ;) TBH I'm kind of digging through repair > in earnest for the first time. I'm not certain why it got into this > state, whether there is some underlying bug, perhaps leaving things > wrongly referenced, or just a plain ol' mis-sizing of the caches. > > I have a patch now that ends like this; if all else fails at least it'd > not spin forever, and give a hint of what to try. > > -Eric > > ... > > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > unknown magic number 0 for block 8388608 in directory inode 40541 > rebuilding directory inode 40541 > unknown magic number 0 for block 8388608 in directory inode 48934 > rebuilding directory inode 48934 > unknown magic number 0 for block 8388608 in directory inode 56139 > rebuilding directory inode 56139 > unknown magic number 0 for block 8388608 in directory inode 63785 > rebuilding directory inode 63785 > Unable to free any items in cache for new node; exiting. > Try increasing the bhash and/or ihash size beyond 64 > cache: 0x190ed4d0 > Max supported entries = 512 > Max utilized entries = 512 > Active entries = 512 > Hash table size = 64 > Hits = 130779 > Misses = 271155 > Hit ratio = 32.54 [snip] I made some tests and it seems, that filesystem to finish xfs_repair needs to be repaired with bhash=1024... With default options it still hangs on "traversing filesystem..." Is it possible to change this behavior to normal in other way than reformat? Moreover I spotted some strange thing. 16GB of data has been moved to lost+found. I tried to clean L+F by # rm -rf lost+found but suddenly I got this: # ls -l /mnt/storage/ ls: cannot access /mnt/storage/lost+found: No such file or directory total 0 drwxr-xr-x 4 root root 33 Mar 4 17:21 l_mirror ?????????? ? ? ? ? ? lost+found I had to run xfs_repair (bhash=1024) once again and then l+f disappeared... So I started to think: does it have some influence on data that are stored on this filesystem? I'm afraid that files on this FS may become inconsistent :/ Best regards, Tomasz Kruszona From sandeen@sandeen.net Fri Jul 10 19:35:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6B0ZeHV131070 for ; Fri, 10 Jul 2009 19:35:40 -0500 X-ASG-Debug-ID: 1247272575-144103570000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5354B1BD3ECA for ; Fri, 10 Jul 2009 17:36:15 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id IypZbwfgL1lFwh4Z for ; Fri, 10 Jul 2009 17:36:15 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 1BEBBA9BF30; Fri, 10 Jul 2009 19:36:15 -0500 (CDT) Message-ID: <4A57DE7E.8080901@sandeen.net> Date: Fri, 10 Jul 2009 19:36:14 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> <4A57AC69.7070502@gmail.com> <4A57AF5D.6080603@sandeen.net> <4A57D252.4020804@gmail.com> In-Reply-To: <4A57D252.4020804@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247272577 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3055 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Tomek Kruszona wrote: ... > I made some tests and it seems, that filesystem to finish xfs_repair > needs to be repaired with bhash=1024... With default options it still > hangs on "traversing filesystem..." Is it possible to change this > behavior to normal in other way than reformat? It has nothing to do w/ the format, it's just internal to xfs_repair while it's running, the way it caches blocks that it has recently used. > Moreover I spotted some > strange thing. 16GB of data has been moved to lost+found. I tried to Yeah ... > clean L+F by > # rm -rf lost+found > > but suddenly I got this: > > # ls -l /mnt/storage/ > ls: cannot access /mnt/storage/lost+found: No such file or directory > total 0 > drwxr-xr-x 4 root root 33 Mar 4 17:21 l_mirror > ?????????? ? ? ? ? ? lost+found huh. let me try on the repaired metadata image... [root@bear-05 bad-repair]# mount -o loop badfs.img mnt/ [root@bear-05 bad-repair]# du -hc mnt/lost+found/ 26M mnt/lost+found/1602304 5.0M mnt/lost+found/2558868 18G mnt/lost+found/ 18G total [root@bear-05 bad-repair]# rm -rf mnt/lost+found/* [root@bear-05 bad-repair]# ls -l mnt/ total 0 drwxr-xr-x 4 root root 33 Mar 4 10:21 ??5?t??4 drwxr-xr-x 0 root root 6 Jul 10 19:48 lost+found drwxr-xr-x 2 1000 root 6 Jun 30 08:45 tests Did you do something else to the fs in between? > I had to run xfs_repair (bhash=1024) once again and then l+f disappeared... > > So I started to think: does it have some influence on data that are > stored on this filesystem? I'm afraid that files on this FS may become > inconsistent :/ Well, I don't know what has gone wrong with your filesytem (or, with the storage beneath it, or whatever) - but it is certainly possible that with corrupted metadata, that there is corrupted data as well - all depends on the root cause ... -Eric > Best regards, > Tomasz Kruszona From sandeen@sandeen.net Sat Jul 11 00:17:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6B5H0Is147697 for ; Sat, 11 Jul 2009 00:17:01 -0500 X-ASG-Debug-ID: 1247289457-28db00ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F1C2F1BD4133 for ; Fri, 10 Jul 2009 22:17:37 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id jIWxSQ2OImBjnyut for ; Fri, 10 Jul 2009 22:17:37 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id B6479A7CE6A for ; Sat, 11 Jul 2009 00:17:36 -0500 (CDT) Message-ID: <4A582070.9040907@sandeen.net> Date: Sat, 11 Jul 2009 00:17:36 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Subject: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247289457 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3073 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean See also RH bug #510823: https://bugzilla.redhat.com/show_bug.cgi?id=510823 This check in xfs_iformat_btree() tripped: /* * blow out if -- fork has less extents than can fit in * fork (fork shouldn't be a btree format), root btree * block has more records than can fit into the fork, * or the number of extents is greater than the number of * blocks. */ leading to: Jul 10 23:22:45 hermes kernel: Filesystem "dm-11": corrupt inode 2339503222 (btree). Unmount and run xfs_repair. Jul 10 23:22:45 hermes kernel: Filesystem "dm-11": XFS internal error xfs_iformat_btree at line 625 of file fs/xfs/xfs_inode.c. but repair finds nothing at all. xfs_check, however, does flag the inodes as problematic: extent count for ino 2339503222 data fork too low (6) for file format So I copied the xfs_check test into xfs_repair, and voila, it clears these inodes. But questions remain... 1) How'd it get into this state? ... but maybe more importantly... 2) Should these really get cleared? It's possibly a sane extent list, it's just that it -could- be in extents rather than btree format... 3) By the same token, should the kernel really be choking on it? Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index 84e1d05..3fc6cac 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -1280,6 +1280,14 @@ process_btinode( last_key = cursor.level[level-1].first_key; } } + if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { + do_warn(_("extent count for ino %lld %s fork too low " + "(%d) for file format\n"), + lino, + whichfork == XFS_DATA_FORK ? _("data") : _("attr"), + *nex); + return(1); + } /* * Check that the last child block's forward sibling pointer * is NULL. From michael.monnerie@is.it-management.at Sun Jul 12 12:01:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6CH1wwK253734 for ; Sun, 12 Jul 2009 12:01:59 -0500 X-ASG-Debug-ID: 1247418594-3f0d01da0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7DD6F130A5C1 for ; Sun, 12 Jul 2009 10:09:55 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id gKNerVbtqgtq3B0y for ; Sun, 12 Jul 2009 10:09:55 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 315F651A9 for ; Sun, 12 Jul 2009 19:03:23 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 11C21400163 for ; Sun, 12 Jul 2009 19:02:33 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it Date: Sun, 12 Jul 2009 19:02:28 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <200907031320.48358@zmi.at> <4A4EEBE6.6060909@sandeen.net> In-Reply-To: <4A4EEBE6.6060909@sandeen.net> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1339834.XHtPjja0fY"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907121902.32599@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247418595 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3216 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart1339834.XHtPjja0fY Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Samstag 04 Juli 2009 Eric Sandeen wrote: > Where's Barry when you need him .... Who's that? > Also I need to look at when the ASSERTs are active and when they > should be; the Fedora packaged xfsprogs doesn't have the ASSERT > active, and so this doesn't trip. =A0After 2 calls to xfs_repair on > Fedora, w/o the ASSERTs active, it checks clean on the 3rd (!). =A0Not > great. =A0Not sure how much was cleared out in the process either... Any ideas/news on this? I'd like to xfs_repair that stuff. It seems to=20 only hit one file, but I don't dare delete it, maybe it makes things=20 worse? mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart1339834.XHtPjja0fY Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpaFygACgkQzhSR9xwSCbQRvACfaRRccmXKKdFnHPzspRRxwWXP WKkAoNH+CrfMgMT9e/0N27B5UJhuA+IA =uwsS -----END PGP SIGNATURE----- --nextPart1339834.XHtPjja0fY-- From sandeen@sandeen.net Sun Jul 12 13:09:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6CI9DgQ255988 for ; Sun, 12 Jul 2009 13:09:13 -0500 X-ASG-Debug-ID: 1247422190-185e00560000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 49C5535B4BA for ; Sun, 12 Jul 2009 11:09:50 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0r2t3PKN1YqdnHOK for ; Sun, 12 Jul 2009 11:09:50 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 2CC3EA9DAD9; Sun, 12 Jul 2009 13:09:49 -0500 (CDT) Message-ID: <4A5A26EC.8090503@sandeen.net> Date: Sun, 12 Jul 2009 13:09:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> <4A4EEBE6.6060909@sandeen.net> <200907121902.32599@zmi.at> In-Reply-To: <200907121902.32599@zmi.at> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247422191 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3219 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Monnerie wrote: > On Samstag 04 Juli 2009 Eric Sandeen wrote: >> Where's Barry when you need him .... > > Who's that? The ex-sgi xfs_repair maintainer :) >> Also I need to look at when the ASSERTs are active and when they >> should be; the Fedora packaged xfsprogs doesn't have the ASSERT >> active, and so this doesn't trip. After 2 calls to xfs_repair on >> Fedora, w/o the ASSERTs active, it checks clean on the 3rd (!). Not >> great. Not sure how much was cleared out in the process either... > > Any ideas/news on this? I'd like to xfs_repair that stuff. It seems to > only hit one file, but I don't dare delete it, maybe it makes things > worse? > > mfg zmi Sorry, I will get back to this soon - today I hope. I seem to be getting more and more familiar w/ xfs_repair these days. :) If you do want to try deleting that one file or other such tricks, you can do it on a sparse metadata image of the fs as a dry run: # xfs_metadump -o /dev/whatever metadump.img # xfs_mdrestore metadump.img filesystem.img # mount -o loop filesystem.img mnt/ # # umount mnt/ # xfs_repair filesystem.img # mount -o loop filesystem.img mnt/ and see what happens... -Eric From sandeen@sandeen.net Sun Jul 12 13:51:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6CIpiE6258705 for ; Sun, 12 Jul 2009 13:51:44 -0500 X-ASG-Debug-ID: 1247425182-509b036f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BEE15A32088 for ; Sun, 12 Jul 2009 11:59:42 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id sjaLx42VNqk9VQtZ for ; Sun, 12 Jul 2009 11:59:42 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0038BA9BF2F; Sun, 12 Jul 2009 13:52:20 -0500 (CDT) Message-ID: <4A5A30E4.6090309@sandeen.net> Date: Sun, 12 Jul 2009 13:52:20 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247425182 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3222 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Monnerie wrote: > Tonight our server rebooted, and I found in /var/log/warn that he was crying > a lot about xfs since June 7 already: > > Jun 7 03:06:31 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 3857051697 ((a)extents = 5). Unmount and run xfs_repair. > Jun 7 03:06:31 orion.i.zmi.at kernel: Pid: 23230, comm: xfs_fsr Tainted: G 2.6.27.21-0.1-xen #1 > Jun 7 03:06:31 orion.i.zmi.at kernel: Hm, the other sort of interesting thing here is that a recently-reported RH bug: [Bug 510823] "Structure needs cleaning" when reading files from an XFS partition (extent count for ino XYZ data fork too low (6) for file format) also seems to -possibly- be related to an xfs_fsr run, and also is related to extents in the wrong format. In that case it was the opposite; an inode was found in btree format which had few enough extents that it should have been in the extents format in the inode; in your case, it looks like there were too many extents to fit in the format it had... Just out of curiosity, it looks like you have rather a lot of extended attributes on at least the inode above, is that accurate? Or maybe that's part of the corruption? I'll focus on getting xfs_repair to cope first, but I wonder what happened here... Thanks, -Eric From michael.monnerie@is.it-management.at Sun Jul 12 17:07:47 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6CM7k09005896 for ; Sun, 12 Jul 2009 17:07:47 -0500 X-ASG-Debug-ID: 1247436502-136500c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E913535B7B2 for ; Sun, 12 Jul 2009 15:08:22 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id 1SEkRSVt3rHYdNhE for ; Sun, 12 Jul 2009 15:08:22 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 639E14E10 for ; Mon, 13 Jul 2009 00:09:11 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 94767400154 for ; Mon, 13 Jul 2009 00:08:21 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it Date: Mon, 13 Jul 2009 00:08:20 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <200907031320.48358@zmi.at> <4A5A30E4.6090309@sandeen.net> In-Reply-To: <4A5A30E4.6090309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200907130008.21006@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247436503 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3234 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sonntag 12 Juli 2009 Eric Sandeen wrote: > Just out of curiosity, it looks like you have rather a lot of > extended attributes on at least the inode above, is that accurate? > =A0Or maybe that's part of the corruption? # find . -inum 3857051697 find: "./samba/tmp/BettyPC.tib": Die Struktur muss bereinigt werden (means: structure needs cleaning) I'm not sure if that message means that file has the corresponding inode number? If it is, it's a backup of a PC made with Acronis. Normally I only use xattr's to set one or two extra rights > I'll focus on getting xfs_repair to cope first, but I wonder what > happened here... No idea. Didn't have a crash on that server IIRC. I tried some "ls"=20 and "getfacl" and got these crashes: Jul 13 00:01:10 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 13 00:01:10 orion.i.zmi.at kernel: Pid: 17213, comm: find Tainted: G = 2.6.27.23-0.1-xen #1 Jul 13 00:01:10 orion.i.zmi.at kernel: Jul 13 00:01:10 orion.i.zmi.at kernel: Call Trace: Jul 13 00:01:10 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 13 00:01:10 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_lookup+0x7= 9/0xa5 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_vn_lookup+= 0x3c/0x78 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] real_lookup+0x= 7e/0x10f Jul 13 00:01:10 orion.i.zmi.at kernel: [] do_lookup+0x63= /0xb6 Jul 13 00:01:10 orion.i.zmi.at kernel: [] __link_path_wa= lk+0x9f4/0xe58 Jul 13 00:01:10 orion.i.zmi.at kernel: [] path_walk+0x5e= /0xb9 Jul 13 00:01:10 orion.i.zmi.at kernel: [] do_path_lookup= +0x162/0x1b9 Jul 13 00:01:10 orion.i.zmi.at kernel: [] user_path_at+0= x48/0x79 Jul 13 00:01:10 orion.i.zmi.at kernel: [] vfs_lstat_fd+0= x15/0x41 Jul 13 00:01:10 orion.i.zmi.at kernel: [] sys_newfstatat= +0x22/0x43 Jul 13 00:01:10 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 13 00:01:10 orion.i.zmi.at kernel: [<00007f802a89f4ce>] 0x7f802a89f4ce Jul 13 00:01:10 orion.i.zmi.at kernel: Jul 13 00:02:35 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 13 00:02:35 orion.i.zmi.at kernel: Pid: 17232, comm: getfacl Tainted: G= 2.6.27.23-0.1-xen #1 Jul 13 00:02:35 orion.i.zmi.at kernel: Jul 13 00:02:35 orion.i.zmi.at kernel: Call Trace: Jul 13 00:02:35 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 13 00:02:35 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_lookup+0x7= 9/0xa5 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_vn_lookup+= 0x3c/0x78 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] real_lookup+0x= 7e/0x10f Jul 13 00:02:35 orion.i.zmi.at kernel: [] do_lookup+0x63= /0xb6 Jul 13 00:02:35 orion.i.zmi.at kernel: [] __link_path_wa= lk+0x9f4/0xe58 Jul 13 00:02:35 orion.i.zmi.at kernel: [] path_walk+0x5e= /0xb9 Jul 13 00:02:35 orion.i.zmi.at kernel: [] do_path_lookup= +0x162/0x1b9 Jul 13 00:02:35 orion.i.zmi.at kernel: [] user_path_at+0= x48/0x79 Jul 13 00:02:35 orion.i.zmi.at kernel: [] vfs_lstat_fd+0= x15/0x41 Jul 13 00:02:35 orion.i.zmi.at kernel: [] sys_newlstat+0= x19/0x31 Jul 13 00:02:35 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 13 00:02:35 orion.i.zmi.at kernel: [<00007f9a8d911225>] 0x7f9a8d911225 Jul 11 03:02:53 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 11 03:02:53 orion.i.zmi.at kernel: Pid: 2881, comm: xfs_fsr Tainted: G = 2.6.27.23-0.1-xen #1 Jul 11 03:02:53 orion.i.zmi.at kernel: Jul 11 03:02:53 orion.i.zmi.at kernel: Call Trace: Jul 11 03:02:53 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 11 03:02:53 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_vget_fsop_= handlereq+0xc2/0x11b [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_open_by_ha= ndle+0x60/0x1cb [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_ioctl+0x3c= a/0x680 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_file_ioctl= +0x25/0x69 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] vfs_ioctl+0x21= /0x6c Jul 11 03:02:53 orion.i.zmi.at kernel: [] do_vfs_ioctl+0= x222/0x231 Jul 11 03:02:53 orion.i.zmi.at kernel: [] sys_ioctl+0x51= /0x73 Jul 11 03:02:53 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 11 03:02:53 orion.i.zmi.at kernel: [<00007fc76ba0bb77>] 0x7fc76ba0bb77 I also found this one: Jul 12 00:01:29 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 12 00:01:29 orion.i.zmi.at kernel: 00000000: 49 4e 81 ff 02 02 00 00 00= 00 03 e8 00 00 00 64 IN.............d Jul 12 00:01:29 orion.i.zmi.at kernel: Filesystem "dm-0": XFS internal erro= r xfs_iformat_extents(1) at line 565 of file fs/xfs/xfs_inode.c. Caller 0x= ffffffffa033b153 Jul 12 00:01:29 orion.i.zmi.at kernel: Pid: 9592, comm: find Tainted: G = 2.6.27.23-0.1-xen #1 Jul 12 00:01:29 orion.i.zmi.at kernel: Jul 12 00:01:29 orion.i.zmi.at kernel: Call Trace: Jul 12 00:01:29 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 12 00:01:29 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_lookup+0x7= 9/0xa5 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_vn_lookup+= 0x3c/0x78 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] real_lookup+0x= 7e/0x10f Jul 12 00:01:29 orion.i.zmi.at kernel: [] do_lookup+0x63= /0xb6 Jul 12 00:01:29 orion.i.zmi.at kernel: [] __link_path_wa= lk+0x9f4/0xe58 Jul 12 00:01:29 orion.i.zmi.at kernel: [] path_walk+0x5e= /0xb9 Jul 12 00:01:29 orion.i.zmi.at kernel: [] do_path_lookup= +0x162/0x1b9 Jul 12 00:01:29 orion.i.zmi.at kernel: [] user_path_at+0= x48/0x79 Jul 12 00:01:29 orion.i.zmi.at kernel: [] vfs_lstat_fd+0= x15/0x41 Jul 12 00:01:29 orion.i.zmi.at kernel: [] sys_newfstatat= +0x22/0x43 Jul 12 00:01:29 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 12 00:01:29 orion.i.zmi.at kernel: [<00007fdc209084ce>] 0x7fdc209084ce mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From al-john@hotmail.com Mon Jul 13 00:54:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6D5sSxA027696 for ; Mon, 13 Jul 2009 00:54:28 -0500 X-ASG-Debug-ID: 1247464505-023503a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from snt0-omc4-s11.snt0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7BD6735C2C6 for ; Sun, 12 Jul 2009 22:55:05 -0700 (PDT) Received: from snt0-omc4-s11.snt0.hotmail.com (snt0-omc4-s11.snt0.hotmail.com [65.55.90.214]) by cuda.sgi.com with ESMTP id Bs37go3k3KHiB7cA for ; Sun, 12 Jul 2009 22:55:05 -0700 (PDT) Received: from SNT109-W23 ([65.55.90.200]) by snt0-omc4-s11.snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Sun, 12 Jul 2009 22:55:05 -0700 Message-ID: Content-Type: multipart/alternative; boundary="_8110f1a9-3c11-4a17-be20-10aa037480ac_" X-Originating-IP: [72.163.255.118] From: crow al To: X-ASG-Orig-Subj: How to simulate journal corruption Subject: How to simulate journal corruption Date: Mon, 13 Jul 2009 13:55:05 +0800 Importance: Normal MIME-Version: 1.0 X-OriginalArrivalTime: 13 Jul 2009 05:55:05.0277 (UTC) FILETIME=[785046D0:01CA037E] X-Barracuda-Connect: snt0-omc4-s11.snt0.hotmail.com[65.55.90.214] X-Barracuda-Start-Time: 1247464506 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2063 1.0000 -0.7946 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.79 X-Barracuda-Spam-Status: No, SCORE=-0.79 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3265 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --_8110f1a9-3c11-4a17-be20-10aa037480ac_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi=2C there I'm a QA engineer from Cisco. I'm working on a test case concerning XFS jou= rnal playback failure=2C which needs to manually inject error to XFS. I did some google work but get no luck. Then I think maybe XFA-QA could giv= e me some advice. That why I come to here. Is there anyone could tell me how to inject error into XFS or is there any = tool could be used? Wish for your response. Thanks & Regards. Lv Wentao. _________________________________________________________________ Drag n=92 drop=97Get easy photo sharing with Windows Live=99 Photos. http://www.microsoft.com/windows/windowslive/products/photos.aspx= --_8110f1a9-3c11-4a17-be20-10aa037480ac_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi=2C there

I'm a QA engineer from Cisco. I'm working on a test case= concerning XFS journal playback failure=2C which needs to manually inject = error to XFS.

I did some google work but get no luck. Then I think m= aybe XFA-QA could give me some advice. That why I come to here.

Is t= here anyone could tell me how to inject error into XFS or is there any tool= could be used?

Wish for your response.

Thanks &=3B Regard= s.
Lv Wentao.


What can you do with the new Windows Live? = Find out = --_8110f1a9-3c11-4a17-be20-10aa037480ac_-- From lreed@brightcove.com Mon Jul 13 01:11:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6D6Bijg029333 for ; Mon, 13 Jul 2009 01:11:45 -0500 X-ASG-Debug-ID: 1247465984-6ee701360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ey-out-2122.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CD362A45F78 for ; Sun, 12 Jul 2009 23:19:44 -0700 (PDT) Received: from ey-out-2122.google.com (ey-out-2122.google.com [74.125.78.25]) by cuda.sgi.com with ESMTP id VoAv8Dn9OJ8pv8wV for ; Sun, 12 Jul 2009 23:19:44 -0700 (PDT) Received: by ey-out-2122.google.com with SMTP id 22so431072eye.57 for ; Sun, 12 Jul 2009 23:12:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.19.212 with SMTP id n62mr1309303wen.66.1247465540135; Sun, 12 Jul 2009 23:12:20 -0700 (PDT) From: Lance Reed Date: Mon, 13 Jul 2009 02:12:00 -0400 Message-ID: <5770aa2a0907122312n18db5784x8b5c8f6743c75136@mail.gmail.com> X-ASG-Orig-Subj: XFS internal error XFS_WANT_CORRUPTED_GOTO error Subject: XFS internal error XFS_WANT_CORRUPTED_GOTO error To: xfs@oss.sgi.com, syseng Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ey-out-2122.google.com[74.125.78.25] X-Barracuda-Start-Time: 1247465985 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.12 X-Barracuda-Spam-Status: No, SCORE=-0.12 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE_7582B, BSF_SC0_SA085b, BSF_SC1_TG070 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE_7582B Custom Rule 7582B 1.00 BSF_SC1_TG070 Custom Rule TG070 0.40 BSF_SC0_SA085b Custom Rule SA085b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello, We currently have a problem with a running XFS file system. Specifically the XFS internal error XFS_WANT_CORRUPTED_GOTO errors showed up. The Filesystem is 4.6 TB (LVM) and was originally created and mounted on a 32 bit Linux system. Do to problems with earlier versions of XFS, the HEAD node was upgraded to a 64 bit system with the following attributes: CentOS release 5.3 (Final) 2.6.18-128.1.10.el5 x86_64 XFS: xfsdump-2.2.46-1.el5.centos xfsprogs-2.9.4-1.el5.centos kmod-xfs-0.4-2 lvm2-2.02.40-6.el5 Running NFS server with LINUX HA heartbeat-2.1.3-3.el5.centos heartbeat-pils-2.1.3-3.el5.centos heartbeat-stonith-2.1.3-3.el5.centos I am posting to see if there is any updated info on the process to recover form the XFS_WANT_CORRUPTED_GOT. Similar posts seem to indicate that there is a possibility that every file can wind up in lost+found if not careful when running a xfs_repair. I would like to confirm if there are any XFS prog updates or changes that might work better with the kernel version etc we are running. This system is in use but is also a testing ground for a production system so any updates on version issues etc. would be greatly appreciated. We have the following error in logs. Jul 11 04:01:36 qanfs2 kernel: svc: unknown version (0 for prog 100003 nfsd) Jul 11 04:04:12 qanfs2 kernel: XFS internal error XFS_WANT_CORRUPTED_GOTO at line 872 of file /home/buildsvn/rpmbuild/BUILD/xf s-kmod-0.4/_kmod_build_/xfs_ialloc.c. Caller 0xffffffff88503944 Jul 11 04:04:12 qanfs2 kernel: Jul 11 04:04:12 qanfs2 kernel: Call Trace: Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_dialloc+0xfe9/0x11ba Jul 11 04:04:12 qanfs2 kernel: [] __block_prepare_write+0x1b6/0x4a6 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_get_blocks+0x0/0xe Jul 11 04:04:12 qanfs2 kernel: [] __set_page_dirty_nobuffers+0xc6/0xd1 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_ialloc+0x51/0x47a Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_dir_ialloc+0x86/0x2c6 Jul 11 04:04:12 qanfs2 kernel: [] __down_write_nested+0x12/0x92 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_mkdir+0x2d9/0x5d7 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_attr_get+0xbf/0xd2 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_vn_mknod+0x1e1/0x3bb Jul 11 04:04:12 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_iunlock+0x57/0x79 Jul 11 04:04:12 qanfs2 kernel: [] iput+0x4b/0x84 Jul 11 04:04:12 qanfs2 kernel: [] d_alloc_anon+0x1c/0xf8 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_fs_get_dentry+0x38/0x59 Jul 11 04:04:12 qanfs2 kernel: [] :exportfs:find_exported_dentry+0x85/0x47b Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd_acceptable+0x0/0xd8 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:exp_get_by_name+0x5b/0x71 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:exp_find_key+0x89/0x9c Jul 11 04:04:12 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:12 qanfs2 kernel: [] vfs_mkdir+0xe1/0x150 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd_create+0x2c6/0x3ac Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd3_proc_mkdir+0xd9/0xea Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd_dispatch+0xd8/0x1d6 Jul 11 04:04:12 qanfs2 kernel: [] :sunrpc:svc_process+0x454/0x71b Jul 11 04:04:12 qanfs2 kernel: [] __down_read+0x12/0x92 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x1a5/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] child_rip+0xa/0x11 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] child_rip+0x0/0x11 Jul 11 04:04:12 qanfs2 kernel: Jul 11 04:04:12 qanfs2 kernel: nfsd: non-standard errno: -117 Jul 11 04:04:14 qanfs2 kernel: Filesystem "dm-5": XFS internal error xfs_trans_cancel at line 1138 of file /home/buildsvn/rpmb uild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. Caller 0xffffffff8851ab40 Jul 11 04:04:14 qanfs2 kernel: Jul 11 04:04:14 qanfs2 kernel: Call Trace: Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_trans_cancel+0x5b/0xfe Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_create+0x55c/0x5a5 Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_vn_mknod+0x1b6/0x3bb Jul 11 04:04:14 qanfs2 kernel: [] ifind_fast+0x47/0x83 Jul 11 04:04:14 qanfs2 kernel: [] __down_read+0x12/0x92 Jul 11 04:04:14 qanfs2 kernel: [] iget_locked+0x59/0x149 Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_iget+0x682/0x6d2 Jul 11 04:04:14 qanfs2 kernel: [] enqueue_task+0x41/0x56 Jul 11 04:04:14 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_iunlock+0x57/0x79 Jul 11 04:04:14 qanfs2 kernel: [] iput+0x4b/0x84 Jul 11 04:04:14 qanfs2 kernel: [] d_alloc_anon+0x1c/0xf8 Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_fs_get_dentry+0x38/0x59 Jul 11 04:04:14 qanfs2 kernel: [] :exportfs:find_exported_dentry+0x85/0x47b Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd_acceptable+0x0/0xd8 Jul 11 04:04:14 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:14 qanfs2 kernel: [] vfs_create+0xe6/0x158 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd_create_v3+0x2c9/0x412 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd3_proc_create+0x12f/0x140 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd_dispatch+0xd8/0x1d6 Jul 11 04:04:14 qanfs2 kernel: [] :sunrpc:svc_process+0x454/0x71b Jul 11 04:04:14 qanfs2 kernel: [] __down_read+0x12/0x92 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x1a5/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] child_rip+0xa/0x11 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] child_rip+0x0/0x11 Jul 11 04:04:15 qanfs2 kernel: Jul 11 04:04:15 qanfs2 kernel: xfs_force_shutdown(dm-5,0x8) called from line 1139 of file /home/buildsvn/rpmbuild/BUILD/xfs-km od-0.4/_kmod_build_/xfs_trans.c. Return address = 0xffffffff88512941 Jul 11 04:04:15 qanfs2 kernel: Filesystem "dm-5": Corruption of in-memory data detected. Shutting down filesystem: dm-5 Jul 11 04:04:15 qanfs2 kernel: Please umount the filesystem, and rectify the problem(s) Jul 11 04:04:15 qanfs2 kernel: nfsd: non-standard errno: -117 Jul 11 04:05:09 qanfs2 mountd[869]: couldn't open /var/lib/nfs/etab Jul 11 04:06:36 qanfs2 kernel: svc: unknown version (0 for prog 100003 nfsd) The closest post I could find on the problem was: http://www.opensubscriber.com/message/xfs@oss.sgi.com/8729803.html I don't think I am hitting the directory corruption in Linux 2.6.17 since the kernel version is 2.6.18-128.1.10.el5, but maybe there is something else? The course of action I plan to take with confirmation is from the above post: > > > To be on the safe side, either make an entire copy of your drive to > > > another device, or run "xfs_metadump -o /dev/sda1" to capture > > > a metadata (no file data) of your filesystem. > > > > > > Then run xfs_repair (mount/unmount maybe required if the log is dirty). I can't make a copy of the data since it is 4+TB. Can someone give me an idea on the size of the file output from the xfs_metadump command? Also, If everything does wind up in lost+found after running xfs_repair, is there an efficient way to put the files back in there correct locations if the Filesystem can repaired? We did have a split brain problem earlier in the week with heartbeat, however, mounting of the disk after restart did not show any problems at the time. Thanks very much in advance for any assistance to correct this problem. Thanks, Lance From martin.geng@mlinkingbiz.com Mon Jul 13 03:45:10 2009 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6D8j9r5036498 for ; Mon, 13 Jul 2009 03:45:10 -0500 X-ASG-Debug-ID: 1247474746-1a7b036f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mlinkingbiz.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 04CFF35C7BE for ; Mon, 13 Jul 2009 01:45:46 -0700 (PDT) Received: from mlinkingbiz.com ([98.142.211.36]) by cuda.sgi.com with ESMTP id zik3WSM5GM5F2Cpd for ; Mon, 13 Jul 2009 01:45:46 -0700 (PDT) Received: (qmail 30412 invoked by uid 0); 13 Jul 2009 08:45:09 -0000 Received: from unknown (HELO MartinThinkpad) (martin.geng@mlinkingbiz.com@218.104.206.238) by 98.142.211.36 with ESMTPA; 13 Jul 2009 08:44:35 -0000 Reply-To: From: "Martin Geng" To: "Martin Geng" X-ASG-Orig-Subj: Continuous Application of Behavior-Based Safety 2009 -- **Last Reminder to Register- 5 Seats Left** Subject: Continuous Application of Behavior-Based Safety 2009 -- **Last Reminder to Register- 5 Seats Left** Date: Mon, 13 Jul 2009 16:22:43 +0800 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_004A_01CA03D9.306B10B0" X-Priority: 1 (Highest) X-MSMail-Priority: High X-Mailer: Microsoft Office Outlook 11 Importance: High Thread-Index: AcmYniM5ITtl3wkmSleWT6BYeiSLkQByKvHAACTI3/AAD6HGwAA1HpZgAFI3YEAAOY6egACdkifAAEzCW4AAS7rn8ACPljRQAI7CVRAAFm8iEAAAGffAACDE6IAAmacpkAAAubzQAAluFbAANR2ZkAAAOf5QACgslbAAABp98AAADYfAAC9yufAAABAaEAA/HZFAAAApKcAAhuoCQAAAMWVQADboBtAAADHbcAAADMDQADAo7JAAAHVrcAAAPPBAADp0Z3AAABYGcAAAHE+wAAA1Z2AAAnDMkAAAVc7QABCCuugBBEdngABkhU9ABxl4hjAAAcql0AIrbJfwACWzY2ABLT3kgAA9zh0wAC4I1FAALlkf0AGnTrygAABKbGAAVyX9IAAqSvrAAABsoRAALvWTEAA0UYLAAD2hIVAAjJfa0ADHvGoAAKTyGtAAKQxEMAA2gnfgAABzzpAAAEgowAAuAtvgAABKjlAAAHfqAAA6R5/QARt8bgAAykwuUAAMxMpQ X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 Disposition-Notification-To: "Martin Geng" X-Barracuda-Connect: UNKNOWN[98.142.211.36] X-Barracuda-Start-Time: 1247474747 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_004A_01CA03D9.306B10B0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_004B_01CA03D9.306B10B0" ------=_NextPart_001_004B_01CA03D9.306B10B0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This is your last chance to register for Continuous Application of Behavior-Based Safety 2009 . We have only 5 seats left; therefore, do not miss this opportunity to register! Continuous Application of Behavior-Based Safety 2009 Preventing irritating injuries and improving productivity in safe working environments in a world with changes and challenges 30th & 31st July 2009 Shanghai China Hello, How are you? MARTIN LINKING is convening the Continuous Application of Behavior-Based Safety 2009 conference in Shanghai on 30th & 31st July 2009. This event will offer effective tools and strategies to optimize the safety management in organization. It will also provide you better solutions on improving the safety observation, risk assessment, and building safety culture. It will coach the leadership role in safety management, as well as implementing Lean method into BBS to achieve injury-free production. Attend this informative event and gain practical insights into: !$ Ensuring safety program by coaching vertical leadership management !$ Implementing communication strategies to achieve a total safety culture !$ Conducting effective risk analysis and safe audit with BBS management !$ Customizing efficient observation checklist for risk assessment !$ Involving employees' ownership in the planning for safety management !$ Optimizing effective System to guarantee the steady foundation of EHS Management !$ Utilizing new technologies to support BBS management in hazardous environment !$ Reinforcing safety performance with an effective reward !$ Applying lean thinking to BBS management with which to fit your business !$ Managing safety through Managing Subcontractors !$ Exploring critical role of safety intervention in leadership Some of the eminent speakers we are inviting include: !$ Andy Zou Business Director DuPont Safety Resources of Greater China !$ Patrick Cao GM Beckwell Management Consulting Shanghai !$ Yuegang Xue HSE Manager Sinochem Corporation !$ Biqin Liu EHS Manager Dow Chemical (Zhangjiagang) Co., Ltd. !$ Helen Song EHS Manager Cytec Surface Specialties (Shanghai) Co., Ltd. !$ Alan Xue EHS Manager China A.O. SMITH Electrical Products Company !$ Camel Guo EHS Supervisor Alcoa Electrical and Electronic Solution(Shanghai)Co., Ltd !$ Rubin Luo EHS Manager Michelin SWT !$ Changyuan Li HSSE GM Shell !$ Robert Zhao HPU China EHS Manager Huntsman Polyurethanes (China) Ltd. Two days conference fee is USD 995. Please find an agenda in both English and Chinese attached with this email and feel free to contact me for more information. To register the very limited 10% off seats, simply fill out the registration form, attention it to Martin Geng and fax it to + 86 28 6552 1233. If you don't want to receive any further email from us, please reply this email to unsubscribe with correct email address. Best Regards, Martin Geng __________________________________________ Martin Linking Business Consulting Company Limited Room 808A, Times Plaza, No.2 Zongfu Road, Chengdu, Sichuan 610016, China T: +86 28 65521255 F: +86 28 65521233 E: martin.geng@martinlinking.net www.martinlinking.com We are dedicated to offer our clients cutting edge information they can use immediately. Upcoming Martin Linking events: Title : Best Practice in Integrated Talent Management 2009 Date : 29&30 October, 2009 Location : Shanghai, China Link : http://www.martinlinking.com/documents/ws/tm_ws.pdf Title : Successful Project Management Date : 27&28 August 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/pm_ws.pdf Title : Best Practices for Sustainable Corporate Social Responsibility 2009 Date : 20th & 21st August 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/csr_ws.pdf Title : Total Productive Maintenance (TPM) Best Practice 2009 Date : 30th & 31st July 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/tpm_ws.pdf This message and any attachment is intended only for the use of the Addressee and may contain information that is PRIVILEGED. If you are not the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please erase all copies of the message and its attachments and notify us immediately. Thank You. Security Warning: Please note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and observe this lack of security when e-mailing us. Viruses: Although we have taken steps to ensure that this e-mail and attachments are free from any virus, we advise that in keeping with good computing practice the recipient should ensure they are actually virus free. ------=_NextPart_001_004B_01CA03D9.306B10B0 Content-Type: text/html; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable
 
This = is your=20 last chance to register for Continuous Application of = Behavior-Based=20 Safety 2009=20 . We=20 have only 5 seats = left;=20 therefore, do not miss this opportunity to = register! 
 

 Continuous Application of Behavior-Based = Safety=20 2009

Preventing irritating injuries and improving = productivity in safe=20 working environments in a world with changes and = challenges 

30th & 31st July=20 2009

Shanghai China 

 <= /SPAN>

Hello,

How are = you?=20

 

MARTIN=20 LINKING is = convening the=20 Continuous Application of Behavior-Based Safety = 2009=20 conference = in=20 Shanghai on 30th & 31st July 2009. This event will offer effective = tools and=20 strategies to optimize the safety management in organization. It will = also=20 provide you better solutions on improving the safety observation, risk=20 assessment, and building safety culture. It will coach the leadership = role in=20 safety management, as well as implementing Lean method into BBS to = achieve=20 injury-free production.

 

Attend this = informative=20 event and gain practical insights into:  

·        =20 Ensuring = safety program=20 by coaching vertical leadership management

·        =20 Implementing=20 communication strategies to achieve a total safety culture

·        =20 Conducting = effective=20 risk analysis and safe audit with BBS management

·        =20 Customizing = efficient=20 observation checklist for risk assessment

·        =20 Involving = employees’=20 ownership in the planning for safety management

·        =20 Optimizing = effective=20 System to guarantee the steady foundation of EHS Management

·        =20 Utilizing new = technologies to support BBS management in hazardous = environment

·        =20 Reinforcing = safety=20 performance with an effective reward

·        =20 Applying lean = thinking=20 to BBS management with which to fit your business

·        =20 Managing = safety through=20 Managing Subcontractors

·        =20 Exploring = critical role=20 of safety intervention in = leadership

Some of the eminent speakers we are inviting=20 include: 

·        =20 Andy Zou   Business Director  DuPont Safety = Resources of=20 Greater China

·        =20 Patrick = Cao  GM =20 Beckwell Management Consulting = Shanghai

·        =20 Yuegang = Xue  HSE Manager  Sinochem=20 Corporation

·        =20 Biqin = Liu  EHS Manager  Dow Chemical = (Zhangjiagang) Co.,=20 Ltd.

·        =20 Helen = Song  EHS Manager  Cytec Surface = Specialties=20 (Shanghai) Co., Ltd.

·        =20 Alan Xue  EHS Manager China  A.O. SMITH Electrical = Products=20 Company

·        =20 Camel = Guo  EHS Supervisor  Alcoa Electrical and = Electronic=20 Solution(Shanghai)Co., Ltd

·        =20 Rubin = Luo  EHS Manager  Michelin = SWT

·        =20 Changyuan = Li  HSSE GM  = Shell

·        =20 Robert = Zhao  HPU China EHS Manager  Huntsman Polyurethanes = (China)=20 Ltd.  

Two days = conference=20 fee is USD 995.

 

Please find = an agenda=20 in both English and Chinese attached with this email and feel free to = contact me=20 for more information.

 

To register = the very=20 limited 10% = off seats, simply fill out the registration = form, attention it to Martin Geng and fax it to + = 86 28 6552=20 1233. 

 

If you don't = want to=20 receive any further email from us, please reply this email=20 to unsubscribe with correct email = address.  

 

Best=20 Regards, 

Martin=20 Geng

__________________________________________

Martin=20 Linking = Business Consulting=20 Company=20 Limited

Room 808A, = Times=20 Plaza, = No.2 Zongfu Road, = Chengdu,

Sichuan 610016, = China

 

T: +86 28=20 65521255

F: +86 28=20 65521233

E:=20 martin.geng@martinlinking.net

www.martinlinking.com

We are = dedicated to=20 offer our clients cutting edge information they can use=20 immediately.

 

Upcoming=20 Martin Linking events:    

Title        Best Practice = in Integrated=20 Talent Management 2009
Date      :  29&30 October,=20 2009

Location : Shanghai, = China
Link      =20 :  http://www.m= artinlinking.com/documents/ws/tm_ws.pdf 

  

Title    =  =20 : Successful Project=20 Management
Date     :  27&28 = August=20 2009
Location: Shanghai, China

Link     :
  http://www.m= artinlinking.com/documents/ws/pm_ws.pdf

 

Title     =20 : Best Practices for Sustainable = Corporate=20 Social Responsibility 2009

Date     : =20 20th & 21st August 2009

Location: Shanghai, = China

Link      :=20 http://www.= martinlinking.com/documents/ws/csr_ws.pdf

 

Title     =20 : Total Productive Maintenance = (TPM) Best=20 Practice 2009

Date     : =20 30th & 31st July 2009

Location: Shanghai, = China

Link      :=20 http://www.= martinlinking.com/documents/ws/tpm_ws.pdf 

 

This = message and=20 any attachment is intended only for the use of the Addressee and may = contain=20 information that is PRIVILEGED. If you are not the intended recipient, = you are=20 hereby notified that any dissemination of this communication is = strictly=20 prohibited. If you have received this communication in error, please = erase all=20 copies of the message and its attachments and notify us immediately. = Thank You.=20 Security Warning: Please note that this e-mail has been created in the = knowledge=20 that Internet e-mail is not a 100% secure communications medium. We = advise that=20 you understand and observe this lack of security when e-mailing us. = Viruses:=20 Although we have taken steps to ensure that this e-mail and attachments = are free=20 from any virus, we advise that in keeping with good computing practice = the=20 recipient should ensure they are actually virus free. =

------=_NextPart_001_004B_01CA03D9.306B10B0-- ------=_NextPart_000_004A_01CA03D9.306B10B0 Content-Type: application/pdf; name="Continuous Application of Behavior-Based Safety 2009.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Continuous Application of Behavior-Based Safety 2009.pdf" JVBERi0xLjYNJeLjz9MNCjIwNDcgMCBvYmoNPDwvTGluZWFyaXplZCAxL0wgNjU2MTgzL08gMjA0 OS9FIDUzMjQ3L04gNy9UIDYxNTE5NC9IIFsgMTA1NiA2NDddPj4NZW5kb2JqDSAgICAgICAgICAg DQp4cmVmDQoyMDQ3IDM4DQowMDAwMDAwMDE2IDAwMDAwIG4NCjAwMDAwMDE3MDMgMDAwMDAgbg0K MDAwMDAwMTgzOCAwMDAwMCBuDQowMDAwMDAyMzExIDAwMDAwIG4NCjAwMDAwMDI3OTkgMDAwMDAg bg0KMDAwMDAwMzI0MCAwMDAwMCBuDQowMDAwMDAzMzc2IDAwMDAwIG4NCjAwMDAwMDM0MTUgMDAw MDAgbg0KMDAwMDAwMzQ2NiAwMDAwMCBuDQowMDAwMDAzNTE3IDAwMDAwIG4NCjAwMDAwMDM3NDcg MDAwMDAgbg0KMDAwMDAwMzgyNiAwMDAwMCBuDQowMDAwMDA0MDUwIDAwMDAwIG4NCjAwMDAwMDQ5 MTcgMDAwMDAgbg0KMDAwMDAwNTA1NCAwMDAwMCBuDQowMDAwMDA1OTEyIDAwMDAwIG4NCjAwMDAw MDY1OTAgMDAwMDAgbg0KMDAwMDAwNzM0NiAwMDAwMCBuDQowMDAwMDA4Mjc5IDAwMDAwIG4NCjAw MDAwMDkxNTcgMDAwMDAgbg0KMDAwMDAxMDAwMSAwMDAwMCBuDQowMDAwMDE5NzA1IDAwMDAwIG4N CjAwMDAwMjQ4NzcgMDAwMDAgbg0KMDAwMDAyNzg3MyAwMDAwMCBuDQowMDAwMDMyMzgyIDAwMDAw IG4NCjAwMDAwMzQzNDUgMDAwMDAgbg0KMDAwMDAzNTA0NSAwMDAwMCBuDQowMDAwMDM3NzQwIDAw MDAwIG4NCjAwMDAwMzg1OTUgMDAwMDAgbg0KMDAwMDAzOTM5NSAwMDAwMCBuDQowMDAwMDQ3OTU1 IDAwMDAwIG4NCjAwMDAwNDgyMDYgMDAwMDAgbg0KMDAwMDA0ODQxMyAwMDAwMCBuDQowMDAwMDUy MjI3IDAwMDAwIG4NCjAwMDAwNTI0NjEgMDAwMDAgbg0KMDAwMDA1MjY3MSAwMDAwMCBuDQowMDAw MDUyOTU4IDAwMDAwIG4NCjAwMDAwMDEwNTYgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMDg1 L1ByZXYgNjE1MTgxL1Jvb3QgMjA0OCAwIFIvSW5mbyAyMDQ2IDAgUi9JRFs8N0I2QTVCMjQ1NTYw MUE0RUFFMDZCRjdDM0VBMjlERUE+PDM1MDNBRENCOTA3Q0RFNDA5Q0IxMUNENUU2QTU1NDgyPl0+ Pg0Kc3RhcnR4cmVmDQowDQolJUVPRg0KICAgIA0KMjA4NCAwIG9iag08PC9MZW5ndGggNTUxL0Mg NjE5L0ZpbHRlci9GbGF0ZURlY29kZS9JIDY0My9PIDYwMy9TIDM0MT4+c3RyZWFtDQp42mJgYGBn YGBZzsDKwKDPyiDAgAACDGxAORYGjodnlqowzDzD6MggLLCEmY2B4fSkxG+yy4wcGLABDhmnsvWi azKWBm9J6bHMe+h09WSwStLe5nSfmS18Ki4a/PdtmzwOT3snohsz1chN+wYLl4RHodDSk+1yjkau XNMMUi5ubveXd5RSCWtk7phpVsv1JSdoc6bMI+8bqj4TL6ulSYPNvLjIdW3YYqlE5k7BZj7v7Wvv 7O+UMwrkMYw7tDWqL3pHwNaikJPKrhwqFj07N78wALmLsby8ogMIwGyz9A4oaADxxZHYTO7l5RAu xD8ioRUdCABWwqichhAD8RtQQwcoFMrAdEINSCsDcSbYHHUGQYabDAUORg5soFA2YJBg2M8gwqDn kN7ApiA5g/MP6yzmOsbFDSdddig6XIjJcL3Bz8E0ldWA4QxDvJLIBLYFTAtk6xgOM4Q22DHIO/Ac YI2++YNxGeMzzgAGUQbuBtYFzALMFoxuDCcZIpjtG6QYuBrYOtgNrsxiuMwQ3FrhqviAfQHTB8Ye hm0McQzPGUQdrBNYD7B5sFxm9WOIZzBoEG+QTpAw4HrBPIXhC1CFboOoA98Cpg2sAcwRKlcYYhgM G8QdeBRYDzCtYMxhOMaQyLC+weqAUALIULYA5nWMmUBTMMBsBrbgKUBakIGBVRtIr2Fgi9gPTHEB DEw/loHCmoF9qQ+Q/4+BM/4wKCCB+DBAgAEAA8azKA0KZW5kc3RyZWFtDWVuZG9iag0yMDQ4IDAg b2JqDTw8L01hcmtJbmZvPDwvTWFya2VkIGZhbHNlPj4vT3V0bGluZXMgMTU1IDAgUi9NZXRhZGF0 YSAyMDQ1IDAgUi9QYWdlcyAyMDQ0IDAgUi9TdHJ1Y3RUcmVlUm9vdCAxNzIgMCBSL1R5cGUvQ2F0 YWxvZz4+DWVuZG9iag0yMDQ5IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJdL1BhcmVu dCAyMDQ0IDAgUi9TdHJ1Y3RQYXJlbnRzIDAvQ29udGVudHNbMjA1OSAwIFIgMjA2MSAwIFIgMjA2 MiAwIFIgMjA2MyAwIFIgMjA2NCAwIFIgMjA2NSAwIFIgMjA2NiAwIFIgMjA3MiAwIFJdL1JvdGF0 ZSAwL01lZGlhQm94WzAgMCA1OTUuMjIgODQyXS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDIw NjggMCBSL0ltMSAyMDY3IDAgUi9JbTIgMjA2OSAwIFIvSW0zIDIwNzAgMCBSL0ltNCAyMDcxIDAg Uj4+L0NvbG9yU3BhY2U8PC9DUzAgMjA1MyAwIFIvQ1MxIDIwNTQgMCBSL0NTMiAyMDU1IDAgUj4+ L0ZvbnQ8PC9UVDAgMjA1MCAwIFIvVFQxIDIwNTEgMCBSL0MyXzAgMjA1MiAwIFIvQzJfMSAyMDYw IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQy9JbWFnZUldL0V4dEdTdGF0ZTw8L0dTMCAy MDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2JqDTIwNTAgMCBvYmoNPDwvU3VidHlwZS9UcnVl VHlwZS9Gb250RGVzY3JpcHRvciAyMDU4IDAgUi9MYXN0Q2hhciAxNDgvV2lkdGhzWzI3OCAwIDAg MCAwIDAgMCAxOTEgMCAwIDAgMCAyNzggMCAyNzggMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCA2NjcgNjY3IDcyMiA3MjIgNjY3IDAgNzc4IDcyMiAyNzggMCAwIDU1NiA4MzMg NzIyIDAgNjY3IDAgNzIyIDY2NyA2MTEgNzIyIDAgOTQ0IDAgNjY3IDAgMCAwIDAgMCAwIDAgNTU2 IDU1NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMjIyIDUwMCAyMjIgODMzIDU1NiA1NTYg NTU2IDU1NiAzMzMgNTAwIDI3OCA1NTYgNTAwIDcyMiA1MDAgNTAwIDUwMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjIyIDMzMyAzMzNdL0Jhc2VGb250L0Fy aWFsTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1l bmRvYmoNMjA1MSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDIwNTYg MCBSL0xhc3RDaGFyIDEyMi9XaWR0aHNbMjc4IDAgMCAwIDAgMCA3MjIgMCAwIDAgMCA1ODQgMjc4 IDMzMyAyNzggMCA1NTYgNTU2IDU1NiA1NTYgMCA1NTYgNTU2IDAgNTU2IDU1NiAzMzMgMCAwIDAg MCAwIDAgNzIyIDcyMiA3MjIgMCA2NjcgMCAwIDAgMjc4IDU1NiAwIDAgODMzIDAgNzc4IDY2NyAw IDcyMiA2NjcgMCA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA2MTEgNTU2IDYxMSA1NTYg MzMzIDYxMSA2MTEgMjc4IDI3OCA1NTYgMjc4IDg4OSA2MTEgNjExIDYxMSAwIDM4OSA1NTYgMzMz IDYxMSA1NTYgNzc4IDU1NiA1NTYgNTAwXS9CYXNlRm9udC9BcmlhbC1Cb2xkTVQvRmlyc3RDaGFy IDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMjA1MiAwIG9i ag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1syMDc4IDAgUl0vQmFzZUZvbnQvS05E RUlLK0NhbGlicmkvVG9Vbmljb2RlIDIwODIgMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9G b250Pj4NZW5kb2JqDTIwNTMgMCBvYmoNWy9JQ0NCYXNlZCAyMDczIDAgUl0NZW5kb2JqDTIwNTQg MCBvYmoNWy9JbmRleGVkIDIwNTMgMCBSIDI1NSAyMDc0IDAgUl0NZW5kb2JqDTIwNTUgMCBvYmoN Wy9JbmRleGVkIDIwNTMgMCBSIDI1NSAyMDc1IDAgUl0NZW5kb2JqDTIwNTYgMCBvYmoNPDwvU3Rl bVYgMTM4L0ZvbnROYW1lL0FyaWFsLUJvbGRNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udFdlaWdo dCA3MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02MjggLTM3NiAyMDAwIDEwMTBd L0FzY2VudCA5MDUvRm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0IDcxOC9YSGVpZ2h0IDUxNS9U eXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMjA1NyAwIG9iag08PC9P UE0gMS9PUCBmYWxzZS9vcCBmYWxzZS9UeXBlL0V4dEdTdGF0ZS9TQSBmYWxzZS9TTSAwLjAyPj4N ZW5kb2JqDTIwNTggMCBvYmoNPDwvU3RlbVYgODgvRm9udE5hbWUvQXJpYWxNVC9Gb250U3RyZXRj aC9Ob3JtYWwvRm9udFdlaWdodCA0MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02 NjUgLTMyNSAyMDAwIDEwMDZdL0FzY2VudCA5MDUvRm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0 IDcxOC9YSGVpZ2h0IDUxNS9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRv YmoNMjA1OSAwIG9iag08PC9MZW5ndGggNzk1L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpI iYxU32vjMAx+z1+hx2QQ13Ycx4ExuLbj2MFgxwL3cIwjpGnrXZt0SX+w//4kJ2nX6wYlL4r9SZY+ fdI480ZPcHs7epw8TIHD3d14OgFv9P2Zw6L1RhP5h4OAbO4JzmIE4F9nmIgzzXkE2dq75WjcZa/e /SM5nwKKISCHUDBlNGTTr9FyQGc3X4Oia0DqGlB8DUhfA0quAZkvQfeZ94YMGSUhTmPGJYRGCYZs NaX36waq/lqw1DhED8A/AuD9aIL9KlrAlkQpdYnJJAZoiwodEy5YYobQQuEl+c29n/iNzwSgjuWO suzUeHTrO4+WZkKCkQlTsuu+D8FnLTiSImDxUUiUmzaQFXAuqS6uwLr7uL8dS44pfTJfsh+Xbx25 pUSz2YlfLEMMz+JZQs+GaAqFhweQkkikFDoLqxIGDBIW6764SV1tbbWrdy1822xWtsi3tq6gnsO4 XOZ7WzfhOG/LGTzn83L77rjgFNtJPooNSd6XnKef05ReMh66XB1FnEVGulSFPrbBWV2qiTJMDKk+ NeW+pGwXYJvGbvPOrF53jS1byKsZ2PWmoTS6J+LhCYxETyQsiToC/XpPvpumnu2Krd1brMxW0GKN cKibv3TpKu1ZPWCxzhtrFrGLUFZ729TVGjNqyTcnx9UMDvaUgOuHYwv7niSif3y7hGKZV4s+abRX q9L9fkZheloyZ0KTiilu5KXSOOgUVciFPi6v/+dxGCjhPjdIEaoiMqBjTtMkTcqkBhXjVuumSUW4 4TRoegLHLMZpU6Akdcndjx6qla3K52W+KU/r5bhy3zCAYRoDqJQJN6aonTBSw5hfswfePIEZobrT NFWdrlMWRfinI1AYErWClSaYpWGGky2gWGNuaw7TGveBI+ByMcT8jOTjVHVtVJ2OhKQFf4BkGCpn RNxQJdpgvqafbJ9mJwiF9veBUL4NQuPXuyZfwTgne5gnsreIi/x3wpEeg/Cj04x+UReFO19vnHcV CN86XxSM8Q9BKDnBBQkrh0DE/ZlDvwdS4goLE7+eUxDkEjVvK8Qrf+FOgheAfwIMANOwo2QNCmVu ZHN0cmVhbQ1lbmRvYmoNMjA2MCAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250 c1syMDgxIDAgUl0vQmFzZUZvbnQvS05ERU9LK1N5bWJvbE1UL1RvVW5pY29kZSAyMDgzIDAgUi9F bmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag0yMDYxIDAgb2JqDTw8L0xlbmd0 aCA3ODYvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCkiJlFTfb5swEH7nr7inCabh2gYMTFWl Ne1DK3WaFN6maXKBBKoAFTit+t/vzg5JmqYPExI+/7q777vvDADFvccZ5zyD4hU4hIKJBIob77e/ GSYTBqHyTSD9tiOrhrZ/CsLM3wbCH9uazCkIhQ+6r6ClaY87ZVvZ07TTGzInRnsQ/MFwtw8L8C5+ weXlxcPi7gYSAVdX1ze4yFmUi/Qokcxl8qB7dBX7bwH+gDw91o3GJeW/0JINPGwp0Kg38Kgnm1kF k6ZxZWeYh4h2Lhya543d6BBe3Vug2ibbUt5DP8HoAG43dhmx29jVqDvtPEoXujyAC2cySyBLyAOa NHJoxrralseBLEHOe+qbxhHdWzjdYz3a5WEFmyDM/QHpncgwoWlp7GrQNCL/dK5rrbvBchGEEWX9 tMVSUQXy4wrcFt7FYsmhnEDYD6ay9yLJkHUVZUwpkDJmAhLF8hi58FbedfGucOm+cLD2LoqCvBQr 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 Z3RoIDk1NDcvRmlsdGVyL0RDVERlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZSAy MDUzIDAgUi9XaWR0aCA0NzgvSGVpZ2h0IDk3L1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/uAA5B ZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgXEhQUFBQSFxcbHB4c GxckJCcnJCQ1MzMzNTs7Ozs7Ozs7OzsBDQsLDQ4NEA4OEBQODw4UFBARERAUHRQUFRQUHSUaFxcX FxolICMeHh4jICgoJSUoKDIyMDIyOzs7Ozs7Ozs7O//AABEIAGEB3gMBIgACEQEDEQH/xAE/AAAB BQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAA AQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh 8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW 5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPB UtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk 9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/APVVnZ31g6RgOLMjIaLB zW2Xu+YbMfNF6u/Ir6ZkvxZN7a3FkczHbzXlJJcSSZJ1JPMqfl8AyWSapjyZOHYPe2fXzpDfoV3W a9mtA/FyC3/GBgz7sW0DxBaT+ULh0lbHKYvH7WL3pPo+B9cOj5tradz6LHwGi0AAk9twJC3F44ND I5XpP1V6v+0umNFjpyMeK7Z5P7rvmFW5jlxjAlHbqyY8nFoXaSSSVZlUoW2101ustcGMbq5zjAA+ JU1wX10607Ky/wBnUu/QY5/SR+dZ3/zVJixnJLhH1Wzlwi3dyPrv0Wlxaw2Xx+cxuh+bi1Vf/HA6 fuj7Nds8fbP3T/FcMkro5PH1ssHvSfQcf689FtcG2erRP5z2yB/mFxW7j5NGTU27HsbbW7h7TIXk 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 WigbQ1mgLf3T5LRSSOSRN3qoQjVU5GR9XMXIzxlWOPpta1ooAhvtEAT4eSWf0BuTl1ZVFzsV1bQw +mIMDjbBEeC10kvcl32FK4I9nF6h9XWZFONTjWeg2hxJJEk7ol0/vaKwehYpwLMQuc59oBfe73PL hqCSfDwWkklxyoC9lcEddN3Jwfq9i41VjbXOyLLGGsvd2aRBDRrClkdBx39NHT6XmlgcHF8SSR+9 xK1EkuOV3firgjVU51fQ8FmA/CgltgHqWH6ZI4M+XZZIxcS25/SOnFzi6Dm5jvcdrT9AH4rd6lXl W4VlWIQLngNDiYgEw4/ch9J6XV03G9Jh3WO1ss8T/cnCdAknW9B+1aYWQANO7YxcSjEqFVLYHcnU k+JKMkkoybZBopJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJfKqSSn6qSXyqkkp+qkl8qpJKfqp JfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy qkkp+qkl8qpJKfqpJfKqSSn6qTL5WSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlV JJT9VJL5VSSU/VSS+VUklP8A/9kKDQplbmRzdHJlYW0NZW5kb2JqDTIwNjggMCBvYmoNPDwvU3Vi dHlwZS9JbWFnZS9MZW5ndGggNTAxNS9GaWx0ZXIvRENURGVjb2RlL0JpdHNQZXJDb21wb25lbnQg OC9Db2xvclNwYWNlIDIwNTMgMCBSL1dpZHRoIDMwMi9IZWlnaHQgNjIvVHlwZS9YT2JqZWN0Pj5z dHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMT GBcSFBQUFBIXFxscHhwbFyQkJyckJDUzMzM1Ozs7Ozs7Ozs7OwENCwsNDg0QDg4QFA4PDhQUEBER EBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMgKCglJSgoMjIwMjI7Ozs7Ozs7Ozs7/8AAEQgAPgEuAwEi AAIRAQMRAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAA 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 4gR7v6vYBbySXHPtrfZHDHv+Lz/7I6kXdQlzD9oZsbc7Wx8DjT2tBKWRjdWswsRnoNArsrnGadIZ 3efiF0CSXHLS4/grhj3/ABcazD6r+068sNpsc6rYXunbVrLtg76Ktb0TPFf+DyLLMhz3biQ0McZl 0Aang+XC6JJISnpQ6dlGMep/FwMyjMxMi651lf601tbXN/nnECPSqbwBPfwWl0jCfg4TKHxuGpa3 UAnU6nUoT68MdYa/JtLshzf1SpzSGtAHu2n6JcfvWklInhA8r0+xMQLJUkkko16kkkklKSSSSUpJ JJJT/9kKDQplbmRzdHJlYW0NZW5kb2JqDTIwNjkgMCBvYmoNPDwvU3VidHlwZS9JbWFnZS9MZW5n dGggMjgzNy9GaWx0ZXIvRmxhdGVEZWNvZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2Ug MjA1NCAwIFIvV2lkdGggMTYwL0hlaWdodCA1MC9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0KaN7sV3dY W9cVP9dPNi51beq6M02ctmndZnQ5u03ajCZpY6cZTeO0GU7q7KRxE6eJE9dGQiCQkBAGxBIYiW2m 2ENm2ZhhZowBMwwYzB5iWAs9qee9J1kSwvma/pPva/l9fLz77jt679xzz+93ziVkDWtYwxrWsIY1 rGEN/784cviqOPLFe/fJgzfu+PFVsOPnr7lYqlsaTgidt5JIhTsig7kH0S35CryEVNakOa2jA1f5 tlAa7Aap2NfD5qH11NWx/m4XyzMAfS637WChXWCxQAn3oAugEi+ZALWEyPzYuVJoIH4NHZ86cLZT zc6a3GDt8fRvJ2/d1cH7jYtlP4DWZe3TsBJcuLIBzh9vCiaVAMeEJ/WZ9jkokZpcjVNx+uzKN7R4 bu/1FOeKI2Ru/lFPOS39dQApztvwZRhSJajsSEidhuVwZl5lhrpSgGLSA6YG/MlSFE4qZgDGM6ww fK6zlwZTd2d3h4yQAB3M5+dqco5nazS5GWkY91IP/97ZYvfIy/srW7Z+d7uPl6t73vvQJDQ/T6PR 5JRbgK7KwZGmIAFnUwFOJVZV2HEidhbm/XE6Yg6TINwMI5IFJiDG5iQR85mQ2UlpPtAxhCQCNNm/ rbBAGyF8bREmrrpK0ui2fjte2ECto+598bnn97325nsHj5BDu32cIaS2HUCTEo+NPM3NloxemVku 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 BplG0q3QkQ7lfH1XAla1LKgIgU48fOOIUZwiGAzJbY9KBZ1GB+lB9AyK2cUCmg4TlRZl60AdOni+ ch6S42EuupHrACqhS17RGpYIfbIOqIoAU/4wdOFRXexJD+ozzuZee7m8WhwaHZgZviwmQ2MDU6O6 AWMwXzc+PjmqG5oU8v1IF9sOkhPQ5DsHEclYGjogW2a9LIw5PzNI0woiFKDUpVeAfmraeJr4CbA0 x3FNTTZpgPIU6PcdhLhYmPJb6d9Tn+Ue9c33WaNmPJVqmf4RXwZZ9eyohRulRc4M+XdDXezAsLgF 8sW00a8aU2ECZCkwINfbEjJBF9C4VBhtWAqshvYwbalQoz/jexFK1OP9eGI5lbBoCdfCaZHJIsrj elY3vLSJd3VQD3JGJTCKTfg41sYCmMRj2rAfMxom5XCR5MEFkmwGpkUfhogEuOR7DnKF5lmsXWdE szA3jM+xc7UZkknkZTDhWakVGkk2NobLeSRiHk8damwp8iJhmtRCzSr698gfHr0KHnne3sxKVGEk SMU0cmJVOJGouZGcSHEUkhiG9M3IjCD82Hi+RKXwjVIF+R2LJqGJciLPUoniUQzDs44zdTY0Iwv7 E4Uax1FZGcxMSGY6EjpSFRSoiiJhaukXXQ3+d/BvAQYAcWaLywoNCmVuZHN0cmVhbQ1lbmRvYmoN MjA3MCAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA0MzUyL0ZpbHRlci9EQ1REZWNvZGUv Qml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgMjA1MyAwIFIvV2lkdGggMjQwL0hlaWdodCA1 MC9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0K/9j/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkM EQsKCxEVDwwMDxUYExMVExMYFxIUFBQUEhcXGxweHBsXJCQnJyQkNTMzMzU7Ozs7Ozs7Ozs7AQ0L Cw0ODRAODhAUDg8OFBQQEREQFB0UFBUUFB0lGhcXFxcaJSAjHh4eIyAoKCUlKCgyMjAyMjs7Ozs7 Ozs7Ozv/wAARCAAyAPADASIAAhEBAxEB/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoL AQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVB 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 AlbOP0XMopx6B1O91WNAaC2uXNaIa17g2XQPHnuq3Tfqvb07GOLT1G41OyHZLwWVSXPcbHidsgEl JVnu0cbqeX1Ho1/W+m1UnGrNhoqtL99ldRIJLmvAaXxppp3Wt0rI6d1LpFHVq91ePfULiHuI2iJd uPkh4/1YrxMTJwMPKtx8LJc93oNDTs9STYGOI3CZ+XZGd0Gn7M3AqtfT01uK/EdhMDdpa8bd26Nw LR4FJVnu129V6C5jnes4AbNkyPU9U7a/T/e3HhRd1n6vMqFrryB6/wBlc33bmXRPpvb2MJO+qbLO l43Trsy2wYTq7MW3awOY6oy06Nh3hqk/6o47ve3JsZe/NZ1C+0NZNljG7A0jbAEeCSrPdZnXPq69 wa3IMm/7MfpDbbyGu8J7LdrrbW3a3hYNn1RY9l7ftto+0Z46kTtr0sADdglv0SGhdCkhSS+VUklP 1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/V SS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU//2QoNCmVuZHN0cmVhbQ1l bmRvYmoNMjA3MSAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCAxODA0L0ZpbHRlci9GbGF0 ZURlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZSAyMDU1IDAgUi9XaWR0aCAxNTAv SGVpZ2h0IDU0L1R5cGUvWE9iamVjdD4+c3RyZWFtDQpo3uyY5V8bSxSGzySb3biRhAQpDsWhFGkp FCpoKXXq7u7u7u7urrfuct3d3d3+gzszK9nwS0LgA9wPvB+yMjszz55558xsAJrVrGb9zzWoZO1X PQ4M6TS/XbuJfwaZ5p1OjWpiop4Db3Sb3FeB5OpdnnPySBMy6Ten9UXe1PtwUVMN3IolNcinWl8d 1ARMa0ZOHID8auXMxmZK+iBMgerSnFaNylSyuS8KRMZGZErvsx8FpnZZjQa160JbFKj61Gc+M1jm BkLNC0OBa0o9GjYpsKwNYnrzQIt6QKHu9WjahqFsDYIa0wnVS78E3rSVhMrUEKjSF9HGbtOzhq3f w3faInl8Zeo3MxaqcTLf8nEa9Zs6J5cf4zY9OqLHgbetIVQNmbSpEJFdQs96LSL9FuxOgagUvBLf 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 faL7JONky3da31W3UdoK26H27PaZjviOkc7wzoFTK051d9l2tX1v9P2R02qnq87Inik5Szibf3bh XM652fOp56cvxF0Y647qfnBx1cXbPQE9/Ze8L1257H75Yq9T77krdldOX7W5euoa41rHdcvr7X0W fW0/WPzQ1m/Z337D6kbnTeubXQPLB84OOgxeuOV66/Jtr9vX76y8MzAUMnR3OHJ45C777uS9pHsv 72fcn3+w6SH6YeEjqUflj5Ue1/2o92PriOXImVHX0b4nQU8ejLHGnv+U/tOH8fyn5KflE6oTjZNm k6en3KduPlv9bPx56vP56YKfpX+ufqH74rtfHH/pm1k1M/6S/3Lh1+JX8q+OvF72unvWf/bxm+Q3 83OFb+XfHn3HeNf7Puz9xHzmB+yHio96H7s+eX96uJC8sPCbAAMA94Tz+woNCmVuZHN0cmVhbQ1l bmRvYmoNMjA3NCAwIG9iag08PC9MZW5ndGggNzgzL0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFt DQpo3gAAA//8AAAA////zAAAywAAyQAAxwAAzAEBzAICywMDywQEzQUFzgcHzQcHzQgIzgkJzgsL zwwMzQwMzw4O0BERzxERzBERzhMTzhQU0BUV0BcXzxgY0RkZ0h0d0R0d0h8f0yUl1Ccn0ygo1Coq 0iws1S0t1jAw1TAw1jMz1zU11zc31zk52Ds72UFB2kVF2UVF20dH20hI2kpK3E9P209P3FFR3VNT 3VVV3VZW3lhY3ltb4Wlp4mxs43Bw43Jy43V15Hd35Hh45X195YCA5oOD54WF6IqK54qK6I2N6Y+P 546O6ZGR6ZKS6peX65mZ65qa652d7J+f7KCg7aOj7aSk7qen7aen762t766u8LGx77Gx8LOz8LS0 8bm58bu78r+/8sHB88PD9MXF88TE9MfH9MjI9MvL9c3N9tHR9tXV99jY+Nra+d7e+N3d+eHh+uPj +ePj+uXl+eTk+ufn++np++rq/O7u++7u/PHx/fPz/fT0/vf3/ff3/vn5/fn5/vv7//39/v7+/f39 +vr6+fn59vb29PT08/Pz8PDw7u7u7e3t6+vr6enp5ubm5eXl4+Pj4eHh39/f3Nzc29vb2dnZ19fX 1dXV09PT0dHRzs7Ozc3NysrKycnJx8fHxMTEw8PDwcHBv7+/vb29u7u7ubm5t7e3tbW1s7OzsbGx r6+vrKysqqqqqampp6enpKSko6OjoaGhnp6enJycm5ubmZmZl5eXlZWVkpKSkZGRj4+PjY2Ni4uL iYmJh4eHhYWFg4ODgICAf39/fX19enp6eXl5d3d3dHR0cnJycHBwb29vbW1ta2traGhoZ2dnZGRk Y2NjYWFhX19fXFxcWlpaWVlZVlZWVVVVU1NTUFBQT09PTU1NSkpKSUlJR0dHRUVFQ0NDQEBAPj4+ PT09Ozs7OTk5NjY2NDQ0MzMzMDAwLi4uLCwsKioqKSkpJycnJCQkIiIiICAgHx8fHBwcGxsbGRkZ FxcXFRUVEhISERERDw8PDAwMCgoKCAgIBwcHBQUFAwMDAQEBAgwAJBOn5woNCmVuZHN0cmVhbQ1l bmRvYmoNMjA3NSAwIG9iag08PC9MZW5ndGggNzI4L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFt DQpo3ozB+S8QUBwA8H5ySzmiQ0y5ontLpRRqIrdhLGmZkFp3WudEMaZjrahFOctNchdCtdLhinXT ug9JvPP73utf6PNRSiENDaSpqWNAeXq6hxdr7xDE0xObmYm7d9n27djOTjx9mpwC/OpVduSIfPcO ysrkyAgNDycrVgwNSztH1tMr8wuFmTk9kAB4+nQ8Z46TM0NaWqK1Fc+cqYS4cAmQtjbS12fHj4uO jtFRhYyNo2O5HB4my5apsTH54wcNDlaMqb9/iZOTolR+/YpNTGhkJDt0iB08iHR0qL8/0tVFBgZ4 3jxkZMQzM8maNVBbK7q65O/fbNcusmqVklJ+/CjfvMEzZpDly+HaNfH8eUgYF/fusWPHFOfsxAni 4sJPnVIYi/5+pKcHhYV47lxsbY0tLGhQEJo6Vb58qf78UQDU11d++SLfvoXcXNHSwtPSiIcHlJeL nh40ZYp8/ZpnZMjv38nSpfzyZernR6OjiZcXNDWJx4/F/fvy50/R3a3Gx2lUFFRUwPXreOFCbGXF EhKwvb389Ytu2sTi4qC6Gs+eDcXFNDQUTZ6Mzc3lp0/i0SPR3Myzs6GyEtva8qQkfu4c3bxZfvhA Q0Kojw8/e1a0t4veXp6cTBYtwrNm0a1bibMzi42Vo6N040YaEKAmJsTDh7duC/HgAZ4/X7S1YUtL 8eyZHBwUd+4gQ0OFEA0LY/v2YVNTfv48O3mSHT0KeXk0Jgby86GmBhobaUQE27OHuLqSdevg5k2o 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 PvlQodmAGNxID4lmPGumZ8ARJ8eplvkL1touwdkayl8anJzkJFjv+IrMuxJ5RBt8tg059wSsw639 RTyJPuvQ7gvaaHmR75SiXksjzD3QroC/0cP8U+QvRSjbiO+1NEpEAL5AxHBD6Yj/Yhb2RfrWRdzr 5x1Qhk+UI88bIeNE3xiO8YuRE1SIAHwvgJwqgJimY+BWGdf4GfQF4m4abjEaZq6jWjEHcWysE6sm gXG34pnKMWScySK3jHXO3ZzJ/0B5Ig4ddzd8sVV8TcXQEvMdajXjqM8jt1kF7Q3wBHz7EOb2S5Tf oqkiYHfL2IzzzuSbsDYH+OoLEnbMcLNj9JqEv0L7wArFn+HbdXQNdPJ62oVYUAs/Hid9Grwq/dvc T89AOyj1hMUZHQAFCetoBewMbQOvJ6zIQs6Xhe/BsXwEGewviAk/NqK8xziNehrq49kjiCGA9yCf BK5iOtIXaN28h871fnMbaR/YxbZhTduohu2lJWA78+Ne9UOfRzGw5v+1w1jPgZ2gAewQMXpYzEQ+ 0EPrwUzjf6SXaViUVR/Gz5lhADdgcIZ9cRcVBTdEREEBZRMFZFGUVcR93xdErazMVrOyjDKzTVyO llpmmy1mlmVlZWVmm6a576jvf7i9P73vh67r/fC/fr+zzjMzZ57nnr1qhbWnWmGTZ5JNnk0eV6Tk ueERD7rXqc2ukv+fNbb1KsG2UQ2W96tkbYLbNjlHXvJ51MvvwashOxWK75JKl3aucJJ8Fp3Ee1gv yLO6Vn6/e+T/Y63Mq5Wc1lKleXaXe0W93N+Pyxm3q1C3VarEsl/uy6dUuVS2nI9W1sPCGFVtNZLZ YuR+ECNn20ulSm2Smi5VJdVCqlJqglSFVE5DJclns1IFWpfIfXCG3A83qnbWsXIdO+QzSFNRcjYy rLtVjlzPUKmVUpVS5VJxUlUN11wr56dWzqvM+a/ri/jX1xf9v65Pfh+p+qpkiC0qw1Kn+luOqLaW DXJGjqoieS53sxyT/qOSU06qbGG25aAq0LtVqVTh/7PWslbF6kuqqyVHxVvS5FymK4dloKzJVtGW WNXKUiB7DZa9/+28rbczrM1Vsq1ESp6lNv877CKVK7VPZTVUlRpk2yG1TuqAam9bpFLEU+TZ7spz qZ5ZKlX6Rnrsk++rXp7r9SpTqlSqk1TxHR8uJb8h+a4wnieV7zrPthMq0s2merofUuPkuy+znJb8 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 jP54GEXoh77og97ohUL0xEPogQLkIw/d8SA0cpGDbshGFjKRgXQ8AD/ux33oii7woTM6oSM6oD28 aId7cQ/uRlvchTvhwR24HW1wG27FLWiNVrgZN6ElboQbN6AFrkdzNENTXIcmuBbXIA0KjdEIqXCh IVKQjCQkIgENUB/1UBdOOBAPO+JgQyyuRh1chdqohZj21eytsEBgGEXCmvyDv/EX/sQf+B2/4Vf8 gp9xAT/hR/yA8ziHsziD0ziFkziB4ziGoziCwziEgziAKuzH9/gO32If9mIPvsHX2I1d+ApfYie+ wOeoxA5sx2f4FJ9gGz7GR9iKLdiMTdiID7EB6/EB3sc6vId38Q7W4m2swWqswkqsQAUiWI638Cbe gInX8RqWYSlexRK8gsVYhIUoxwK8jJfwIl7A85iPeXgOz+IZPI25mIPZmIWZmIHpmIan8CSewFQ8 jscwxShqXybkX8i/kH8h/0L+hfwL+RfyL+RfyL+QfyH/Qv6F/Av5F/Iv5F/IvwRABwgdIHSA0AFC BwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgd IHSA0AFC/oX8C/kXsi9kX8i+kH0h+0L2hewL2ReyL2T/cvfwFb7lX+4XuMK35F6Fxr8DAOaOvXYN CmVuZHN0cmVhbQ1lbmRvYmoNMjA3NyAwIG9iag08PC9TdGVtViA4MC9Gb250TmFtZS9LTkRFSUsr Q2FsaWJyaS9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDIwNzYgMCBSL0ZvbnRXZWlnaHQg NDAwL0ZsYWdzIDQvRGVzY2VudCAtMjUwL0ZvbnRCQm94Wy00NzYgLTE5NCAxMjE0IDk1Ml0vQXNj ZW50IDc1MC9Gb250RmFtaWx5KENhbGlicmkpL0NhcEhlaWdodCA2MjUvWEhlaWdodCAtNTMxL1R5 cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag0yMDc4IDAgb2JqDTw8L1N1 YnR5cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDIwNzcgMCBSL0Jhc2VGb250L0tOREVJ SytDYWxpYnJpL1dbM1syMjZdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag0yMDc5IDAgb2JqDTw8L0xlbmd0aCAzNzI4L0ZpbHRlci9GbGF0 ZURlY29kZS9MZW5ndGgxIDU5MjQ+PnN0cmVhbQ0KSInkVmtwE9cVPufeXUl+27xsyw6sstjU+BEb CGBbsWUsmYDxA9uABYFoLcuywQ/VdgxOSEphaIh4xE0ZTKEFQoHUoQ0rAqmZpuCQ50yhYZLG0wkk TQglDC2BSRkoBWl7JGtS4Ac/2j+d6Z65u98599x7nvdKgAAQBWuAQ25V7SNT7L+6WgUgmkm60NnT LU1+5/Z64rfSEJo87ralBZc4QOR24ne7W3ubVkrbj5DumzQON7uUxj++ankBIH4m8dObSRC3h/+Q eA/xE5vbuletrJ5TRDztx+60djiVJHMS2UKax7VtyioPS9bNABjdR/pSu9Lm2rQ08kPSvU7D5ul0 eRYO7C+meRWAdwEDN4DgFokBPRRaxuv0TobkqZNDpE50cs6MEXrBiZBsyJiZlFkZf91c4TdXxt8w V8T7zVBs9puDIy93aoIpIc2UYHILcEfiQ3csItwGSRgit8iTj9lZ/hplyXQMOB6xxEbowRijS46O uWoKbptZeSH+IhRXXMnLxTE6+eH0R6dNnzplHDs73L99eHh7/zArGfkOQ/CZ8n9G9v8xCj6R8Fyo ssHnCYAw5hBH3AgWCK8IYx3hp2kWhAjiBuGFMEYYjyVhzCAWnwxjTvK2MBYIbwxjHeGBul6Pq0lx uqQBqa7ZJVV0tHd0k0gq7ej0dHQq3S0d7ZKn1ZkjWZVu5UFKJa2tUk2Lu7m7S6pxdbk6e1yN5ZVW W1V5Zm1vW0NHa0Xdg1mog17wgAuaQAEnfSUYoFEHzSFcAR3QTqM7rCVBKXGdhINvheQtIQ2JJK20 PoeQNSRX/uOdSminVvrWkMRNq7uhK8S56Osi3R56N0I5VJIlG1QRyoRa2rUNGmiHVrJUF9J2w1PE KbTiwbr/zWywa4TT2AciGMQd4lRi00a+fA80sVHRXBSRoV7HRD3c99RVlEpguSZdC4ibAmU41RCF J9d8NysuhTxxHkygkcq3QgqA9mV4XAjYtSviCpADy7Vzk+JI+Uh4jDwKpMEyyIC5cBKuwXGcDNUw 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 3ompwVEgZpw4tLfcmIy73UnfxfxBqDoWH97L5dCocVEd7TJ8apc76Z94DD3Bab/alaSJYDiSnPCN dqX8Pn9QHeqKZqifxZN1M0ume3dxugzVsfi/R0yzOB+yjs/YP/OYGWc43c9nnOEzzvAZ+3395ozB Mb6BA5GkQoEofmRNOScUF2EvYs7KaMBh299hbkxbZflR5yWR2DkqxpmjBOfXJwBO1fvr/ZxCwnBq OT/a5qnyo22VzkvsXJ6ywbxSDZB2UPtHOcALlQfHujgQSSY7L0ym7K5GLarR3wIMALWpj4gNCmVu ZHN0cmVhbQ1lbmRvYmoNMjA4MCAwIG9iag08PC9TdGVtViAwL0ZvbnROYW1lL0tOREVPSytTeW1i b2xNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDIwNzkgMCBSL0ZvbnRXZWlnaHQgNDAw L0ZsYWdzIDQvRGVzY2VudCAtMjE5L0ZvbnRCQm94WzAgLTIyMCAxMTEzIDEwMDVdL0FzY2VudCAx MDA1L0ZvbnRGYW1pbHkoU3ltYm9sKS9DYXBIZWlnaHQgMC9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0 YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMjA4MSAwIG9iag08PC9TdWJ0eXBlL0NJREZvbnRUeXBlMi9G b250RGVzY3JpcHRvciAyMDgwIDAgUi9CYXNlRm9udC9LTkRFT0srU3ltYm9sTVQvV1sxMjBbNDYw XV0vQ0lEVG9HSURNYXAvSWRlbnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQgMC9PcmRl cmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+Pg1lbmRv YmoNMjA4MiAwIG9iag08PC9MZW5ndGggMjE1L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo 3lRQMW7DMAzc9QqOLTpIdjMaBop08ZC2qN3uikS7AmJKoOXBv48kOAk6kASPPNyR8ti9d+QiyC/2 pscIoyPLuPiVDcIZJ0dQ1WCdiXtXspl1AJnI/bZEnDsaPTSNkN9puETe4GkYqhf1DPKTLbKjKSGH +uc3If0awgVnpAgK2hYsjkIeTzp86BlBFuIDHLaAUJe+2rW9xSVog6xpQmiUUq/trSDZ//Mb6zya P83isf2mWpG2dzzz8k13H2ZlThbL4cVItuAI778JPmS1HOIqwADUTWpvCg0KZW5kc3RyZWFtDWVu ZG9iag0yMDgzIDAgb2JqDTw8L0xlbmd0aCAyMTcvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0N CmjeVFA9T8QwDN3zKzyCGJKLToKh6nIsHfgQLey5xC2RqBO56dB/TxK1hxhsy89+es+Wl+65I59A vnOwPSYYPTnGJaxsEa44eYKTBudt2rua7WwiyEzutyXh3NEYoGmE/MjDJfEGd8NwflD3IN/YIXua MnLWn18Z6dcYf3BGSqCgbcHhKOTlxcRXMyPISvwDhy0i6Nqfdu3gcInGIhuaEBqlHp/aoyC5//OD dR3tt2FxbGuldSvy9o4XXrnp5sOuzNliPbwaKRY84e03McSiVkL8CjAA5XtqjgoNCmVuZHN0cmVh bQ1lbmRvYmoNMSAwIG9iag08PC9Dcm9wQm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgMjA0NCAw IFIvU3RydWN0UGFyZW50cyAxL0NvbnRlbnRzIDIgMCBSL1JvdGF0ZSAwL01lZGlhQm94WzAgMCA1 OTUuMjIgODQyXS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDIwNjcgMCBSPj4vQ29sb3JTcGFj ZTw8L0NTMCAyMDUzIDAgUj4+L0ZvbnQ8PC9UVDAgODkgMCBSL1RUMSAxMDMgMCBSL1RUMiAxMDkg MCBSL0MyXzAgMTEwIDAgUi9DMl8xIDkzIDAgUi9DMl8yIDk0IDAgUi9DMl8zIDkxIDAgUi9DMl80 IDkyIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MwIDIwNTcg MCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMiAwIG9iag1bMyAwIFIgNCAwIFIgNSAwIFIgNiAw IFIgNyAwIFIgOCAwIFIgOSAwIFIgMTAgMCBSXQ1lbmRvYmoNMyAwIG9iag08PC9MZW5ndGggMTE2 OC9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSImsV1tv2zYUfvevOI9SAdG8iRcgyEMuKDog 2NoK2EMwDFmqZBliZ7UzpPv3+w4pyZYtx8u6BKZo8eN37of0WTOb/0QnJ/Or8w8XJOn09OzinGbz 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 b2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1 Co4NMkhxMxoGinTx0LSone6KRLsCakqg5cG/jyQ4CTqQBI883JHy1L635CLIL/amwwiDI8s4+4UN whVHR3CowDoTt65kM+kAMpG7dY44tTR4qGshv9NwjrzCS99Xe7UD+ckW2dGYkGN1+UlIt4TwhxNS BAVNAxYHIU8fOpz1hCAL8Qn2a0CoSn/YtL3FOWiDrGlEqJVSr829INn/8zvrOphfzeK5/aYakbY3 PPPyTQ8fZmFOFsvhxUi24Agfvwk+ZLUc4ibAANXqanEKDQplbmRzdHJlYW0NZW5kb2JqDTEzIDAg b2JqDTw8L0xlbmd0aCAyMTQvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1 Co4JMkhxMxpeksVDm6J2uisS7QqoKYGWB/++kuAk6EASPPJwR8pze2nJRZCf7E2HEQZHlnH2CxuE O46O4FiBdSZuXclm0gFkInfrHHFqafBQ10J+peEceYVd358Oag/yyhbZ0ZiQU3X7Tki3hPCLE1IE BU0DFgchz+86fOgJQRbiC+zXgFCV/rhpe4tz0AZZ04hQK6XemkdBsv/nD9Z9MD+axWu7Uo1I2xue efmmpw+zMCeL5fBiJFtwhM/fBB+yWg7xJ8AA1LBqZgoNCmVuZHN0cmVhbQ1lbmRvYmoNMTQgMCBv YmoNPDwvTGVuZ3RoIDIxOS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UULFOxDAM3fMV HkEMaatDCKnqUoTUgTtEC3sucUsk6kRuOvTvSaL2EINt+dlP79my7V46sgHkOzvdY4DRkmFc3Moa 4YqTJSgrMFaHvctZz8qDjOR+WwLOHY0O6lrIjzhcAm9wNwxPD8U9yAsbZEtTRE7V51dE+tX7H5yR AhTQNGBwFLJ9U/6sZgSZiX/gsHmEKvflru0MLl5pZEUTQl2Uz6fmKEjm//xgXUf9rVgc29Vj+9qI uL3jiZduuvnQK3O0mA/PRpIFS3j7jXc+qaUQvwIMAPV8arsKDQplbmRzdHJlYW0NZW5kb2JqDTE1 IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJdL1BhcmVudCAyMDQ0IDAgUi9TdHJ1Y3RQ YXJlbnRzIDIvQ29udGVudHMgMTYgMCBSL1JvdGF0ZSAwL01lZGlhQm94WzAgMCA1OTUuMjIgODQy XS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDIwNjcgMCBSPj4vQ29sb3JTcGFjZTw8L0NTMCAy MDUzIDAgUj4+L0ZvbnQ8PC9UVDAgMTE2IDAgUi9UVDEgMTE0IDAgUi9DMl8wIDExMyAwIFIvQzJf MSAxMTIgMCBSL0MyXzIgMTExIDAgUi9DMl8zIDExNSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dC9J bWFnZUNdL0V4dEdTdGF0ZTw8L0dTMCAyMDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2JqDTE2 IDAgb2JqDVsxNyAwIFIgMTggMCBSIDE5IDAgUiAyMCAwIFIgMjEgMCBSIDIyIDAgUiAyMyAwIFIg MjQgMCBSXQ1lbmRvYmoNMTcgMCBvYmoNPDwvTGVuZ3RoIDExMzIvRmlsdGVyL0ZsYXRlRGVjb2Rl Pj5zdHJlYW0NCkiJrFdLb+M2EL77V8xRWkA03w8gyCHJYrEFArSNih6CRRE4iuMillPb26D76ztD irJly+umrQNTtDjzzXuGuaon0x/h4mJ6e/35BjhcXl7dXMNk+umOw3wzmV7L3zgIqJ8myuIxB3wE Dk5pZjlXUC8nFxw3l/Xvk4+3xLlDEz0aooiEwpkMNkA9A8GZiYhxQ5hCMN9h3kfQCFzZJOBL/cOR BJklcELkUAmmvYX65kCpj2jl3fPDa9Nzqsz5B/J6LcEEw7iEymvUwsK6mfz6AdruWLDgI0VHgL+I AM+n1+io2QY4C0rh6qWOqwPYzFpk5kz04Fp4PCJWdASooJnS/Zl2zOp0lswcKqyzwuRIkdGdEUz2 +IEzZ/cgfsK/q0GAhbYjQRmGwtjAkMxZw5QcCzF583P7smiboYpCu51XhTHMYDi58ClvHKFx7hS6 QaEA3FsXpYiAH0yK2RJxlxxuVqj3YajNIGBSM8QVBsMNQjKvczzI3FOGVZh8Gnkd40epW2ePDf11 3luakmEcM/tqB+f+uxG4SPs+I/yYETJByk7+KCDRy1y3pEP9uDvkmLwe5t3zE1W2gDekvgXaS0Ml KaFeH1Q6ChqT19f7SCMJOwNytfEAJBCtYMqaVA7TuuZ9l8FP6gmoQIjSA4jAHCYA9hnXiS4AoCRj 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 10J+peEceYVd358Oag/yyhbZ0ZiQU3X7Tki3hPCLE1IEBU0DFgchz+86fOgJQRbiC+zXgFCV/rhp e4tz0AZZ04hQK6XemkdBsv/nD9Z9MD+axWu7Uo1I2xueefmmpw+zMCeL5fBiJFtwhM/fBB+yWg7x J8AA1LBqZgoNCmVuZHN0cmVhbQ1lbmRvYmoNMjggMCBvYmoNPDwvQ3JvcEJveFswIDAgNTk1LjIy IDg0Ml0vUGFyZW50IDIwNDQgMCBSL1N0cnVjdFBhcmVudHMgMy9Db250ZW50cyAyOSAwIFIvUm90 YXRlIDAvTWVkaWFCb3hbMCAwIDU5NS4yMiA4NDJdL1Jlc291cmNlczw8L1hPYmplY3Q8PC9JbTAg MjA2OCAwIFIvSW0xIDIwNjcgMCBSL0ltMiAyMDY5IDAgUi9JbTMgMjA3MCAwIFIvSW00IDIwNzEg MCBSPj4vQ29sb3JTcGFjZTw8L0NTMCAyMDUzIDAgUi9DUzEgMjA1NCAwIFIvQ1MyIDIwNTUgMCBS Pj4vRm9udDw8L1RUMCAxMjQgMCBSL1RUMSAxMjUgMCBSL0MyXzAgMTIzIDAgUi9DMl8xIDExNyAw IFIvQzJfMiAxMjEgMCBSL0MyXzMgMTIyIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQy9J bWFnZUldL0V4dEdTdGF0ZTw8L0dTMCAyMDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2JqDTI5 IDAgb2JqDVszMCAwIFIgMzEgMCBSIDMyIDAgUiAzMyAwIFIgMzQgMCBSIDM1IDAgUiAzNiAwIFIg MzcgMCBSXQ1lbmRvYmoNMzAgMCBvYmoNPDwvTGVuZ3RoIDU0NS9GaWx0ZXIvRmxhdGVEZWNvZGU+ PnN0cmVhbQ0KSImMVE2L20AMvftX6NguZCJppPmAJZCxk6WFQJcO9FBKD9vuQqEL3Rz696tx7KTZ NhCMQfY86T19Tand8gPc3i53/bsBEFarMvTQLe8+Ijztu2XPXxEI6mNH6NQA9nUwkkcXED3Un90t mrGqP7rNrjmfAtIcEGFBTlKAOlxG84yuN5dB/hqQXAPSa0DhGlC8BpQugja1+2UVSsKgWR0yLJKQ s2q9fO8+3cDzdEwupxExAeyrAex82Vu/HvZgLfG5dclxVID9w7M5RiQX0xyaxA6b32N3b085GwA5 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 eCicMW5YUOKcIrSv0NjPNGcGNDtfi6iJsGKoyOlCRXaqnknV09lGz/FCT8f9KI3cj5wLPUPS1fYM cX5nLtPIXAI32jRdnUhtV7WZCk1XSApOXcHfKrIPvy/ILpI6eSB1DtpEI8RBkQcOCpdNFyyb6QxZ 2sysNoputhRdt8Q+kewdE2mkR86kh9vZRLmwiXy/YXe6WogLei5Tt+klWJZgB2VRhna1jWrbvagv s7eUjHyhZBy0i2bI4WEc8KBNlLWJvK99EfJ07ovgg2Kfif2gIMJmYPHyzOL5sGNlHrESSeo8k9QH FVERrSI8RNdjL3pk+MixXwaOfR+rg854TxSCMlAIfOLSUQYuHT6RHsWQHn7lyloCV1a/hgZZ5rlF /EUePH4r9IyRniqJRSXRVzZDSWwGXylYJVGwfKNIlEyR8I3tXTLb+6AoitCOlTx2K3qzPZVzv8T9 3wXB/JKOesL1x1a3eHyC3lxZr6wuzvHRM2K4P72qftTLZtBrKapnVE9dvhrXjOOjG5luG0dmHHR8 ONqvs47apatp8qpTNekU4I55fIqODYpQqb2nLZxkxyVvVpLymjC1KVfvK8TzI3GrPBZqvAugiPsz tj+xf30Wbz9ut+PFzDucd3F/Eb+8tl+f6u9v7/3x2/8e/ifAAOidlWQKDQplbmRzdHJlYW0NZW5k b2JqDTQwIDAgb2JqDTw8L0xlbmd0aCAyMTcvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmje VFA9T8UwDNzzKzyCGJIXgWCoujyWDnyIFva8xC2RqBO56dB/TxK1DzHYls8+3dny3D135BPIdw62 xwSjJ8e4hJUtwgUnT3DS4LxNe1eznU0Emcn9tiScOxoDNI2QH3m4JN7gZhge7tQtyDd2yJ6mjNzr z6+M9GuMPzgjJVDQtuBwFPL8YuKrmRFkJf6BwxYRdO1Pu3ZwuERjkQ1NCI1Sj0/tUZDc//nBuoz2 27A4trXSuhV5e8cLr9x09WFX5myxHl6NFAue8PqbGGJRKyF+BRgA5xhqkAoNCmVuZHN0cmVhbQ1l bmRvYmoNNDEgMCBvYmoNPDwvTGVuZ3RoIDc1MDUvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEg MjAyMjA+PnN0cmVhbQ0KaN7sm3lc1NX6x5/vMjPsiwGKw/LFEdJAcMU1HdkEEZVlasBSRkAhRbgD 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 1Q7nPK1GlHTJzjnz8LSqBRqa0WwLqupRv7DeUV9RpzkWlKeggRq9g7KahgX1zqqKumSaQtnQFJpO WZTYLd4FelQbYBHx+VeegygNczgf8/s/6dWzwv8XV7j4R87i/zCnbdhPtkIyhaBuKVFAlDQR+5D+ b8rEP9d/KORA06zgcccp0kff0p785rJXBfemHfE7Gdxe5/u1aQOyYk/T97z/EGAASnZT4AoNCmVu ZHN0cmVhbQ1lbmRvYmoNNDIgMCBvYmoNPDwvU3RlbVYgMTI0L0ZvbnROYW1lL0xITExQRitDYWxp YnJpLUJvbGQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiA0MSAwIFIvRm9udFdlaWdodCA3 MDAvRmxhZ3MgNC9EZXNjZW50IC0yNTAvRm9udEJCb3hbLTQ5MyAtMTk0IDEyMzkgOTUyXS9Bc2Nl bnQgNzUwL0ZvbnRGYW1pbHkoQ2FsaWJyaSkvQ2FwSGVpZ2h0IDYyNS9YSGVpZ2h0IC01MzEvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTQzIDAgb2JqDTw8L1N1YnR5 cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDQyIDAgUi9CYXNlRm9udC9MSExMUEYrQ2Fs aWJyaS1Cb2xkL1dbM1syMjZdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag00NCAwIG9iag08PC9MZW5ndGggMjE3L0ZpbHRlci9GbGF0ZURl Y29kZT4+c3RyZWFtDQpo3lRQu27DMAzc9RUcW3SQ4nbIYBgo0sVDH6id7IpEOwJqSqDlwX9fSXAS ZCAJHnm4I+Wh/WjJRZA/7E2HEQZHlnH2CxuEM46OYFeBdSZuXclm0gFkInfrHHFqafBQ10L+puEc eYWnvt+/qGeQ32yRHY0JeauOp4R0Swh/OCFFUNA0YHEQ8vCpw5eeEGQh3sF+DQhV6Xebtrc4B22Q NY0ItVLqtbkWJPs4v7LOg7loFvftd9WItL3hmZdvuvkwC3OyWA4vRrIFR3j7TfAhq+UQ/wIMAN+Y an0KDQplbmRzdHJlYW0NZW5kb2JqDTQ1IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJd L0Fubm90cyA0NiAwIFIvUGFyZW50IDIwNDQgMCBSL1N0cnVjdFBhcmVudHMgNC9Db250ZW50cyA0 NyAwIFIvUm90YXRlIDAvTWVkaWFCb3hbMCAwIDU5NS4yMiA4NDJdL1Jlc291cmNlczw8L1hPYmpl Y3Q8PC9JbTAgMjA2NyAwIFI+Pi9Db2xvclNwYWNlPDwvQ1MwIDIwNTMgMCBSPj4vRm9udDw8L1RU MCAxMjYgMCBSL1RUMSAxMjcgMCBSL1RUMiAxMjggMCBSL0MyXzAgMTI5IDAgUi9DMl8xIDEzMCAw IFIvQzJfMiAxMzcgMCBSL0MyXzMgMTMxIDAgUi9DMl80IDEzOCAwIFIvQzJfNSAxMzkgMCBSL0My XzYgMTQwIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MwIDIw NTcgMCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoNNDYgMCBvYmoNWzEzMiAwIFJdDWVuZG9iag00 NyAwIG9iag1bNDggMCBSIDQ5IDAgUiA1MCAwIFIgNTEgMCBSIDUyIDAgUiA1MyAwIFIgNTQgMCBS IDU1IDAgUl0NZW5kb2JqDTQ4IDAgb2JqDTw8L0xlbmd0aCA5NjIvRmlsdGVyL0ZsYXRlRGVjb2Rl Pj5zdHJlYW0NCkiJrFZbixs3FH6fX3EeN4WRz5GObmAMnltJYEuKB/oQQimbbdLS3bbZh/79Hmku 9nhnwRuHwRp5JH3nrvNVfbF5D9vt5rZ+2wDCblc1NRSbHw8In5+KTa1/RSDofy+Mk2UEeUUEb1g5 RAP9Q7FFmez6P4v2Np08otGMJig0oKDS0UXo74BQ2YyYJwmTSIUR80MGzcClGwR87N89k6AnCZgQ EUpSHBz0zZlSrVh5+PLbP/fzSTOd/FfOBtZgo1WooQwsWjj4el/88gM8jsukYsg7xg3yL22Q9U0t jrp7AlTRGBmD5jx6gKe7RzmMimZwpiBL6ag4AkxkZXheY68cD2tZ55/lOUEXp8mo7ThmdKND0pWc CgE0ycwGFUeQfLY+JG0syWgD5xHgUP8kcfAW/oMAtxKXd1BY5gzlbcIqE1hJNiaoScqw9FB8KQ5F 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 +JUNwhknR1DVYJ2Je1eymXUAmcj9tkScOxo9NI2Q32m4RN7gaRiqF/UM8pMtsqMpIYf65zch/RrC BWekCAraFiyOQh5POnzoGUEW4gMctoBQl77atb3FJWiDrGlCaJRSr+2tINn/8xvrPJo/zeKx/aZa kbZ3PPPyTXcfZmVOFsvhxUi24Ajvvwk+ZLUc4irAANRNam8KDQplbmRzdHJlYW0NZW5kb2JqDTU3 IDAgb2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMw DNz1Co4NMkhxMxoGinTx0LSone6KRLsCakqg5cG/jyQ4CTqQBI883JHy1L635CLIL/amwwiDI8s4 +4UNwhVHR3CowDoTt65kM+kAMpG7dY44tTR4qGshv9NwjrzCS99Xe7UD+ckW2dGYkGN1+UlIt4Tw hxNSBAVNAxYHIU8fOpz1hCAL8Qn2a0CoSn/YtL3FOWiDrGlEqJVSr829INn/8zvrOphfzeK5/aYa kbY3PPPyTQ8fZmFOFsvhxUi24Agfvwk+ZLUc4ibAANXqanEKDQplbmRzdHJlYW0NZW5kb2JqDTU4 IDAgb2JqDTw8L0xlbmd0aCAyMjk0L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3nyYSY8c uRFG7/oVdbThQ3NfAEFA5QbMwQusse+5MGUBVqvR6jnMvzfzfaUZCAbm0F14STIiGAwGg3waf5p+ ev78dnv6x+vX/WN7u52fn4/X9u3rL697u23t0+fnm3W34/P+9iD+71/Wl9tTH/zx129v7ctPz+fX 2/v3757+2Ru/vb3+evvTzz/nv5g/357+/nq018/Pn/qX4P717/7l4y8vL/9tX9rz283cPny4He18 9zT+dX352/ql3Z4Y+PvHn399aTcH24fur0f79rLu7XV9/tRu740x/sPtfbSmfLi15+PH9nfWGI3b zv0/6+u77/2NceYDVEQRskY0iXbIV8ipZ1BPt4kK5CUzSqZPIi86RHcoZCgFKEpmlswofRl9dg+d fNd0kduvnstiRuhIkL2LNtFyUfDXHMJsjMiLsCUEkX3QKkJKiCL3oEOEJ0LeoDBAW4JKEjXRDGF1 mGsQaVzVuENtd7UdWZShJu2DtJ+aw6g5nFEURdI3oi8a2TJhS7TqOUfRLsJn0duLFmMhzf3hwRjR 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 KksWbVdesxKHZN+1yyMiFALXK+z1Qvzbq+7+y+tre37jGZln3etB9/Nz++2l+eXry/V2e/29+58A AwAjTQ7oCg0KZW5kc3RyZWFtDWVuZG9iag01OSAwIG9iag08PC9MZW5ndGggMjQ4L0ZpbHRlci9G bGF0ZURlY29kZT4+c3RyZWFtDQpo3lRQu07EMBDs/RVbgijsM0HcSZYLAkUKHiKB3o9NsEQcy0mK /D22Lxyi8Eoz65mdXVo3j413C9C3OJkWF+idtxHnaY0GQePgPBw4WGeWHZVqRhWAJnG7zQuOje8n EILQ99Scl7jBVddVN+wa6Gu0GJ0fElPxj8/EtGsI3ziiX4CBlGCxJ7R+VuFFjQi0CP/IbgsIvODD PnuyOAdlMCo/IAjG2K0EUVmtJaC3//ukOqt0b75UJL+/GeNMEsHZsc/aJ1aQ1seE7k78lNDZUNw/ 8FqS5Ls75Al5+0tis8aYliknKpFzWOfxcsUwhZwrP/IjwADhJHSGCg0KZW5kc3RyZWFtDWVuZG9i ag02MCAwIG9iag08PC9MZW5ndGggMjE5L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3lRQ sU7EMAzd8xUeQQxpq0MCqepShNSBO0QLey5xSyTqRG469O9JovYQg2352U/v2bLtXjqyAeQ7O91j gNGSYVzcyhrhipMlKCswVoe9y1nPyoOM5H5bAs4djQ7qWsiPOFwCb3A3DE8PxT3ICxtkS1NETtXn V0T61fsfnJECFNA0YHAUsn1T/qxmBJmJf+CweYQq9+Wu7QwuXmlkRRNCXZTPp+YoSOb//GBdR/2t WBzb1WP72oi4veOJl266+dArc7SYD89GkgVLePuNdz6ppRC/AgwA9xlqvQoNCmVuZHN0cmVhbQ1l bmRvYmoNNjEgMCBvYmoNPDwvTGVuZ3RoIDIxNy9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0K aN5UUDFuwzAM3PUKjg0ySHYzGgaKdPHQtKjd7IpEuwJqSqDlwb+P5DoJMpAEjzzckfLYvDfkIsgv 9qbFCL0jyzj5mQ3CBQdHUJRgnYlbt2Yz6gAykdtlijg21HuoKiG/03CKvMBL1xWHvdqB/GSL7GhI 0KH8OSeknUP4wxEpgoK6Bou9kMcPHU56RJD/zAfaLQGhXPtiU/cWp6ANsqYBoVJKvda3gmSf5zfW pTe/msVj+03VIm1veOblq+5GzMycPK6nr0ayBUd4/07wIavlEFcBBgB4jWrXCg0KZW5kc3RyZWFt DWVuZG9iag02MiAwIG9iag08PC9Dcm9wQm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgMjA0NCAw IFIvU3RydWN0UGFyZW50cyA1L0NvbnRlbnRzIDYzIDAgUi9Sb3RhdGUgMC9NZWRpYUJveFswIDAg NTk1LjIyIDg0Ml0vUmVzb3VyY2VzPDwvWE9iamVjdDw8L0ltMCAyMDY3IDAgUj4+L0NvbG9yU3Bh Y2U8PC9DUzAgMjA1MyAwIFI+Pi9Gb250PDwvVFQwIDE0NiAwIFIvVFQxIDE0NyAwIFIvVFQyIDE0 OCAwIFIvVFQzIDE0OSAwIFIvQzJfMCAxNTAgMCBSL0MyXzEgMTQzIDAgUi9DMl8yIDE0NCAwIFIv QzJfMyAxNDEgMCBSL0MyXzQgMTQyIDAgUi9DMl81IDE0NSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4 dC9JbWFnZUNdL0V4dEdTdGF0ZTw8L0dTMCAyMDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2Jq DTYzIDAgb2JqDVs2NCAwIFIgNjUgMCBSIDY2IDAgUiA2NyAwIFIgNjggMCBSIDY5IDAgUiA3MCAw IFIgNzEgMCBSXQ1lbmRvYmoNNjQgMCBvYmoNPDwvTGVuZ3RoIDgwNS9GaWx0ZXIvRmxhdGVEZWNv ZGU+PnN0cmVhbQ0KSImkVltLG0EUft9fcR6jsJNz5j4QAm4iYkGouNAHKaWk1rbUtOqDf79nZvaa bEzFhOzFOfN95zu3saqL+UdYLOZXq8s1ICyX1XoFxfziBuH+uZiv5BcEgvp7oSwvI/AtIDilhUVU UD8UC+SHZf2rOL+KO3s06tAYhTIKChlsgHoDhMIkxPQQMYmEbzBvE2gCLm0m+Fx/2GOQLQNGRISS hPYW6vWOU+es8ubH17933U7V7nzkvV5LMMEIlFB6zV5YeLorPp3CtlkmEXyyaAz4LRrw+nzFgdo8 A4qgFF+91OnqAJ43W96MgjpwTZ6X4lYOBKighdLdmnbC6ryWZY4d1q3DMZDUojtDQnb4AYWzQ4jL 7e+f27sxEOnQQl3z97Egw7pcCMH7nGF2JL6yBs0pCZxntA6cNYIU/z1o2Dww9gPC+g8jJKpqVEdk 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 vlC9267iBsWX2qFKFpb8m5xVqkSX70L7uqXGbOc/wWSYa27wrwADAEcn9UoNCmVuZHN0cmVhbQ1l bmRvYmoNNzIgMCBvYmoNPDwvU3RlbVYgOTIvRm9udE5hbWUvVmVyZGFuYS9Gb250U3RyZXRjaC9O b3JtYWwvRm9udFdlaWdodCA0MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjA5L0ZvbnRCQm94Wy00OTUg LTMwMyAxNDQ3IDEwMDBdL0FzY2VudCAxMDA1L0ZvbnRGYW1pbHkoVmVyZGFuYSkvQ2FwSGVpZ2h0 IDczNC9YSGVpZ2h0IDU0Ni9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRv YmoNNzMgMCBvYmoNPDwvTGVuZ3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5U UDFuwzAM3PUKji06SHYzGgaKdPGQtqjd7opEuwJiSqDlwb+PJDgJOpAEjzzckfLYvXfkIsgv9qbH CKMjy7j4lQ3CGSdHUNVgnYl7V7KZdQCZyP22RJw7Gj00jZDfabhE3uBpGKoX9Qzyky2yoykhh/rn NyH9GsIFZ6QICtoWLI5CHk86fOgZQRbiAxy2gFCXvtq1vcUlaIOsaUJolFKv7a0g2f/zG+s8mj/N 4rH9plqRtnc88/JNdx9mZU4Wy+HFSLbgCO+/CT5ktRziKsAA1E1qbwoNCmVuZHN0cmVhbQ1lbmRv YmoNNzQgMCBvYmoNPDwvTGVuZ3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5U UDFuwzAM3PUKjg0ySHEzGgaKdPHQtKid7opEuwJqSqDlwb+PJDgJOpAEjzzckfLUvrfkIsgv9qbD CIMjyzj7hQ3CFUdHcKjAOhO3rmQz6QAykbt1jji1NHioayG/03COvMJL31d7tQP5yRbZ0ZiQY3X5 SUi3hPCHE1IEBU0DFgchTx86nPWEIAvxCfZrQKhKf9i0vcU5aIOsaUSolVKvzb0g2f/zO+s6mF/N 4rn9phqRtjc88/JNDx9mYU4Wy+HFSLbgCB+/CT5ktRziJsAA1epqcQoNCmVuZHN0cmVhbQ1lbmRv YmoNNzUgMCBvYmoNPDwvTGVuZ3RoIDI0OS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5U 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 Pj5zdHJlYW0NCmjeVFAxbsMwDNz1Co4NOkh2080wUKSLh6ZB7HZXJNoVUFMCLQ/+fSTXSdCBJHjk 4Y6Uh+a9IRdBntibFiP0jizj5Gc2CBccHEFRgnUmbt2azagDyERulyni2FDvoaqEPKfhFHmBp64r Xp/VDuQnW2RHQ4L25dd3Qto5hF8ckSIoqGuw2At5+NDhqEcE+cd8oN0SEMq1LzZ1b3EK2iBrGhAq pdRLfStI9v/8xrr05kezeGy/qVqk7Q3PvHzV3YiZmZPH9fTVSLbgCO/fCT5ktRziKsAAeitq2QoN CmVuZHN0cmVhbQ1lbmRvYmoNNzggMCBvYmoNPDwvQ3JvcEJveFswIDAgNTk1LjIyIDg0Ml0vUGFy ZW50IDIwNDQgMCBSL1N0cnVjdFBhcmVudHMgNy9Db250ZW50cyA4MCAwIFIvUm90YXRlIDAvTWVk aWFCb3hbMCAwIDU5NS4yMiA4NDJdL1Jlc291cmNlcyA3OSAwIFIvVHlwZS9QYWdlPj4NZW5kb2Jq DTc5IDAgb2JqDTw8L1hPYmplY3Q8PC9JbTEgODIgMCBSPj4vQ29sb3JTcGFjZTw8L0NzNiAyMDUz IDAgUj4+L0ZvbnQ8PC9UVDIgMTUxIDAgUi9UVDQgMTUyIDAgUi9UVDYgMTUzIDAgUi9UVDggMTU0 IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MxIDIwNTcgMCBS Pj4+Pg1lbmRvYmoNODAgMCBvYmoNPDwvTGVuZ3RoIDUzNzE0L0ZpbHRlci9GbGF0ZURlY29kZT4+ c3RyZWFtDQpIibRX23LbyBF9Z1X+YR62UmBiQsDg7traiiXZG6diW4m4tQ92HiBqKCICARoAJStf n9PdgwshZbd2q6IHzWA409PTl9Onz67yplPff3/24eL9pfLUDz+cX178YXF20cZq0yo3DjKtse7q JIx81W6qxdmP1766axfad8NUYdkNYxVFkZuGKkndWDVmsV2crxdn67VWvlpvF37seiTFUzLT2s20 Sj3tBqEXqPV+AYmLlet5+HG9WXhq/bhwlFLL9b8XfionU3ssSX030nLMo939OT5yUVddUR3rY6ve HA5lscm7oq5UvVXnZpc/FHWzOs9bc6uu863pnpT2vIxugbKhVdYblPVGZZM4dvVwqyirw0HZz7h6 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 uLqpZDIF8IV3Sf+RmeQLbzuI7/IQ0HX4E5KFz3EMIXbplBQkcTAWZOQ2/EFMoZol+7fiURCYJG5f kdGO3Q4iJwon73rD470NdS3rGHy1uYnDvTWkO7LT5r0lECqhNw4QFjwTmofNWTHVusfHY8bus+GL trwG/LP8BLiIbUl8Cs1bIPyDIrWbYuEuLifwz/Qlrkqyqi6NrzkovKfMdbQyE5JCgeoJ0T5YVruD 7y2EEM///L3NmAmLy4JKPEAMUAmy3aRHUy81qEMkwEK8bd+tx7cVql1ctcp7OlWD+mb1ZrtqYHn+ obhudCUMgWFbnht7IRhxQ8kEUrhBQUgE6BfGUMjrVQc/n8jz3fJvIQWQfrRqO3IIeromRugXvcf5 tPVgp1oNeyqPZycrdsoNF/QGOmMtZC17Dz7s2DmF8NYXPDla30LbGHuiOu9cF3Ls3a7gTbeQyltu oX+FW3B/+GvdQh6Pka5faRb6+evMQhtS/tos7MTvHa+Q0/AK6S2r8O/RIKh4PmMQUJtvGoTmOPy6 QYjr9nMfdwj9FYfQh0Po0yFMoX3tEPrHHULfO4Sp8jG46xDa3iK0nS3I5TWPcOUL2vVguoT2NTYh rgXl+3F50tv/QJ6gyYuHU6CAbT+iUNJHFEpurlAQSaHk5golt9+iUOLaYDC+XKJ0lyh9SpT+pkTJ DyqU/DmB4kroSqGcv53+/OuPb6f/BBgAjGAZgg0KZW5kc3RyZWFtDWVuZG9iag04MSAwIG9iag1b L0lDQ0Jhc2VkIDIwNzMgMCBSXQ1lbmRvYmoNODIgMCBvYmoNPDwvU3VidHlwZS9JbWFnZS9MZW5n dGggOTM2Mi9GaWx0ZXIvRENURGVjb2RlL0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNlIDgx IDAgUi9XaWR0aCA0NzkvSGVpZ2h0IDk4L1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/uAA5BZG9i ZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgXEhQUFBQSFxcbHB4cGxck JCcnJCQ1MzMzNTs7Ozs7Ozs7OzsBDQsLDQ4NEA4OEBQODw4UFBARERAUHRQUFRQUHSUaFxcXFxol ICMeHh4jICgoJSUoKDIyMDIyOzs7Ozs7Ozs7O//AABEIAGIB3wMBIgACEQEDEQH/xAE/AAABBQEB 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 3K6HiX4H2OuagHB4s+k4uHd08yh0fV3DZiWY9pda+4AWXH6UAggN5gaLWSQ45VV+KuCN3Tl5/QaM vHx8et5oqxzoGiZH9/mmzOgYt+AzEpPo+m7eyzk7uCXeMrVSSE5aa7aq4I66buZg9GNL225d78u2 v+b3/RafFrZOqr2/VfGOX9opusx2uMuYzQ687XdltpIjJMEkHdXtxqqc/I6Lg3YP2PbsYDua4fSD v3pPJ+KB0/6vY+IQbLX5G0yxjtGA+OyYla6SHHKqs0VcEbulLL+slNlvSLhXqWlryB3AOv8AetRM QCIPCETwkHsmQsEd3mvq91vAxsAY2S/0nVkkEgkEOM9pWi3ql2e/0umMOyYflvEMb/VafpFHd0Tp LrPUOMzdzxp/m8K4xjK2hjGhrRoGgQAnzlAkkA2e+yyMZAUSKHZo3dHx7cUUbnNsDvUF4P6T1B+e SlhdHx8Ymy0nKyHQTdb7nacbZmFoJJvFKqtdwi7ppVdKxab8jIrBFuTO908Tzt8FX6V9X8Xp5Ly4 32nh7hAA/kt1Wqklxy1FnVXBHs4X/NXGblG6m+ymsn+bZoYPLQ7wVzL6HgZWPXjlprZUZYWaHXnm eVopJHJM1qdNlCEddN3IzPq5iZNmPD3VU47dgqb3Ezz2T9R6BTlNxxjv+ynH0YWDtz4jVaySPuT0 12VwR103cfM+r7Lun/ZqbItNgssus9znuAI9x+aNi9Ex6cZ9VrnX2WsLH2v1dtIja2ZgBaSSHuSq r62rgjd05HTfq7j4dgtssdkOb/NhwhrfMN11RR0PErwL8PHJrF/0rOXeXhoFpJJGcibtQhHs5uD0 PDxMZ9JHqutaWWWO5LT+aPALKsxcPEyP2d0/ddnXjY6553elWefhouiyfW+z2egAbtp9MHjdGio9 G6OOnsdZa71Mq3W2z8YCdGehJP08VsobAD6tjp/TsfApFdQl0AOsP0jCtpJJhJJsrwANApJJJBKk kkklKSSSSUpJJJJSkkkklKSSSSUpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy qkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKq SSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJ Kf/ZCg0KZW5kc3RyZWFtDWVuZG9iag04MyAwIG9iag08PC9TdGVtViAyMDAvRm9udE5hbWUvQXJp YWwtQmxhY2svRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRXZWlnaHQgOTAwL0ZsYWdzIDMyL0Rlc2Nl bnQgLTMwOS9Gb250QkJveFstMTk0IC0zMDcgMTY4OCAxMDgzXS9Bc2NlbnQgMTEwMC9Gb250RmFt aWx5KEFyaWFsKS9YSGVpZ2h0IDUxNS9DYXBIZWlnaHQgNzE4L1R5cGUvRm9udERlc2NyaXB0b3Iv SXRhbGljQW5nbGUgMD4+DWVuZG9iag04NCAwIG9iag08PC9TdGVtViAxMzYvRm9udE5hbWUvVGlt ZXNOZXdSb21hblBTLUJvbGRNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udFdlaWdodCA3MDAvRmxh Z3MgMzQvRGVzY2VudCAtMjE2L0ZvbnRCQm94Wy01NTggLTMwNyAyMDAwIDEwMjZdL0FzY2VudCA4 OTEvRm9udEZhbWlseShUaW1lcyBOZXcgUm9tYW4pL1hIZWlnaHQgLTU0Ni9DYXBIZWlnaHQgNjU2 L1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag04NSAwIG9iag08PC9T dGVtViAxNzMuMDU2L0ZvbnROYW1lL1ZlcmRhbmEtQm9sZEl0YWxpYy9Gb250U3RyZXRjaC9Ob3Jt YWwvRm9udFdlaWdodCA3MDAvRmxhZ3MgOTYvRGVzY2VudCAtMjA5L0ZvbnRCQm94Wy01MzcgLTMw MyAxNzA1IDEwMTRdL0FzY2VudCAxMDA1L0ZvbnRGYW1pbHkoVmVyZGFuYSkvQ2FwSGVpZ2h0IDcz NC9YSGVpZ2h0IDU0Ni9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIC0xNT4+DWVuZG9i ag04NiAwIG9iag08PC9TdWJ0eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciA4OCAwIFIv QmFzZUZvbnQvS0VITURJK0FyaWFsVW5pY29kZU1TL1dbM1syNzhdXS9DSURUb0dJRE1hcC9JZGVu dGl0eS9DSURTeXN0ZW1JbmZvPDwvU3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdp c3RyeShBZG9iZSk+Pi9EVyAxMDAwL1R5cGUvRm9udD4+DWVuZG9iag04NyAwIG9iag08PC9MZW5n dGggNjMwNTQvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgNDIwMjQ0Pj5zdHJlYW0NCkiJ7NNt bJ1VHQDw89zn9l66tfRllNaOzdu90G5zu13v6HqHm2Ubg82ABpBoQjSl69bOdW26DjcSAqJsIaLy uhEharAfjBrCtgB1TGKi8omiCSFCYvzgW+DDzEiIkZfeeu7owhdj1E8m/m7u75z/+T/nnOfcc84N SQhhYbgnpKH7MzcXe8b//LPfhnRJTIZbB++YLGy+qX1HbH8+hLrDe8b3jv54w4GpkK76TQj5fXv3 H9nz1pZ3jsa+Z0PI9g4PDex+6dKPF0K6/pMx1zscE83feuXV2J6M7RXDo5OH504//8vYfjyki1bs HxscyHxqRRyffSe2u0YHDo+/9mDt10Nue5wvFA4MjA6dv+7w6yFtuyL2+cP4xND4W3/8zpfi89/F 6Z4Nmeri8yEX4urzYXH/wnySTUJNWpsNlzT+fiZ+Q7E0U5xZ393R1NG0MhZJ7PzePTXh/WodYhCS 8PfMG/k16dfiHI3PJNNp36lMSIovh+K59d1Jx1Ud+TXvzuRKmTd+FEImzIRX87fUbL3wvmXP1FR7 53LVQc/FQSHJ1hRfLpeLxTi4dHH8oig38943ag4de/dI7lj2u1PvPzRVfe9dc4/nH8mVw8fCA6fT tpYF0+lVJxeG6bnzz4UkyS1szJ+ZOx/y6YbTudyihum0t7++cUFtmi5I8vFnN7fFjv31bWlrQ2tz Q745l8+3nEmLoW7u/Om6uuZFP03XhUuL53pKxb64lFKxqdRUKsayL1alpuZyOdZxlT09xXN9TbHR ONMX19zTs757ZT6kmVDTuaK68N5q0dKRyceiOf/IxOzRwxsrWyov35d5+M7Z45n7Ls/PFnJfnF2V q8s8M/uLfa13J0szo5W3Ko33HpvLrHjs3mTbE09UfjD82OxfQ6gJd899NX8o95PQGDrC1rAj7Eoe 7G8vlzdsvKylpW1BbW1bms1uyS9dsqShe936rRvjhpzedc2OnbF+dtPi9vZrN8fo1Jb40+NOFTZU t2dD2nu6VOpcWe26enV353S6sb+xsGXTrmxDV2NXV0N9XV2Sjw/7Fzd0NW3uWltsyNfX7tq4s6/Q tnTzpvbShg2LQ3Y6XXMqTZPq9uXmzp/M1cVEf219b+OOrVdf11ucTtee6m6qrb6uNl19ekFLY8t0 uvrkZc1n0u7QOnf+VGvrkjji5NK40NWnNm3qO5OuDeU4UXntdLru+WXL6i9b2h76p9NP9NeWF3Tn sou3bWt/Ic7Wnq4Oi+P+l4rNreVzPU3lcjkeRzywcixj0RfLeCp9sVkqxbPpu/Cw2mX+EKvH+JHi hXvXU30UT/3ClHFkjKuTxFGxVaqe8YVzvjhFLC6KjeqNvbw1f2Xn8ly+s3djay7fUfNRYsWiaiLJ 5JYv6+y8vNTTe1VH0/KmTLwqGzvyndWbEhMdLUm8MWn83+QPVV78QuPxFYN3dT1w/9vrH25fmOn4 4GzlLzuuvH/rrUeuP3Esqd/5UE1PUsm813bgzn2PNj9925WbZv/21JnZp29MXn+hMtP8/ZHMttnR modmp5KfV/qfqvSvrNkzsXzH2P6dT9709pulobYnP3vdjd++9cg3b3w7WdS59vYPrqi89sqq7119 dnElm8lUfnXoyf5XdtRnLjlxvLJ5Ktl04kTlpampcPGzHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAACA/9o4/AfOAgAAAAAAAAAAAMC/ljwNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/9+yvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAD/G0JdOB6S8OHnTPRhnIaW2Powzsb41/NxLsZ/mo/zYTC8G3uGbG3MrE5u m48z4dLk6Hycxvyj83E2xi/Ox7kYvxnjJMYhmcw0z8f58FJ6dPvI3pHJkTuHdhd2D0wOFAbHxo9M jOwdnix0bVtVWF8ul9b2dHd3F67Zu2egcMPYgbHJI+NDhW1jE+NjEwOTI2MH1hWu2b+/cGHIwcLE 0MGhiTuGdsfkxMjA/h8WRg4WBgqTEwO7h0YHJr5cGNtTuGV46J/OU/jK8MjgcGF04Ejh9qE40d6R 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 7f3SKYIODMkoEQheuidA2T0RdEaz0IhhGBhM4xvSF5fAIYM/Do7azGazKaMmCjklGMUETVGhc6Ln HrqHOOBm9N0Bjg0+ojlQVhY6BWNLMRLoctgbbgWknhpMq+8ELI6teu6/7kcc6k8CAknp/lUB4f4T dBihqAawM7OI6DpL7TLZaFZ2ZIvHAHGctiSn7dpbNwSjSQ+vIgJi1UbKBusDz81EUwANFVRfTqAr SrQQfLqhL0AVBXEq+8jTWIMWkWwSy+vNvRbU2D2qs3o+gMZv0NiCxnFs3NnTnwVUkEEeZ+O8lU2w VnYM6BRreTxjbLaWXWf3M3b9y9J9F7HSfR/pKaGPQbepoMWuXWuI2lX+oHmlMX5cj4N0ImgljLH/ BBgAtasOgg0KZW5kc3RyZWFtDWVuZG9iag04OCAwIG9iag08PC9TdGVtViAwL0ZvbnROYW1lL0tF SE1ESStBcmlhbFVuaWNvZGVNUy9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDg3IDAgUi9G b250V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTI3MC9Gb250QkJveFstMTAxMSAtMzMwIDIy NjAgMTA3OF0vQXNjZW50IDEwNjgvRm9udEZhbWlseShBcmlhbCBVbmljb2RlIE1TKS9DYXBIZWln aHQgMC9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNODkgMCBvYmoN PDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciAyMDU2IDAgUi9MYXN0Q2hhciAxNTAv V2lkdGhzWzI3OCAwIDAgMCAwIDAgMCAwIDMzMyAzMzMgMCAwIDI3OCAzMzMgMjc4IDAgNTU2IDU1 NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDAgMCAwIDAgMCAwIDAgNzIyIDcyMiA3 MjIgNzIyIDY2NyA2MTEgNzc4IDcyMiAyNzggNTU2IDAgNjExIDgzMyA3MjIgNzc4IDY2NyAwIDcy MiA2NjcgNjExIDAgNjY3IDk0NCA2NjcgNjY3IDYxMSAwIDAgMCAwIDAgMCA1NTYgNjExIDU1NiA2 MTEgNTU2IDMzMyA2MTEgNjExIDI3OCAyNzggNTU2IDI3OCA4ODkgNjExIDYxMSA2MTEgNjExIDM4 OSA1NTYgMzMzIDYxMSA1NTYgNzc4IDU1NiA1NTYgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyNzggMCAwIDAgNTU2XS9CYXNlRm9udC9BcmlhbC1Cb2xk TVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRv YmoNOTAgMCBvYmoNPDwvTGVuZ3RoIDQ3MjIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMTA5 MzY+PnN0cmVhbQ0KSInsV29sW1cVP++P/yROUrdpOxeL9rq3Nulix2naZGnIEje2E6dp1yROxXtd yt6L/VJ7S+LIcauuWqUIbWrlbgM0aRqagIlJbGUCXY9RpRKgISHEnwUNiY98qAQaXyh8GJNg3RrO ve85SkqLBNI+IOXdd98953f+3nvuu34GCQB8sAwKdJ7KxrvmAk++DND8CaJG7kKFtM2GewFapgGk /bOL5+alV1p+C7BtGaDhoXNzT8+e+u5v/o66P8b++4Jl5m9lVBkg8AryPQUEmlobbiD/PvIHCvOV iwO1Pz6GPNpsm5sr5cz39r/3PPr+GoBnZd68uOj6uHEQoM1AfbJgzlsP/7OtDWNlANTaYtla/N0H b+1DOcaXe0FFLVDecfVh9h6cxSE4mtjr6WqiuwM+r6RGSGw8thhTYiQgBbwNbsUjN8Lgapy3s/Gz q1Lcplf9q4c6pe2h7byHuw/vat3ZIntalF27aCTSfWRAfqSnp/tIhO53e7p7eg537ZWVdz45oXzp U7fUcumD1n1tuwOdkYAmSXtjvXtIVB/tmj5AZw49aqYOuPo+/oWr705IffbOM89dviy/Rnti4e2t X4gdDfs8flfXSPfDO/f0RY8OBvxTrQ99vvs4TujJrbbVttpW22pbbav9nzT8SIIf8M8R/k0CefHk tAf+gZwE9tUlTTu0As3Siw6tIv2qQ7uRftOhPfCM9CPuRW1A5HPyIYeWoUUec2gFcd2hVaSXHNqN 9AtIS0hjPvIbDo35KD64DgS6oBNbN1InoQg5KEMJlrDPQgWxJFJlWBRPE5EiUgvQgZJjMIeNwCRi 56CAsiXBWThaqH0Bn3nUtD3MIMe1i0LLwrGCNlyPoF+Co4VeuLQiUG5LkOZR88jN41iGpxArrdvc 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 iqdPPEvEc7N45otnnni6xTOTPzP3SUanNBj6Rfqtzhkz3dM6czrlzL3SnleT9d1tSfrC1rRWWY5q 1VvlluYn9abGJ3Vvs5TeHDHd3dUYbOxv/E2j0pBfqtfnleq7Ckr1nZ5SfUddsh5VK6XVrq6V62v3 18pR26XKqoaqrir28opEvdJn6L6MuXq5x9BLQQmGb8bwApQ9eJ+fZ+h5eJ+dZehZqLuNTE8m6iuW f13PANWvLNBrWIr+lekpupqieKY/gOWSIz3Tkh/wOJI1j5RMnoWRaZH1kfsjlaAmRWlSFwUJvirN IymKpIhkp4clyx42JHFDqyRJoYG1+S5XzqCT1uT0O3M39Evt/Y/k82d6XlG/1t5PnqINhQOS1Ll+ QJJXrO2PzckrMuut+/ZRXEZOf1x+4Vm2aVNcxvqc/gZeJjSvd7n85s8V/kku+LYLj/9+Vvn9Vdtc ZsXvwhC/lz/8eDEgyyvyCgcUBgUIChSmz2o3Gox6Y5dRafiMEmOzkW/kGbCV4bL91tsrs7z/GQBG j/WaDQplbmRzdHJlYW0NZW5kb2JqDTkxIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFu dEZvbnRzWzk4IDAgUl0vQmFzZUZvbnQvS0VITUhMK1dpbmdkaW5ncy1SZWd1bGFyL0VuY29kaW5n L0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTkyIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAv RGVzY2VuZGFudEZvbnRzWzEwMSAwIFJdL0Jhc2VGb250L0tFSE1HSytBcmlhbE1UL1RvVW5pY29k ZSAxNCAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNOTMgMCBvYmoN PDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbOTYgMCBSXS9CYXNlRm9udC9LRUhMTEor Q29yYmVsL1RvVW5pY29kZSAxMiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1l bmRvYmoNOTQgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbODYgMCBSXS9C YXNlRm9udC9LRUhNREkrQXJpYWxVbmljb2RlTVMvVG9Vbmljb2RlIDEzIDAgUi9FbmNvZGluZy9J ZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag05NSAwIG9iag08PC9TdGVtViA3Ni9Gb250TmFt ZS9LRUhMTEorQ29yYmVsL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgOTAgMCBSL0ZvbnRX ZWlnaHQgNDAwL0ZsYWdzIDQvRGVzY2VudCAtMjU2L0ZvbnRCQm94Wy01NTMgLTIzOSAxMTEwIDk0 OV0vQXNjZW50IDc0My9Gb250RmFtaWx5KENvcmJlbCkvQ2FwSGVpZ2h0IDY1Ni9YSGVpZ2h0IC01 MzEvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTk2IDAgb2JqDTw8 L1N1YnR5cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDk1IDAgUi9CYXNlRm9udC9LRUhM TEorQ29yYmVsL1dbM1syMDBdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag05NyAwIG9iag08PC9TdGVtViAwL0ZvbnROYW1lL0tFSE1ITCtX aW5nZGluZ3MtUmVndWxhci9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDk5IDAgUi9Gb250 V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTIxMC9Gb250QkJveFswIC0yMTEgMTM1OSA4OTld L0FzY2VudCA4OTgvRm9udEZhbWlseShXaW5nZGluZ3MpL0NhcEhlaWdodCAwL1R5cGUvRm9udERl c2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag05OCAwIG9iag08PC9TdWJ0eXBlL0NJREZv bnRUeXBlMi9Gb250RGVzY3JpcHRvciA5NyAwIFIvQmFzZUZvbnQvS0VITUhMK1dpbmdkaW5ncy1S ZWd1bGFyL1dbMTIxWzQ1OF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88PC9T dXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEwMDAv 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 q3AdTXl7aapwrrLf81wHuGbv84jX5a/jMb4WXxRt4boF2pOXYfRPvAzewH4r/CL3VY7h+O3wHlrw N9JRD8ZOUTgXxrNvFW0lHESdg6vG4n8Gc8es+xz32TnPaqaZf6vnUfV+vLuOFsjnbqBcdc+2HbT0 qtiRf67735DpVWBNIPn5bV4LvxfPp5fvuXPfS9v9pli+mSe/732iFJlhivk/SinGX6ElhbrHTrkD vgv3LRpy19GQ7MEMWb2Zd7QKrAUnqRIz6QBKm/EK/+wZUPP2aAV1d6NK9ToZjYdyrifn4y3QYUfa LOt91jnWDOss613WKdY0q5cVZ/WwYqwoq521jbWZ5WV5WG6WFn0a/h7cAt+Bm+BTcAl8CC6ALJgF M+AsmAYnwDtgAhwGQ2DAafMCN51lnWedYZ1mvcc6wXqK1cHazmpjCVYZy8WiaBT+FnwNroMvwOdg CXwELoIF8AE4Cd4EB8DueEutr9a3ycppL0V7hXVKWMeFNSmsfcJ6QVh7hDUsrF3C2iksU1hJ8bDc IEPyIfmAvF8GZb2sldUyICtlhfRLKb3SI10Sz7Bd4zZcRn9MM+zFITLSIfu3/khO8+/YaZdFYppd bZDxTCxotzXarqPOjCanrcxp2rExXU1mLpOmrYxN6nmbJtU3/n0LluwZiQNXab22iQT+ty6I9Z8J Fe1H1HKilopaTjSozSeoxRgcTz1I92j4r01bM1tSs2uv6m4iOScpZnbuYi+4yv3oT0oPm7H6wP52 p3Nbw8FD+hUPaTNUjm96BSaJ9wGVaupo6lApfNFUqlLNH/Op4KGtYf2KNpNPBRBeh6H8U4ABAJhg diINCmVuZHN0cmVhbQ1lbmRvYmoNMTAwIDAgb2JqDTw8L1N0ZW1WIDg4L0ZvbnROYW1lL0tFSE1H SytBcmlhbE1UL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgMTA4IDAgUi9Gb250V2VpZ2h0 IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTIxMS9Gb250QkJveFstNjY1IC0zMjUgMjAwMCAxMDA2XS9B c2NlbnQgOTA1L0ZvbnRGYW1pbHkoQXJpYWwpL0NhcEhlaWdodCA3MTgvWEhlaWdodCA1MTUvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTEwMSAwIG9iag08PC9TdWJ0 eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciAxMDAgMCBSL0Jhc2VGb250L0tFSE1HSytB cmlhbE1UL1dbNDA0WzYwNF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88PC9T dXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEwMDAv VHlwZS9Gb250Pj4NZW5kb2JqDTEwMiAwIG9iag08PC9TdGVtViA4OC9Gb250TmFtZS9LRUhNSEsr QXJpYWxNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDEwNCAwIFIvRm9udFdlaWdodCA0 MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02NjUgLTMyNSAyMDAwIDEwMDZdL0Fz Y2VudCA5MDUvRm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0IDcxOC9YSGVpZ2h0IDUxNS9UeXBl L0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMTAzIDAgb2JqDTw8L1N1YnR5 cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgMTAyIDAgUi9MYXN0Q2hhciAxNDYvV2lkdGhzWzI3 OCAwIDAgMCAwIDg4OSAwIDAgMCAwIDAgMCAyNzggMzMzIDI3OCAyNzggMCAwIDU1NiA1NTYgMCAw IDU1NiA1NTYgMCA1NTYgMjc4IDAgMCAwIDAgNTU2IDAgNjY3IDY2NyA3MjIgNzIyIDY2NyA2MTEg Nzc4IDcyMiAyNzggMCAwIDAgODMzIDAgNzc4IDY2NyAwIDcyMiA2NjcgNjExIDcyMiA2NjcgOTQ0 IDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTAwIDU1NiA1NTYgMjc4IDU1NiA1NTYgMjIyIDIy MiA1MDAgMjIyIDgzMyA1NTYgNTU2IDU1NiAwIDMzMyA1MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1 MDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyMjJd L0Jhc2VGb250L0tFSE1ISytBcmlhbE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5j 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 L0ZvbnRXZWlnaHQgNDAwL0ZsYWdzIDQvRGVzY2VudCAtMjU3L0ZvbnRCQm94Wy0xMjIgLTIzMCA2 MTkgOTUyXS9Bc2NlbnQgNzQyL0ZvbnRGYW1pbHkoQ29uc29sYXMpL0NhcEhlaWdodCA2NDAvWEhl aWdodCAtNTE1L1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag0xMDYg MCBvYmoNPDwvU3VidHlwZS9DSURGb250VHlwZTIvRm9udERlc2NyaXB0b3IgMTA1IDAgUi9CYXNl Rm9udC9LRUhMSkorQ29uc29sYXMvV1szWzU1MF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5 c3RlbUluZm88PC9TdXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2Jl KT4+L0RXIDEwMDAvVHlwZS9Gb250Pj4NZW5kb2JqDTEwNyAwIG9iag08PC9MZW5ndGggNTU1NC9G aWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoMSAxNDAwOD4+c3RyZWFtDQpIiexXe3BU1Rn/7t1HAiFh SSMJ7EjOek1Imid5KFAem+xuCCRBksDMBiPuTfZuspJk4+4SBYuAQsEFKyJVsJYi1RZoizeIbWgt 1aFap1VnaGstf9hCp7R2BAFnZDoC2f7O2ZuYAKXT1/Sf7Nm99/f9vu9853uce3aXJCJKofVkotK7 mkvKVh6M/JVoQgZYX3tflB08cWAD5CiROTnQ29Et7Up7l8j2ZaJxmR1dqwOrP1lYA9tX8bnUqan+ U9WLAafsxOWOThApDRLsp7wN+fbO7uiDG9vWFkC+QGTZ0RVqVw9OPvgkkXQE8rZu9cHetLeyphFl b4Q961G7tZ3H5v+OKMmJ9U/0hrXe+ytPQpf9AlFmBpnJCz7NYkf0SZRNM6j1KCnS7sNFE1MHpIoj Nlvy1KRjUhnJ9AXJSckkSeVOm1lO3WWz5U3ZPdX6jKlqIhuQbj2SZ35actH8q7+/+i4u59JnlZyT Sj44/dvTtotvTppVcvqN35yeUSpNckwSn4w0WUlSppeXVVYUy4pSWV42TZbKJt/C+duK5cqKebI5 7coik/eqWV7JqjtqzX5rePsX61c6lfzgbm3G4EDOjNRMlp6enZmWlpltsX92xmK/XGVuu7xH/rBo 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 e1S12OZO3fZkmasNGBLbGGmRiNkfXvjiEy5ugChJYxC0F6CFwwH49/PvBHYbdkE39L2HSxncRi6V WMaqhfhfQa3Ox+rU7XN+l4LjwaV8gC7WsDvqI/jZmob87wjGPMrtTlAL5qIdWL8lb+KOpmScYLK0 8Yy1eYfolwADALlDFV8NCmVuZHN0cmVhbQ1lbmRvYmoNMTA5IDAgb2JqDTw8L1N1YnR5cGUvVHJ1 ZVR5cGUvRm9udERlc2NyaXB0b3IgODUgMCBSL0xhc3RDaGFyIDMyL1dpZHRoc1szNDJdL0Jhc2VG b250L1ZlcmRhbmEtQm9sZEl0YWxpYy9GaXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29k aW5nL1R5cGUvRm9udD4+DWVuZG9iag0xMTAgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5k YW50Rm9udHNbMTA2IDAgUl0vQmFzZUZvbnQvS0VITEpKK0NvbnNvbGFzL1RvVW5pY29kZSAxMSAw IFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTExIDAgb2JqDTw8L1N1 YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzg2IDAgUl0vQmFzZUZvbnQvSktBRkFNK0FyaWFs VW5pY29kZU1TL1RvVW5pY29kZSAyNyAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+ Pg1lbmRvYmoNMTEyIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzk2IDAg Ul0vQmFzZUZvbnQvSktBRU5MK0NvcmJlbC9Ub1VuaWNvZGUgMjYgMCBSL0VuY29kaW5nL0lkZW50 aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTExMyAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2Nl bmRhbnRGb250c1sxMDYgMCBSXS9CYXNlRm9udC9KS0FFTUwrQ29uc29sYXMvVG9Vbmljb2RlIDI1 IDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag0xMTQgMCBvYmoNPDwv U3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciAyMDU4IDAgUi9MYXN0Q2hhciAxNDgvV2lk dGhzWzI3OCAwIDAgMCAwIDAgMCAxOTEgMzMzIDMzMyAwIDAgMjc4IDMzMyAyNzggMjc4IDU1NiAw IDAgMCA1NTYgNTU2IDAgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDY2NyA2NjcgNzIyIDcyMiA2Njcg MCA3NzggNzIyIDI3OCAwIDAgNTU2IDgzMyA3MjIgMCA2NjcgMCA3MjIgNjY3IDYxMSA3MjIgMCA5 NDQgMCA2NjcgMCAwIDAgMCAwIDAgMCA1NTYgNTU2IDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIy MiAyMjIgNTAwIDIyMiA4MzMgNTU2IDU1NiA1NTYgNTU2IDMzMyA1MDAgMjc4IDU1NiA1MDAgNzIy IDUwMCA1MDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAyMjIgMzMzIDMzM10vQmFzZUZvbnQvQXJpYWxNVC9GaXJzdENoYXIgMzIvRW5jb2RpbmcvV2lu QW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag0xMTUgMCBvYmoNPDwvU3VidHlwZS9UeXBl MC9EZXNjZW5kYW50Rm9udHNbOTggMCBSXS9CYXNlRm9udC9KS0FGRkErV2luZ2RpbmdzLVJlZ3Vs YXIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTE2IDAgb2JqDTw8L1N1 YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgMjA1NiAwIFIvTGFzdENoYXIgMTUwL1dpZHRo c1syNzggMCAwIDAgMCAwIDAgMCAzMzMgMzMzIDAgMCAyNzggMzMzIDI3OCAwIDU1NiA1NTYgNTU2 IDU1NiA1NTYgNTU2IDAgNTU2IDU1NiA1NTYgMzMzIDAgMCAwIDAgMCAwIDcyMiA3MjIgNzIyIDcy MiA2NjcgNjExIDAgNzIyIDI3OCA1NTYgMCA2MTEgODMzIDcyMiA3NzggNjY3IDAgNzIyIDY2NyA2 MTEgNzIyIDAgOTQ0IDAgMCA2MTEgMCAwIDAgMCAwIDAgNTU2IDYxMSA1NTYgNjExIDU1NiAzMzMg NjExIDYxMSAyNzggMCA1NTYgMjc4IDg4OSA2MTEgNjExIDYxMSAwIDM4OSA1NTYgMzMzIDYxMSA1 NTYgNzc4IDU1NiA1NTYgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDU1Nl0vQmFzZUZvbnQvQXJpYWwtQm9sZE1UL0ZpcnN0Q2hhciAzMi9F bmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTExNyAwIG9iag08PC9T dWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1sxMTkgMCBSXS9CYXNlRm9udC9MSExMSUUrU2lt U3VuL1RvVW5pY29kZSAzOSAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRv YmoNMTE4IDAgb2JqDTw8L1N0ZW1WIDAvRm9udE5hbWUvTEhMTElFK1NpbVN1bi9Gb250U3RyZXRj aC9Ob3JtYWwvRm9udEZpbGUyIDEyMCAwIFIvRm9udFdlaWdodCA0MDAvRmxhZ3MgNC9EZXNjZW50 IC0xNDAvRm9udEJCb3hbLTggLTE0NSAxMDAwIDg1OV0vQXNjZW50IDg1OS9Gb250RmFtaWx5KFNp bVN1bikvQ2FwSGVpZ2h0IDAvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwL0xhbmcv emgtQ04+Pg1lbmRvYmoNMTE5IDAgb2JqDTw8L1N1YnR5cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNj cmlwdG9yIDExOCAwIFIvQmFzZUZvbnQvTEhMTElFK1NpbVN1bi9XWzNbNTAwXThbNTAwXTExWzUw MCA1MDBdMTZbNTAwXTE4WzUwMCA1MDAgNTAwIDUwMCA1MDBdMjVbNTAwIDUwMF0yOFs1MDBdMzZb NTAwIDUwMF00MFs1MDBdNDNbNTAwXTUxWzUwMF01NFs1MDBdNjFbNTAwXTcxWzUwMF04MVs1MDAg NTAwXTg4WzUwMF05Mls1MDBdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag0xMjAgMCBvYmoNPDwvTGVuZ3RoIDk4OTM0L0ZpbHRlci9GbGF0 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 5rRaQ8l5fG68Q/KEnlBj/Bzfpe9N/7zmE+nyblkXdtD2kp7yVoq/NuvGzKmmO2zOmszXGMtd93mV m8+/9WZFd3QbGdqvsb83KyqRfYZll1pdbuVKl7/uKaI4IyTONaHOnHN24BpUOECE7OiEZ3UZ32Ou BiSHt4QxMyrFmbxJraBe3tI5Y/YTYQPCkzp4jrWeWLTZPC3fagxms8Ub473iJ1322BaZQlqT/apx wg5Eem04W2M8XH1ZmF1jZuTMTda5yzewoM9+UeNeNcZb7KuhebMiZEsjjyyVon2Cnh2+VBf3omyH pTUmrkeDah5n7EzfQ+Nr2lMXN13T+jV98drcBPdmYikT4ZI3Eq0dhZnKWYMrMUBvIOQ7E3atFlNM UdwJeHJM1Sa26uIcGs0NThuyXqplS3c8UZRE4l/Kgft8imWjg5xV/D0YvPPmJGJzPo1zlXO//lD9 4r5wjkfuc/fJ2vnpy7/SxFf31VLN7rV7rOZqdI/rc8IzVoN7tz4HjMd1fMfzf757/KZ6qv7+/Q/3 8P71199+9/63h++fqubtz+vPyzdP1XXqXadeTb23P669NLzKw6s0fJaGV2n4LA1dXnVpWKWhS8Pq 5ZvqM/5z7p8BAOTrikwNCmVuZHN0cmVhbQ1lbmRvYmoNMTIxIDAgb2JqDTw8L1N1YnR5cGUvVHlw ZTAvRGVzY2VuZGFudEZvbnRzWzIwODEgMCBSXS9CYXNlRm9udC9MSExMSkYrU3ltYm9sTVQvVG9V bmljb2RlIDQwIDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag0xMjIg MCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbNDMgMCBSXS9CYXNlRm9udC9M SExMUEYrQ2FsaWJyaS1Cb2xkL1RvVW5pY29kZSA0NCAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9U eXBlL0ZvbnQ+Pg1lbmRvYmoNMTIzIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZv bnRzWzIwNzggMCBSXS9CYXNlRm9udC9MSExMRUQrQ2FsaWJyaS9Ub1VuaWNvZGUgMzggMCBSL0Vu Y29kaW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTEyNCAwIG9iag08PC9TdWJ0eXBl L1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDIwNTggMCBSL0xhc3RDaGFyIDgzL1dpZHRoc1syNzgg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgNjY3IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjY3XS9CYXNlRm9u dC9BcmlhbE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250 Pj4NZW5kb2JqDTEyNSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDIw NTYgMCBSL0xhc3RDaGFyIDEyMi9XaWR0aHNbMjc4IDAgMCAwIDAgMCA3MjIgMCAwIDAgMCA1ODQg Mjc4IDMzMyAyNzggMCA1NTYgNTU2IDU1NiA1NTYgMCA1NTYgNTU2IDU1NiA1NTYgNTU2IDAgMCAw IDAgMCAwIDAgMCA3MjIgNzIyIDAgMCAwIDAgMCAwIDU1NiAwIDAgODMzIDAgNzc4IDY2NyAwIDAg NjY3IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDYxMSA1NTYgNjExIDU1NiAzMzMgNjEx IDYxMSAyNzggMjc4IDAgMjc4IDg4OSA2MTEgNjExIDYxMSAwIDM4OSA1NTYgMzMzIDYxMSA1NTYg Nzc4IDAgNTU2IDUwMF0vQmFzZUZvbnQvQXJpYWwtQm9sZE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGlu Zy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTEyNiAwIG9iag08PC9TdWJ0eXBl L1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDIwNTYgMCBSL0xhc3RDaGFyIDExNy9XaWR0aHNbMjc4 IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1 NiA1NTYgNTU2IDU1NiAwIDAgMCAwIDAgMCAwIDcyMiA3MjIgNzIyIDAgMCAwIDc3OCA3MjIgMCAw IDAgNjExIDAgMCAwIDY2NyAwIDAgNjY3IDAgMCAwIDAgNjY3IDY2NyAwIDAgMCAwIDAgMCAwIDU1 NiAwIDAgMCA1NTYgMCA2MTEgMCAyNzggMCAwIDI3OCA4ODkgNjExIDYxMSAwIDYxMSAwIDAgMCA2 MTFdL0Jhc2VGb250L0FyaWFsLUJvbGRNVC9GaXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVu Y29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag0xMjcgMCBvYmoNPDwvU3VidHlwZS9UcnVlVHlwZS9G b250RGVzY3JpcHRvciAxMDIgMCBSL0xhc3RDaGFyIDgzL1dpZHRoc1syNzggMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDI3OCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCA2NjcgMCAwIDcyMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDY2N10vQmFzZUZvbnQvS0VITUhL K0FyaWFsTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+ Pg1lbmRvYmoNMTI4IDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgODUg MCBSL0xhc3RDaGFyIDMyL1dpZHRoc1szNDJdL0Jhc2VGb250L1ZlcmRhbmEtQm9sZEl0YWxpYy9G aXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag0x MjkgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbMTA2IDAgUl0vQmFzZUZv bnQvTEJFSklPK0NvbnNvbGFzL1RvVW5pY29kZSA1NiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9U eXBlL0ZvbnQ+Pg1lbmRvYmoNMTMwIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZv bnRzWzk2IDAgUl0vQmFzZUZvbnQvTEJFSktPK0NvcmJlbC9Ub1VuaWNvZGUgNTcgMCBSL0VuY29k aW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTEzMSAwIG9iag08PC9TdWJ0eXBlL1R5 cGUwL0Rlc2NlbmRhbnRGb250c1s5OCAwIFJdL0Jhc2VGb250L0xCRUxEQytXaW5nZGluZ3MtUmVn dWxhci9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag0xMzIgMCBvYmoNPDwv UmVjdFs0MzYuMDggMzk0LjM5MyA1MzcuNzUgNDAxLjkyM10vU3VidHlwZS9MaW5rL0JTPDwvUy9T L1cgMC9UeXBlL0JvcmRlcj4+L0EgMTMzIDAgUi9GIDQvSC9JL1N0cnVjdFBhcmVudCA2L0JvcmRl clswIDAgMF0vVHlwZS9Bbm5vdD4+DWVuZG9iag0xMzMgMCBvYmoNPDwvVVJJKGh0dHA6Ly93d3cu eWluZ2ppZXNoZW5nLmNvbS9qb2ItMDAwLTQzMS0wMDUuaHRtbCkvUy9VUkk+Pg1lbmRvYmoNMTM0 IDAgb2JqDTw8L1N1YnR5cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDEzNSAwIFIvQmFz ZUZvbnQvTEJFS09EK0NvcmJlbC1Cb2xkL1dbM1syMDZdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9D SURTeXN0ZW1JbmZvPDwvU3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShB ZG9iZSk+Pi9EVyAxMDAwL1R5cGUvRm9udD4+DWVuZG9iag0xMzUgMCBvYmoNPDwvU3RlbVYgMTE2 L0ZvbnROYW1lL0xCRUtPRCtDb3JiZWwtQm9sZC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUy IDEzNiAwIFIvRm9udFdlaWdodCA3MDAvRmxhZ3MgNC9EZXNjZW50IC0yNTYvRm9udEJCb3hbLTU1 NiAtMjM5IDExNTUgOTQ5XS9Bc2NlbnQgNzQzL0ZvbnRGYW1pbHkoQ29yYmVsKS9DYXBIZWlnaHQg NjU2L1hIZWlnaHQgLTUzMS9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRv YmoNMTM2IDAgb2JqDTw8L0xlbmd0aCA0NjY3L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDEw ODY0Pj5zdHJlYW0NCkiJ7FdtbFtXGX7vhz8SJ5nTLxIM7fFObNLFjtO0SdOQNa6/mjQNbeJU3JuV 4Rv7pjZL4shxq65qpfwYauVu8BuEoEiTtgKajks1JaOgAtVEEZWQQEjAhjoJjT+UD1WVEN0a3nPu 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 dwBf4YeWDQplbmRzdHJlYW0NZW5kb2JqDTEzNyAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2Nl bmRhbnRGb250c1sxMTkgMCBSXS9CYXNlRm9udC9MQkVLREErU2ltU3VuL1RvVW5pY29kZSA1OCAw IFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTM4IDAgb2JqDTw8L1N1 YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzg2IDAgUl0vQmFzZUZvbnQvTEJFSlBPK0FyaWFs VW5pY29kZU1TL1RvVW5pY29kZSA1OSAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+ Pg1lbmRvYmoNMTM5IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzEwMSAw IFJdL0Jhc2VGb250L0xCRUtFQitBcmlhbE1UL1RvVW5pY29kZSA2MCAwIFIvRW5jb2RpbmcvSWRl bnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTQwIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVz Y2VuZGFudEZvbnRzWzEzNCAwIFJdL0Jhc2VGb250L0xCRUtPRCtDb3JiZWwtQm9sZC9Ub1VuaWNv ZGUgNjEgMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTE0MSAwIG9i ag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1sxMTkgMCBSXS9CYXNlRm9udC9HT0lN UFArU2ltU3VuL1RvVW5pY29kZSA3NiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+ Pg1lbmRvYmoNMTQyIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzk4IDAg Ul0vQmFzZUZvbnQvR09JTkNCK1dpbmdkaW5ncy1SZWd1bGFyL0VuY29kaW5nL0lkZW50aXR5LUgv VHlwZS9Gb250Pj4NZW5kb2JqDTE0MyAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRG b250c1s5NiAwIFJdL0Jhc2VGb250L0dPSU1EUCtDb3JiZWwvVG9Vbmljb2RlIDc0IDAgUi9FbmNv ZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag0xNDQgMCBvYmoNPDwvU3VidHlwZS9U eXBlMC9EZXNjZW5kYW50Rm9udHNbODYgMCBSXS9CYXNlRm9udC9HT0lNTU4rQXJpYWxVbmljb2Rl TVMvVG9Vbmljb2RlIDc1IDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9i ag0xNDUgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbMTM0IDAgUl0vQmFz ZUZvbnQvR09JT0FCK0NvcmJlbC1Cb2xkL1RvVW5pY29kZSA3NyAwIFIvRW5jb2RpbmcvSWRlbnRp dHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTQ2IDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9u dERlc2NyaXB0b3IgMjA1NiAwIFIvTGFzdENoYXIgMTIxL1dpZHRoc1syNzggMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgMCA1NTYgNTU2IDU1NiAw IDAgMCAwIDAgMCAwIDAgNzIyIDcyMiAwIDAgMCAwIDAgMCAwIDAgNjExIDAgMCAwIDAgMCA3MjIg NjY3IDAgMCAwIDAgMCAwIDYxMSAwIDAgMCAwIDAgMCA1NTYgNjExIDAgMCA1NTYgMCA2MTEgNjEx IDI3OCAwIDAgMCAwIDYxMSA2MTEgMCAwIDM4OSAwIDMzMyA2MTEgMCAwIDAgNTU2XS9CYXNlRm9u dC9BcmlhbC1Cb2xkTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBl L0ZvbnQ+Pg1lbmRvYmoNMTQ3IDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0 b3IgMjA1OCAwIFIvTGFzdENoYXIgODMvV2lkdGhzWzI3OCAwIDAgMCAwIDg4OSAwIDAgMCAwIDAg MCAwIDMzMyAwIDAgNTU2IDAgMCAwIDU1NiA1NTYgMCA1NTYgMCAwIDAgMCAwIDAgMCAwIDAgMCA2 NjcgMCAwIDY2NyAwIDAgNzIyIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjY3XS9CYXNlRm9udC9Bcmlh bE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5k b2JqDTE0OCAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDcyIDAgUi9M YXN0Q2hhciA4My9XaWR0aHNbNjg2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjg0 XS9CYXNlRm9udC9WZXJkYW5hL0ZpcnN0Q2hhciA2Ni9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmcv VHlwZS9Gb250Pj4NZW5kb2JqDTE0OSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNj cmlwdG9yIDg1IDAgUi9MYXN0Q2hhciAzMi9XaWR0aHNbMzQyXS9CYXNlRm9udC9WZXJkYW5hLUJv bGRJdGFsaWMvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+ Pg1lbmRvYmoNMTUwIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzEwNiAw IFJdL0Jhc2VGb250L0dPSU1CUCtDb25zb2xhcy9Ub1VuaWNvZGUgNzMgMCBSL0VuY29kaW5nL0lk ZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTE1MSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBl L0ZvbnREZXNjcmlwdG9yIDgzIDAgUi9MYXN0Q2hhciAxMjIvV2lkdGhzWzMzMyAwIDAgMCA2Njcg MCAwIDAgMCAwIDAgNjYwIDAgMzMzIDAgMCA2NjcgNjY3IDY2NyA2NjcgMCA2NjcgNjY3IDAgNjY3 IDY2NyAzMzMgMCAwIDAgMCAwIDAgNzc4IDc3OCA3NzggNzc4IDcyMiA2NjcgMCAwIDM4OSAwIDAg NjY3IDk0NCA4MzMgODMzIDcyMiAwIDc3OCA3MjIgNzIyIDgzMyAwIDEwMDAgMCAwIDAgMCAwIDAg MCAwIDAgNjY3IDAgNjY3IDY2NyA2NjcgMzg5IDY2NyA2NjcgMzMzIDAgNjY3IDMzMyAxMDAwIDY2 NyA2NjcgNjY3IDY2NyA0NDQgNjExIDQ0NCA2NjcgNjExIDk0NCA2NjcgNjExIDU1Nl0vQmFzZUZv bnQvQXJpYWwtQmxhY2svRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBl L0ZvbnQ+Pg1lbmRvYmoNMTUyIDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0 b3IgMjA1OCAwIFIvTGFzdENoYXIgMTQ2L1dpZHRoc1syNzggMCAwIDAgMCA4ODkgMCAwIDMzMyAz MzMgMCA1ODQgMjc4IDMzMyAyNzggMjc4IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYg NTU2IDU1NiAyNzggMCAwIDAgMCAwIDEwMTUgNjY3IDY2NyA3MjIgNzIyIDY2NyA2MTEgMCA3MjIg Mjc4IDAgMCA1NTYgODMzIDAgMCA2NjcgMCAwIDY2NyA2MTEgNzIyIDAgOTQ0IDY2NyA2NjcgMCAw IDAgMCAwIDAgMCA1NTYgNTU2IDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAyMjIgNTAwIDIy MiA4MzMgNTU2IDU1NiA1NTYgNTU2IDMzMyA1MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1MDAgNTAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyMjJdL0Jhc2VG b250L0FyaWFsTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0Zv bnQ+Pg1lbmRvYmoNMTUzIDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3Ig MjA1NiAwIFIvTGFzdENoYXIgMTIxL1dpZHRoc1syNzggMCAwIDAgMCAwIDcyMiAwIDAgMCAwIDAg MCAwIDI3OCAwIDAgMCAwIDAgMCA1NTYgMCAwIDAgMCAzMzMgMCAwIDAgMCAwIDAgMCAwIDcyMiAw IDAgMCAwIDAgMCAwIDAgNjExIDgzMyAwIDc3OCAwIDAgMCA2NjcgNjExIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDU1NiA2MTEgNTU2IDYxMSA1NTYgMzMzIDYxMSA2MTEgMjc4IDAgNTU2IDI3OCA4 ODkgNjExIDYxMSA2MTEgMCAzODkgNTU2IDMzMyA2MTEgNTU2IDc3OCAwIDU1Nl0vQmFzZUZvbnQv QXJpYWwtQm9sZE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9G b250Pj4NZW5kb2JqDTE1NCAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9y IDg0IDAgUi9MYXN0Q2hhciA1Ny9XaWR0aHNbMjUwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDUwMCAwIDUwMCA1MDAgNTAwIDUwMCAwIDAgNTAwIDUwMF0vQmFzZUZvbnQvVGltZXNOZXdS b21hblBTLUJvbGRNVC9GaXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUv Rm9udD4+DWVuZG9iag0xNTUgMCBvYmoNPDwvRmlyc3QgMTU2IDAgUi9Db3VudCA4L0xhc3QgMTU3 IDAgUj4+DWVuZG9iag0xNTYgMCBvYmoNPDwvRmlyc3QgMTU5IDAgUi9QYXJlbnQgMTU1IDAgUi9B IDE2MCAwIFIvTmV4dCAxNTcgMCBSL0NvdW50IDYvTGFzdCAxNjEgMCBSL1NFIDE5OSAwIFIvVGl0 bGUoQ29udGludW91cyBBcHBsaWNhdGlvbiBvZiBCZWhhdmlvci1CYXNlZCBTYWZldHkgMjAwOS5w ZGYpPj4NZW5kb2JqDTE1NyAwIG9iag08PC9QYXJlbnQgMTU1IDAgUi9BIDE1OCAwIFIvUHJldiAx NTYgMCBSL1NFIDE5MCAwIFIvVGl0bGUoUmVnaXN0cmF0aW9uRm9ybS1XaGl0bmV5KT4+DWVuZG9i ag0xNTggMCBvYmoNPDwvRFs3OCAwIFIvRml0SCA4NDZdL1MvR29Ubz4+DWVuZG9iag0xNTkgMCBv YmoNPDwvUGFyZW50IDE1NiAwIFIvQSAxNzEgMCBSL05leHQgMTY5IDAgUi9TRSAyMDIgMCBSL1Rp dGxlKEJCUy1Db3Zlci1lbi5wZGYpPj4NZW5kb2JqDTE2MCAwIG9iag08PC9EWzIwNDkgMCBSL0Zp dEggODQ2XS9TL0dvVG8+Pg1lbmRvYmoNMTYxIDAgb2JqDTw8L1BhcmVudCAxNTYgMCBSL0EgMTYy IDAgUi9QcmV2IDE2MyAwIFIvU0UgMjA2IDAgUi9UaXRsZShCQlMtZGF5dHdvLWNuKT4+DWVuZG9i ag0xNjIgMCBvYmoNPDwvRFs2MiAwIFIvRml0SCA4NDZdL1MvR29Ubz4+DWVuZG9iag0xNjMgMCBv YmoNPDwvUGFyZW50IDE1NiAwIFIvQSAxNjQgMCBSL05leHQgMTYxIDAgUi9QcmV2IDE2NSAwIFIv U0UgMTk3IDAgUi9UaXRsZShCQlMtZGF5b25lLWNuKT4+DWVuZG9iag0xNjQgMCBvYmoNPDwvRFs0 NSAwIFIvRml0SCA4NDZdL1MvR29Ubz4+DWVuZG9iag0xNjUgMCBvYmoNPDwvUGFyZW50IDE1NiAw IFIvQSAxNjYgMCBSL05leHQgMTYzIDAgUi9QcmV2IDE2NyAwIFIvU0UgMjA1IDAgUi9UaXRsZShC QlMtQ292ZXItY24pPj4NZW5kb2JqDTE2NiAwIG9iag08PC9EWzI4IDAgUi9GaXRIIDg0Nl0vUy9H b1RvPj4NZW5kb2JqDTE2NyAwIG9iag08PC9QYXJlbnQgMTU2IDAgUi9BIDE2OCAwIFIvTmV4dCAx NjUgMCBSL1ByZXYgMTY5IDAgUi9TRSAyMDQgMCBSL1RpdGxlKEJCUy1kYXl0d28tZW4pPj4NZW5k b2JqDTE2OCAwIG9iag08PC9EWzE1IDAgUi9GaXRIIDg0Nl0vUy9Hb1RvPj4NZW5kb2JqDTE2OSAw IG9iag08PC9QYXJlbnQgMTU2IDAgUi9BIDE3MCAwIFIvTmV4dCAxNjcgMCBSL1ByZXYgMTU5IDAg Ui9TRSAyMDMgMCBSL1RpdGxlKEJCUy1kYXlvbmUtZW4pPj4NZW5kb2JqDTE3MCAwIG9iag08PC9E WzEgMCBSL0ZpdEggODQ2XS9TL0dvVG8+Pg1lbmRvYmoNMTcxIDAgb2JqDTw8L0RbMjA0OSAwIFIv Rml0SCA4NDZdL1MvR29Ubz4+DWVuZG9iag0xNzIgMCBvYmoNPDwvSyAxNzMgMCBSL1BhcmVudFRy ZWUgMTc0IDAgUi9QYXJlbnRUcmVlTmV4dEtleSA4L1JvbGVNYXAgMTc1IDAgUi9UeXBlL1N0cnVj dFRyZWVSb290L0NsYXNzTWFwIDE3NiAwIFI+Pg1lbmRvYmoNMTczIDAgb2JqDTw8L0tbMTk5IDAg UiAxOTAgMCBSXS9QIDE3MiAwIFIvUy9Eb2N1bWVudD4+DWVuZG9iag0xNzQgMCBvYmoNPDwvTnVt c1swWzE0ODQgMCBSIDE0ODUgMCBSIDE0ODYgMCBSIDE0ODcgMCBSIDE0ODggMCBSIDE0ODkgMCBS IDE0OTAgMCBSIDE0OTEgMCBSIDE0OTIgMCBSIDE0OTMgMCBSIDE2MTAgMCBSIDE2MTEgMCBSIDE2 MTIgMCBSIDE2MTMgMCBSIDE2MTQgMCBSIDE2MTUgMCBSIDE2MTYgMCBSIDE1OTYgMCBSIDE1OTcg MCBSIDE1OTggMCBSIDE2MDcgMCBSIDE2MDEgMCBSIDE2MDIgMCBSIDE1MzggMCBSIDE1OTIgMCBS IDE1OTQgMCBSIDE1ODggMCBSIDE1OTAgMCBSIDE1ODQgMCBSIDE1ODYgMCBSIDE1ODAgMCBSIDE1 ODIgMCBSIDE1NzYgMCBSIDE1NzggMCBSIDE1NzIgMCBSIDE1NzQgMCBSIDE1NjggMCBSIDE1NzAg MCBSIDE1NjQgMCBSIDE1NjYgMCBSIDE1NjAgMCBSIDE1NjIgMCBSIDE1NTYgMCBSIDE1NTggMCBS IDE1NTIgMCBSIDE1NTQgMCBSIDE1MzQgMCBSIDE1MzUgMCBSIDE1MzAgMCBSIDE1MzEgMCBSIDE1 MjYgMCBSIDE1MjcgMCBSIDE1MTYgMCBSIDE1MTcgMCBSIDE1MTggMCBSIDE1MTkgMCBSIDE1MjAg MCBSIDE1MTAgMCBSIDE1MTEgMCBSIDE1MTIgMCBSIDE1MDggMCBSIDE1MDQgMCBSXTFbMTAzNSAw IFIgMTI3NyAwIFIgMTAzNiAwIFIgMTA1NyAwIFIgMTA1OCAwIFIgMTQ3MyAwIFIgMTQ3MyAwIFIg MTQ3MyAwIFIgMTQ3MyAwIFIgMTQ3NCAwIFIgMTQ3NSAwIFIgMTQ3NiAwIFIgMTM4MyAwIFIgMTEz NCAwIFIgMTM4NCAwIFIgMTM4NSAwIFIgMTI4MyAwIFIgMTM4NiAwIFIgMTI4NiAwIFIgMTM4NyAw IFIgMTM4OCAwIFIgMTM4OSAwIFIgMTM5MCAwIFIgMTM5MSAwIFIgMTM5MiAwIFIgMTM5MyAwIFIg MTM5NCAwIFIgMTM5NSAwIFIgMTI3NSAwIFIgMTM5NiAwIFIgMTM5NyAwIFIgMTM5OCAwIFIgMTM5 OSAwIFIgMTQwMCAwIFIgMTQwMSAwIFIgMTQwMiAwIFIgMTI3MyAwIFIgMTQwMyAwIFIgMTI5NiAw IFIgMTEzOCAwIFIgMTQwNCAwIFIgMTI5OCAwIFIgMTIyMiAwIFIgMTIyNCAwIFIgMTQwNSAwIFIg MTQwNiAwIFIgMTQwNyAwIFIgMTQwOCAwIFIgMTQwOSAwIFIgMTQxMCAwIFIgMTQxMSAwIFIgMTQx MiAwIFIgMTMzNCAwIFIgMTMzNiAwIFIgMTQxMyAwIFIgMTMwMiAwIFIgMTQxNCAwIFIgMTQxNSAw IFIgMTQxNiAwIFIgMTQxNyAwIFIgMTQxOCAwIFIgMTQxOSAwIFIgMTQyMCAwIFIgMTQyMSAwIFIg MTQyMiAwIFIgMTA4NiAwIFIgMTA4OCAwIFIgMTQyMyAwIFIgMTQyNCAwIFIgMTQyNSAwIFIgMTQy NiAwIFIgMTQyNyAwIFIgMTI4NSAwIFIgMTI4NyAwIFIgMTI4OCAwIFIgMTI4OSAwIFIgMTI5MCAw IFIgMTI5MSAwIFIgMTI5MiAwIFIgMTM3MiAwIFIgMTM3NCAwIFIgMTM2OCAwIFIgMTM3MCAwIFIg MTM2NCAwIFIgMTM2NiAwIFIgMTI5NCAwIFIgMTI5NSAwIFIgMTI5NyAwIFIgMTI5OSAwIFIgMTMw MCAwIFIgMTM1MCAwIFIgMTM1MiAwIFIgMTM0NiAwIFIgMTM0OCAwIFIgMTM0MiAwIFIgMTM0NCAw IFIgMTMzOCAwIFIgMTM0MCAwIFIgMTMwMyAwIFIgMTMwNCAwIFIgMTMwNSAwIFIgMTMwNiAwIFIg MTMwNyAwIFIgMTMwOCAwIFIgMTMwOSAwIFIgMTMxMCAwIFIgMTMxMSAwIFIgMTMxMiAwIFIgMTMx MyAwIFIgMTMxNCAwIFIgMTI3OSAwIFIgMTI4MCAwIFIgMTI3NyAwIFIgMTI3NSAwIFIgMTI3NSAw IFIgMTI3MyAwIFIgMTI3MSAwIFIgMTI2OSAwIFIgMTA1OSAwIFIgMTE0MCAwIFIgMTE0MSAwIFIg MTI2NCAwIFIgMTI2NiAwIFIgMTI2MCAwIFIgMTI2MiAwIFIgMTI1NiAwIFIgMTI1OCAwIFIgMTE0 MyAwIFIgMTE0NCAwIFIgMTE0NSAwIFIgMTE0NiAwIFIgMTE0NyAwIFIgMTI0NCAwIFIgMTI0NiAw IFIgMTI0MCAwIFIgMTI0MiAwIFIgMTIzNiAwIFIgMTIzOCAwIFIgMTE0OSAwIFIgMTE1MCAwIFIg MTE1MSAwIFIgMTE1MiAwIFIgMTE1MyAwIFIgMTE1NCAwIFIgMTE1NSAwIFIgMTIyNCAwIFIgMTIx OCAwIFIgMTIyMCAwIFIgMTIxNCAwIFIgMTIxNiAwIFIgMTIxMCAwIFIgMTIxMiAwIFIgMTIwNiAw IFIgMTIwOCAwIFIgMTE1NyAwIFIgMTE1OCAwIFIgMTE1OSAwIFIgMTE2MCAwIFIgMTE2MSAwIFIg MTE5MiAwIFIgMTE5NCAwIFIgMTE4OCAwIFIgMTE5MCAwIFIgMTE4NCAwIFIgMTE4NiAwIFIgMTE4 MCAwIFIgMTE4MiAwIFIgMTE2MyAwIFIgMTE2NCAwIFIgMTE2NSAwIFIgMTE2NiAwIFIgMTE2NyAw IFIgMTE2OCAwIFIgMTEzOCAwIFIgMTEzNiAwIFIgMTEzNCAwIFIgMTEzMiAwIFIgMTEzMCAwIFIg MTEyOCAwIFIgMTEyNiAwIFIgMTEyNCAwIFIgMTExMCAwIFIgMTExMSAwIFIgMTExMiAwIFIgMTEx MyAwIFIgMTExNCAwIFIgMTExNSAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAw IFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIg MTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTExNiAwIFIgMTEx NiAwIFIgMTExNiAwIFIgMTA2MyAwIFIgMTEwNiAwIFIgMTEwOCAwIFIgMTEwMiAwIFIgMTEwNCAw IFIgMTA5OCAwIFIgMTEwMCAwIFIgMTA5NCAwIFIgMTA5NiAwIFIgMTA5MCAwIFIgMTA5MiAwIFIg MTA4OCAwIFIgMTA4MiAwIFIgMTA4NCAwIFIgMTA3OCAwIFIgMTA4MCAwIFIgMTA2NSAwIFIgMTA2 NiAwIFJdMls3MTAgMCBSIDgyNSAwIFIgNzExIDAgUiA3MjggMCBSIDcyOSAwIFIgMTAyNCAwIFIg MTAyNCAwIFIgMTAyNCAwIFIgMTAyNCAwIFIgMTAyNSAwIFIgMTAyNiAwIFIgMTAyNyAwIFIgOTQw IDAgUiA3NTIgMCBSIDk0MSAwIFIgOTQyIDAgUiA4MjcgMCBSIDk0MyAwIFIgODMwIDAgUiA5NDQg MCBSIDk0NSAwIFIgOTQ2IDAgUiA5NDcgMCBSIDk0OCAwIFIgOTQ5IDAgUiA5NTAgMCBSIDgyMyAw IFIgOTUxIDAgUiA4MzQgMCBSIDk1MiAwIFIgOTUzIDAgUiA5NTQgMCBSIDk1NSAwIFIgOTU2IDAg UiA5NTcgMCBSIDk1OCAwIFIgOTU5IDAgUiA5NjAgMCBSIDgzNiAwIFIgNzY3IDAgUiA5NjEgMCBS IDk2MiAwIFIgOTYzIDAgUiA5NjQgMCBSIDc1NiAwIFIgOTY1IDAgUiA5NjYgMCBSIDk2NyAwIFIg ODQ0IDAgUiA5NjggMCBSIDk2OSAwIFIgOTcwIDAgUiA5NzEgMCBSIDk3MiAwIFIgOTczIDAgUiA5 NzQgMCBSIDk3NSAwIFIgOTc2IDAgUiA4NzEgMCBSIDg3MyAwIFIgOTc3IDAgUiA5NzggMCBSIDc1 NCAwIFIgOTc5IDAgUiA5ODAgMCBSIDk4MSAwIFIgODI5IDAgUiA5MzUgMCBSIDkzNyAwIFIgOTMx IDAgUiA5MzMgMCBSIDkyNyAwIFIgOTI5IDAgUiA4MzIgMCBSIDgzMyAwIFIgOTE3IDAgUiA5MTkg MCBSIDkxMyAwIFIgOTE1IDAgUiA5MDkgMCBSIDkxMSAwIFIgOTA1IDAgUiA5MDcgMCBSIDkwMSAw IFIgOTAzIDAgUiA4MzcgMCBSIDgzOCAwIFIgODM5IDAgUiA4NDAgMCBSIDg0MSAwIFIgODQyIDAg UiA4NDMgMCBSIDg4MyAwIFIgODg1IDAgUiA4NzkgMCBSIDg4MSAwIFIgODc1IDAgUiA4NzcgMCBS IDg0NiAwIFIgODQ3IDAgUiA4NDggMCBSIDg0OSAwIFIgODUwIDAgUiA4NTEgMCBSIDg1MiAwIFIg ODUzIDAgUiA4NTQgMCBSIDg1NSAwIFIgODI1IDAgUiA4MjMgMCBSIDgyMyAwIFIgODIxIDAgUiA4 MTkgMCBSIDgxNyAwIFIgNzMwIDAgUiA3NTggMCBSIDc1OSAwIFIgODEyIDAgUiA4MTQgMCBSIDgw OCAwIFIgODEwIDAgUiA4MDQgMCBSIDgwNiAwIFIgODAwIDAgUiA4MDIgMCBSIDc5NiAwIFIgNzk4 IDAgUiA3OTIgMCBSIDc5NCAwIFIgNzYxIDAgUiA3NjIgMCBSIDc2MyAwIFIgNzY0IDAgUiA3NjUg MCBSIDc2NiAwIFIgNzY3IDAgUiA3NjggMCBSIDc2OSAwIFIgNzcwIDAgUiA3NzEgMCBSIDc3MiAw IFIgNzM0IDAgUiA3NTYgMCBSIDc1NCAwIFIgNzUyIDAgUiA3NTAgMCBSIDc0NiAwIFIgNzQ4IDAg UiA3MzQgMCBSIDczNSAwIFIgNzM2IDAgUiA3MzcgMCBSIDczOCAwIFIgNzM5IDAgUl0zWzU1MSAw IFIgNTUyIDAgUiA1NTMgMCBSIDU1NCAwIFIgNTU1IDAgUiA1NTYgMCBSIDU1NyAwIFIgNTU4IDAg UiA1NTkgMCBSIDU2MCAwIFIgNjg1IDAgUiA2ODYgMCBSIDY4NyAwIFIgNjg4IDAgUiA2ODkgMCBS IDY5MCAwIFIgNjkxIDAgUiA2MjUgMCBSIDY4MSAwIFIgNjgzIDAgUiA2NzcgMCBSIDY3OSAwIFIg NjczIDAgUiA2NzUgMCBSIDY2OSAwIFIgNjcxIDAgUiA2NjUgMCBSIDY2NyAwIFIgNjYxIDAgUiA2 NjMgMCBSIDY1NyAwIFIgNjU5IDAgUiA2NTMgMCBSIDY1NSAwIFIgNjQ5IDAgUiA2NTEgMCBSIDY0 NSAwIFIgNjQ3IDAgUiA2NDEgMCBSIDY0MyAwIFIgNjI3IDAgUiA2MjEgMCBSIDYyMiAwIFIgNjE1 IDAgUiA2MTYgMCBSIDYxNyAwIFIgNjExIDAgUiA2MTIgMCBSIDU5NyAwIFIgNTk4IDAgUiA1OTkg MCBSIDYwMCAwIFIgNjAxIDAgUiA2MDIgMCBSIDYwMyAwIFIgNTkxIDAgUiA1OTIgMCBSIDU5MyAw IFIgNTg5IDAgUiA1NzMgMCBSIDU3NCAwIFIgNTc1IDAgUiA1ODQgMCBSIDU3OCAwIFIgNTc5IDAg UiA1NzEgMCBSIDU3MSAwIFJdNFsxNjM0IDAgUiAxNjM1IDAgUiAxNjM2IDAgUiAxNjU2IDAgUiAx NjU3IDAgUiAxOTU5IDAgUiAxOTU5IDAgUiAxOTU5IDAgUiAxOTU5IDAgUiAxOTYwIDAgUiAxOTYx IDAgUiAxNzg5IDAgUiAxODczIDAgUiAxODc0IDAgUiAxODc1IDAgUiAxODAzIDAgUiAxODc2IDAg UiAxODA2IDAgUiAxODc3IDAgUiAxODc4IDAgUiAxODc5IDAgUiAxODgwIDAgUiAxODgxIDAgUiAx Nzk1IDAgUiAxODgyIDAgUiAxODgzIDAgUiAxODg0IDAgUiAxODE0IDAgUiAxODg1IDAgUiAxODg2 IDAgUiAxODg3IDAgUiAxNzgxIDAgUiAxODg4IDAgUiAxNzg3IDAgUiAxODg5IDAgUiAxODkwIDAg UiAxODkxIDAgUiAxODkyIDAgUiAxODI1IDAgUiAxODkzIDAgUiAxODk0IDAgUiAxNzg1IDAgUiAx ODk1IDAgUiAxODk2IDAgUiAxODk3IDAgUiAxODk4IDAgUiAxODk5IDAgUiAxNzE0IDAgUiAxNzE2 IDAgUiAxOTAwIDAgUiAxNzEwIDAgUiAxNzEyIDAgUiAxOTAxIDAgUiAxOTAyIDAgUiAxNjk4IDAg UiAxNzAwIDAgUiAxOTAzIDAgUiAxOTA0IDAgUiAxOTA1IDAgUiAxOTA2IDAgUiAxOTA3IDAgUiAx OTA4IDAgUiAxOTA5IDAgUiAxOTEwIDAgUiAxOTExIDAgUiAxOTEyIDAgUiAxOTEzIDAgUiAxOTE0 IDAgUiAxOTE1IDAgUiAxODA1IDAgUiAxODA3IDAgUiAxODA4IDAgUiAxODA5IDAgUiAxODEwIDAg UiAxODExIDAgUiAxODEyIDAgUiAxODEzIDAgUiAxODE1IDAgUiAxODE2IDAgUiAxODE3IDAgUiAx ODE4IDAgUiAxODE5IDAgUiAxODIwIDAgUiAxODIxIDAgUiAxODIyIDAgUiAxODIzIDAgUiAxODI0 IDAgUiAxODI2IDAgUiAxODI3IDAgUiAxODI4IDAgUiAxODI5IDAgUiAxODMwIDAgUiAxODMxIDAg UiAxODMyIDAgUiAxODMzIDAgUiAxODM0IDAgUiAxODM1IDAgUiAxODM2IDAgUiAxODM3IDAgUiAx ODM4IDAgUiAxNzk5IDAgUiAxODAwIDAgUiAxNzk3IDAgUiAxNzk1IDAgUiAxNzk1IDAgUiAxNzkz IDAgUiAxNzkxIDAgUiAxNzg5IDAgUiAxNjU4IDAgUiAxOTY4IDAgUiAxOTY5IDAgUiAxOTcwIDAg UiAxOTcxIDAgUiAxOTcyIDAgUiAxOTczIDAgUiAxOTc0IDAgUiAxOTc1IDAgUiAxOTc2IDAgUiAx OTc3IDAgUiAxOTc4IDAgUiAxOTc5IDAgUiAxOTgwIDAgUiAxOTgxIDAgUiAxOTgyIDAgUiAxOTgz IDAgUiAxOTg0IDAgUiAxOTg1IDAgUiAxOTg2IDAgUiAxOTg3IDAgUiAxOTg4IDAgUiAxOTg5IDAg UiAxOTkwIDAgUiAxOTkxIDAgUiAxOTkyIDAgUiAxOTkzIDAgUiAxOTMgMCBSIDE4NyAwIFIgMTk5 NCAwIFIgMTk5NSAwIFIgMTk5NiAwIFIgMTk5NyAwIFIgMTk5OCAwIFIgMTk5OSAwIFIgMjAwMCAw IFIgMjAwMSAwIFIgMjAwMiAwIFIgMjAwMyAwIFIgMjAwNCAwIFIgMjAwNSAwIFIgMTc4NyAwIFIg MTc4NSAwIFIgMTc4MyAwIFIgMTc4MSAwIFIgMTc3OSAwIFIgMTc3NyAwIFIgMTc3MyAwIFIgMTc3 NSAwIFIgMTcyNiAwIFIgMTcyNyAwIFIgMTc2OCAwIFIgMTc3MCAwIFIgMTc2NCAwIFIgMTc2NiAw IFIgMTc2MCAwIFIgMTc2MiAwIFIgMTc1NiAwIFIgMTc1OCAwIFIgMTc1MiAwIFIgMTc1NCAwIFIg MTc0OCAwIFIgMTc1MCAwIFIgMTc0NCAwIFIgMTc0NiAwIFIgMTc0MCAwIFIgMTc0MiAwIFIgMTcy OSAwIFIgMTY2MiAwIFIgMTcyMiAwIFIgMTcyNCAwIFIgMTcxOCAwIFIgMTcyMCAwIFIgMTcxNiAw IFIgMTcxMiAwIFIgMTcwNiAwIFIgMTcwOCAwIFIgMTcwMiAwIFIgMTcwNCAwIFIgMTcwMCAwIFIg MTY5NCAwIFIgMTY5NiAwIFIgMTY5MCAwIFIgMTY5MiAwIFIgMTY4NiAwIFIgMTY4OCAwIFIgMTY4 MiAwIFIgMTY4NCAwIFIgMTY2NCAwIFIgMTY2NSAwIFIgMTY2NiAwIFJdNVsyMDggMCBSIDIwOSAw IFIgMzIzIDAgUiAyMjYgMCBSIDIyNyAwIFIgNTQyIDAgUiA1NDIgMCBSIDU0MiAwIFIgNTQyIDAg UiA1NDMgMCBSIDU0NCAwIFIgMzE1IDAgUiA0NDggMCBSIDQ0OSAwIFIgNDUwIDAgUiA0NTEgMCBS IDQ1MiAwIFIgNDUzIDAgUiA0NTQgMCBSIDQ1NSAwIFIgNDU2IDAgUiA0NTcgMCBSIDQ1OCAwIFIg NDU5IDAgUiA0NjAgMCBSIDQ2MSAwIFIgNDYyIDAgUiA0MTUgMCBSIDQxNyAwIFIgNDYzIDAgUiA0 NjQgMCBSIDQ2NSAwIFIgNDY2IDAgUiA0NjcgMCBSIDQ2OCAwIFIgNDY5IDAgUiA0NzAgMCBSIDQ3 MSAwIFIgMzQyIDAgUiA0NzIgMCBSIDM0MyAwIFIgNDczIDAgUiA0NzQgMCBSIDQ3NSAwIFIgNDc2 IDAgUiA0NzcgMCBSIDQ3OCAwIFIgNDc5IDAgUiAzNzggMCBSIDM4MCAwIFIgNDgwIDAgUiAzNDUg MCBSIDQ4MSAwIFIgMjU2IDAgUiA0ODIgMCBSIDQ4MyAwIFIgNDg0IDAgUiA0ODUgMCBSIDQ4NiAw IFIgNDg3IDAgUiA0ODggMCBSIDQ4OSAwIFIgNDkwIDAgUiA0OTEgMCBSIDQ5MiAwIFIgNDkzIDAg UiA0OTQgMCBSIDMyNyAwIFIgMzI4IDAgUiAzMjkgMCBSIDQ0MiAwIFIgNDQ0IDAgUiA0MzggMCBS IDQ0MCAwIFIgNDM0IDAgUiA0MzYgMCBSIDMzMSAwIFIgMzMyIDAgUiAzMzMgMCBSIDMzNCAwIFIg NDIzIDAgUiA0MjUgMCBSIDQxOSAwIFIgNDIxIDAgUiA0MTEgMCBSIDQxMyAwIFIgNDA3IDAgUiA0 MDkgMCBSIDMzNiAwIFIgMzM3IDAgUiAzMzggMCBSIDMzOSAwIFIgMzQwIDAgUiAzNDEgMCBSIDM5 MCAwIFIgMzkyIDAgUiAzODYgMCBSIDM4OCAwIFIgMzgyIDAgUiAzODQgMCBSIDM0NiAwIFIgMzQ3 IDAgUiAzNDggMCBSIDM0OSAwIFIgMzUwIDAgUiAzNTEgMCBSIDM1MiAwIFIgMzUzIDAgUiAzNTQg MCBSIDM1NSAwIFIgMzU2IDAgUiAzNTcgMCBSIDM1OCAwIFIgMzI1IDAgUiAzMjMgMCBSIDMyMSAw IFIgMzIxIDAgUiAzMTkgMCBSIDMxNyAwIFIgMzE1IDAgUiAyMjggMCBSIDI2MCAwIFIgMjYxIDAg UiAzMTAgMCBSIDMxMiAwIFIgMzA2IDAgUiAzMDggMCBSIDMwMiAwIFIgMzA0IDAgUiAyOTggMCBS IDMwMCAwIFIgMjk0IDAgUiAyOTYgMCBSIDI5MCAwIFIgMjkyIDAgUiAyNjMgMCBSIDI2NCAwIFIg MjY1IDAgUiAyNjYgMCBSIDI2NyAwIFIgMjY4IDAgUiAyNjkgMCBSIDI3MCAwIFIgMjcxIDAgUiAy NzIgMCBSIDI1OCAwIFIgMjU2IDAgUiAyNTQgMCBSIDI1MiAwIFIgMjUwIDAgUiAyNDggMCBSIDIz MiAwIFIgMjMzIDAgUiAyMzQgMCBSIDIzNSAwIFIgMjM2IDAgUiAyMzcgMCBSIDIzOCAwIFIgMjM5 IDAgUl02IDE4NyAwIFIgNyAxODggMCBSXT4+DWVuZG9iag0xNzUgMCBvYmoNPDwvdmVyZGFkYS9Q L0lubGluZVNoYXBlL0ZpZ3VyZS9EZWZhdWx0L1AvRHJvcENhcC9GaWd1cmUvT3V0bGluZS9TcGFu L1N1YnNjcmlwdC9TcGFuL1N1cGVyc2NyaXB0L1NwYW4vVE9BL1RPQy9UT0YvVE9DL1N0cmlrZW91 dC9TcGFuL1RleHRCb3gvRGl2L05vcm1hbC9QL0VuZG5vdGUvTm90ZS9Gb290bm90ZS9Ob3RlL05v IzIwU3BhY2luZy9QLyNFNiM5NyNBMCNFOSM5NyNCNCNFOSM5QSM5NC9QL1VuZGVybGluZS9TcGFu L1RPRkkvVE9DSS9GcmFtZS9EaXYvI0U2I0FEI0EzI0U2Izk2Izg3L1AvU2hhcGUvRmlndXJlL1RP QUkvVE9DSS9MaXN0IzIwUGFyYWdyYXBoL1A+Pg1lbmRvYmoNMTc2IDAgb2JqDTw8LyNFNiNBRCNB MyNFNiM5NiM4NysxIDE3NyAwIFIvTm8jMjBTcGFjaW5nKzEgMTc4IDAgUi9Ob3JtYWwrMSAxNzkg MCBSL05vcm1hbCsyIDE4MCAwIFIvTm9ybWFsKzMgMTgxIDAgUi9Ob3JtYWwgMTgyIDAgUi9ObyMy MFNwYWNpbmcgMTgzIDAgUi8jRTYjOTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQgMTg0IDAgUi8jRTYj OTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQrMSAxODUgMCBSLyNFNiNBRCNBMyNFNiM5NiM4NyAxODYg MCBSPj4NZW5kb2JqDTE3NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNzggMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTE3OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODAgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTgxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE4MiAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xODMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE4NCAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNMTg1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MTg3IDAgb2JqDTw8L0tbMTM2PDwvT2JqIDEzMiAwIFIvUGcgNDUgMCBSL1R5cGUvT0JKUj4+XS9Q IDE5MyAwIFIvUy9MaW5rL1BnIDQ1IDAgUj4+DWVuZG9iag0xODggMCBvYmoNWzE4OSAwIFJdDWVu ZG9iag0xODkgMCBvYmoNPDwvSyAwL1AgMTkwIDAgUi9TL1BhcnQvUGcgNzggMCBSPj4NZW5kb2Jq DTE5MCAwIG9iag08PC9JbmZvIDE5MSAwIFIvSyAxODkgMCBSL1AgMTczIDAgUi9TL1BhcnQvTWV0 YWRhdGEgMTkyIDAgUj4+DWVuZG9iag0xOTEgMCBvYmoNPDwvQ3JlYXRpb25EYXRlKEQ6MjAwOTAz MjYxMzUyNTQrMDgnMDAnKS9BdXRob3IoV2hpdG5leVNoZW4pL0NyZWF0b3IoUFNjcmlwdDUuZGxs IFZlcnNpb24gNS4yLjIpL1Byb2R1Y2VyKEFjcm9iYXQgRGlzdGlsbGVyIDguMS4wIFwoV2luZG93 c1wpKS9Nb2REYXRlKEQ6MjAwOTAzMjYxMzUyNTQrMDgnMDAnKS9UaXRsZShSZWdpc3RyYXRpb25G b3JtLVdoaXRuZXkpPj4NZW5kb2JqDTE5MiAwIG9iag08PC9TdWJ0eXBlL1hNTC9MZW5ndGggMTU0 NS9UeXBlL01ldGFkYXRhPj5zdHJlYW0NCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1w Q2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8i IHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMC1jMzE2IDQ0LjI1MzkyMSwgU3VuIE9jdCAwMSAy MDA2IDE3OjE0OjM5Ij4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8x OTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJv dXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8x LjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAg ICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJk ZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5SZWdpc3RyYXRpb25Gb3JtLVdoaXRuZXk8L3JkZjps aT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8 ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+ V2hpdG5leVNoZW48L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2Rj OmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9u IHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20v eGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAwOS0wMy0yNlQxMzo1Mjo1NCsw ODowMDwveGFwOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+UFNjcmlwdDUu ZGxsIFZlcnNpb24gNS4yLjI8L3hhcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhhcDpNb2RpZnlE YXRlPjIwMDktMDMtMjZUMTM6NTI6NTQrMDg6MDA8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3Jk ZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAg ICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KICAgICAgICAg PHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA4LjEuMCAoV2luZG93cyk8L3BkZjpQcm9k dWNlcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRm OmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh cC8xLjAvbW0vIj4KICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDowZjc4NWQwOS1mMWEy LTQzMDktOWQ3Yy1hNzJhNzJiZmZiZjg8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBN TTpJbnN0YW5jZUlEPnV1aWQ6NTVkYmE1ZWQtOTBjYS00ZmE1LWIxMjAtYjk3YWUwOGJlM2YzPC94 YXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8 L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pg0KZW5kc3RyZWFtDWVuZG9iag0xOTMgMCBv YmoNPDwvQSAxOTQgMCBSL0tbMTM1IDE4NyAwIFJdL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAw IFI+Pg1lbmRvYmoNMTk0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTUgMCBvYmoNPDwvS1sxOTY4 IDAgUiAxOTY5IDAgUiAxOTcwIDAgUiAxOTcxIDAgUiAxOTcyIDAgUiAxOTczIDAgUiAxOTc0IDAg UiAxOTc1IDAgUiAxOTc2IDAgUiAxOTc3IDAgUiAxOTc4IDAgUiAxOTc5IDAgUiAxOTgwIDAgUiAx OTgxIDAgUiAxOTgyIDAgUiAxOTgzIDAgUiAxOTg0IDAgUiAxOTg1IDAgUiAxOTg2IDAgUiAxOTg3 IDAgUiAxOTg4IDAgUiAxOTg5IDAgUiAxOTkwIDAgUiAxOTkxIDAgUiAxOTkyIDAgUiAxOTkzIDAg UiAxOTMgMCBSIDE5OTQgMCBSIDE5OTUgMCBSIDE5OTYgMCBSIDE5OTcgMCBSIDE5OTggMCBSIDE5 OTkgMCBSIDIwMDAgMCBSIDIwMDEgMCBSIDIwMDIgMCBSIDIwMDMgMCBSIDIwMDQgMCBSIDIwMDUg MCBSXS9QIDE5NiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTE5NiAwIG9iag08PC9LWzE2MzQgMCBS IDE2MzUgMCBSIDE2MzYgMCBSIDE2MzcgMCBSIDE2MzggMCBSIDE2MzkgMCBSIDE2NDAgMCBSIDE2 NDEgMCBSIDE2NDIgMCBSIDE2NDMgMCBSIDE2NDQgMCBSIDE2NDUgMCBSIDE2NDYgMCBSIDE5NSAw IFIgMTY0NyAwIFIgMTY0OCAwIFIgMTY0OSAwIFIgMTY1MCAwIFIgMTY1MSAwIFIgMTY1MiAwIFIg MTY1MyAwIFIgMTY1NCAwIFIgMTY1NSAwIFIgMTY1NiAwIFIgMTY1NyAwIFIgMTY1OCAwIFJdL1Ag MTk3IDAgUi9TL1NlY3Q+Pg1lbmRvYmoNMTk3IDAgb2JqDTw8L0sgMTk2IDAgUi9QIDE5OCAwIFIv Uy9QYXJ0Pj4NZW5kb2JqDTE5OCAwIG9iag08PC9LWzIwMiAwIFIgMjAzIDAgUiAyMDQgMCBSIDIw NSAwIFIgMTk3IDAgUiAyMDYgMCBSXS9QIDE5OSAwIFIvUy9QYXJ0Pj4NZW5kb2JqDTE5OSAwIG9i ag08PC9JbmZvIDIwMCAwIFIvSyAxOTggMCBSL1AgMTczIDAgUi9TL1BhcnQvTWV0YWRhdGEgMjAx IDAgUj4+DWVuZG9iag0yMDAgMCBvYmoNPDwvQ3JlYXRpb25EYXRlKEQ6MjAwOTA1MDQxMTM5NTIr MDgnMDAnKS9BdXRob3IoYW15aGUpL0NyZWF0b3IoQWNyb2JhdCBQREZNYWtlciA4LjEgZm9yIFdv cmQpL1Byb2R1Y2VyKEFjcm9iYXQgRGlzdGlsbGVyIDguMS4wIFwoV2luZG93c1wpKS9Nb2REYXRl KEQ6MjAwOTA1MDQxMTM5NTIrMDgnMDAnKS9Db21wYW55KGxpbmtpbmdiaXopL1RpdGxlKCk+Pg1l bmRvYmoNMjAxIDAgb2JqDTw8L1N1YnR5cGUvWE1ML0xlbmd0aCAxNDUwL1R5cGUvTWV0YWRhdGE+ PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtj OWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUg WE1QIENvcmUgNC4wLWMzMTYgNDQuMjUzOTIxLCBTdW4gT2N0IDAxIDIwMDYgMTc6MTQ6MzkiPgog ICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5 bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAg ICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFw Ok1vZGlmeURhdGU+MjAwOS0wNS0wNFQxMTozOTo1MiswODowMDwveGFwOk1vZGlmeURhdGU+CiAg ICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA5LTA1LTA0VDExOjM5OjUyKzA4OjAwPC94YXA6Q3Jl YXRlRGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU+MjAwOS0wNS0wNFQxMTozOTo1Misw ODowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BY3JvYmF0 IFBERk1ha2VyIDguMSBmb3IgV29yZDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNj cmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAg eG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRj OmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOmNyZWF0b3I+ CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPmFteWhlPC9yZGY6 bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICA8 L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAg ICAgICAgICAgeG1sbnM6eGFwTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iPgog ICAgICAgICA8eGFwTU06RG9jdW1lbnRJRD51dWlkOjQ1MmNjYjhiLTFkMzgtNDM4Mi04ZDM2LTdi MzllYjc1ODZjMDwveGFwTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhhcE1NOkluc3RhbmNlSUQ+ dXVpZDplMWFiNjMzMy1hNDBjLTRkYmItOWY3MC0zOTc2MDJjN2QyOWM8L3hhcE1NOkluc3RhbmNl SUQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph Ym91dD0iIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEu My8iPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFjcm9iYXQgRGlzdGlsbGVyIDguMS4wIChXaW5k b3dzKTwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRG Pgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pg0KZW5kc3RyZWFtDWVuZG9iag0yMDIg MCBvYmoNPDwvSyAxNDgzIDAgUi9QIDE5OCAwIFIvUy9QYXJ0Pj4NZW5kb2JqDTIwMyAwIG9iag08 PC9LIDEwMzQgMCBSL1AgMTk4IDAgUi9TL1BhcnQ+Pg1lbmRvYmoNMjA0IDAgb2JqDTw8L0sgNzA5 IDAgUi9QIDE5OCAwIFIvUy9QYXJ0Pj4NZW5kb2JqDTIwNSAwIG9iag08PC9LIDU1MCAwIFIvUCAx OTggMCBSL1MvUGFydD4+DWVuZG9iag0yMDYgMCBvYmoNPDwvSyAyMDcgMCBSL1AgMTk4IDAgUi9T L1BhcnQ+Pg1lbmRvYmoNMjA3IDAgb2JqDTw8L0tbMjA4IDAgUiAyMDkgMCBSIDIxMCAwIFIgMjEx IDAgUiAyMTIgMCBSIDIxMyAwIFIgMjE0IDAgUiAyMTUgMCBSIDIxNiAwIFIgMjE3IDAgUiAyMTgg MCBSIDIxOSAwIFIgMjIwIDAgUiAyMjEgMCBSIDIyMiAwIFIgMjIzIDAgUiAyMjQgMCBSIDIyNSAw IFIgMjI2IDAgUiAyMjcgMCBSIDIyOCAwIFJdL1AgMjA2IDAgUi9TL1NlY3Q+Pg1lbmRvYmoNMjA4 IDAgb2JqDTw8L0EgNTQ5IDAgUi9DLyNFNiM5NyNBMCNFOSM5NyNCNCNFOSM5QSM5NCsxL0sgMC9Q IDIwNyAwIFIvUy8jRTYjOTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQvUGcgNjIgMCBSPj4NZW5kb2Jq DTIwOSAwIG9iag08PC9BIDU0OCAwIFIvQy8jRTYjQUQjQTMjRTYjOTYjODcrMS9LIDEvUCAyMDcg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0yMTAgMCBvYmoNPDwv S1s1NDIgMCBSIDU0MyAwIFIgNTQ0IDAgUl0vUCAyMDcgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0y MTEgMCBvYmoNPDwvS1s0NDggMCBSIDQ0OSAwIFIgNDUwIDAgUiA0NTEgMCBSIDQ1MiAwIFIgNDUz IDAgUiA0NTQgMCBSIDQ1NSAwIFIgNDU2IDAgUiA0NTcgMCBSIDQ1OCAwIFIgNDU5IDAgUiA0NjAg MCBSIDQ2MSAwIFIgNDYyIDAgUiA0NjMgMCBSIDQ2NCAwIFIgNDY1IDAgUiA0NjYgMCBSIDQ2NyAw IFIgNDY4IDAgUiA0NjkgMCBSIDQ3MCAwIFIgNDcxIDAgUiA0NzIgMCBSIDQ3MyAwIFIgNDc0IDAg UiA0NzUgMCBSIDQ3NiAwIFIgNDc3IDAgUiA0NzggMCBSIDQ3OSAwIFIgNDgwIDAgUiA0ODEgMCBS IDQ4MiAwIFIgNDgzIDAgUiA0ODQgMCBSIDQ4NSAwIFIgNDg2IDAgUiA0ODcgMCBSIDQ4OCAwIFIg NDg5IDAgUiA0OTAgMCBSIDQ5MSAwIFIgNDkyIDAgUiA0OTMgMCBSIDQ5NCAwIFJdL1AgMjA3IDAg Ui9TL1RleHRCb3g+Pg1lbmRvYmoNMjEyIDAgb2JqDTw8L0tbMzI3IDAgUiAzMjggMCBSIDMyOSAw IFIgMzMwIDAgUiAzMzEgMCBSIDMzMiAwIFIgMzMzIDAgUiAzMzQgMCBSIDMzNSAwIFIgMzM2IDAg UiAzMzcgMCBSIDMzOCAwIFIgMzM5IDAgUiAzNDAgMCBSIDM0MSAwIFIgMzQyIDAgUiAzNDMgMCBS IDM0NCAwIFIgMzQ1IDAgUiAzNDYgMCBSIDM0NyAwIFIgMzQ4IDAgUiAzNDkgMCBSIDM1MCAwIFIg MzUxIDAgUiAzNTIgMCBSIDM1MyAwIFIgMzU0IDAgUiAzNTUgMCBSIDM1NiAwIFIgMzU3IDAgUiAz NTggMCBSXS9QIDIwNyAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIxMyAwIG9iag08PC9LIDMyNSAw IFIvUCAyMDcgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yMTQgMCBvYmoNPDwvSyAzMjMgMCBSL1Ag MjA3IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjE1IDAgb2JqDTw8L0sgMzIxIDAgUi9QIDIwNyAw IFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIxNiAwIG9iag08PC9LIDMxOSAwIFIvUCAyMDcgMCBSL1Mv VGV4dEJveD4+DWVuZG9iag0yMTcgMCBvYmoNPDwvSyAzMTcgMCBSL1AgMjA3IDAgUi9TL1RleHRC b3g+Pg1lbmRvYmoNMjE4IDAgb2JqDTw8L0sgMzE1IDAgUi9QIDIwNyAwIFIvUy9UZXh0Qm94Pj4N ZW5kb2JqDTIxOSAwIG9iag08PC9LWzI2MCAwIFIgMjYxIDAgUiAyNjIgMCBSIDI2MyAwIFIgMjY0 IDAgUiAyNjUgMCBSIDI2NiAwIFIgMjY3IDAgUiAyNjggMCBSIDI2OSAwIFIgMjcwIDAgUiAyNzEg MCBSIDI3MiAwIFJdL1AgMjA3IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjIwIDAgb2JqDTw8L0sg MjU4IDAgUi9QIDIwNyAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIyMSAwIG9iag08PC9LIDI1NiAw IFIvUCAyMDcgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yMjIgMCBvYmoNPDwvSyAyNTQgMCBSL1Ag MjA3IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjIzIDAgb2JqDTw8L0sgMjUyIDAgUi9QIDIwNyAw IFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIyNCAwIG9iag08PC9LIDI0OCAwIFIvUCAyMDcgMCBSL1Mv VGV4dEJveD4+DWVuZG9iag0yMjUgMCBvYmoNPDwvS1syMzIgMCBSIDIzMyAwIFIgMjM0IDAgUiAy MzUgMCBSIDIzNiAwIFIgMjM3IDAgUiAyMzggMCBSIDIzOSAwIFJdL1AgMjA3IDAgUi9TL1RleHRC b3g+Pg1lbmRvYmoNMjI2IDAgb2JqDTw8L0EgMjMxIDAgUi9LIDMvUCAyMDcgMCBSL1MvU2hhcGUv UGcgNjIgMCBSPj4NZW5kb2JqDTIyNyAwIG9iag08PC9BIDIzMCAwIFIvSyA0L1AgMjA3IDAgUi9T L1NoYXBlL1BnIDYyIDAgUj4+DWVuZG9iag0yMjggMCBvYmoNPDwvQSAyMjkgMCBSL0sgMTIwL1Ag MjA3IDAgUi9TL1NoYXBlL1BnIDYyIDAgUj4+DWVuZG9iag0yMjkgMCBvYmoNPDwvUGxhY2VtZW50 L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCA0NjYuMC9TdGFydEluZGVudCAtNzEuMC9CQm94WzE5 LjAgNzQ3LjAgMzkuMCA3NTMuMF0+Pg1lbmRvYmoNMjMwIDAgb2JqDTw8L1BsYWNlbWVudC9CbG9j ay9PL0xheW91dC9FbmRJbmRlbnQgLTkwLjAvU3RhcnRJbmRlbnQgLTkwLjAvQkJveFswLjAgNzUw LjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTIzMSAwIG9iag08PC9QbGFjZW1lbnQvQmxvY2svTy9M YXlvdXQvRW5kSW5kZW50IC05MC4wL1N0YXJ0SW5kZW50IC05MC4wL0JCb3hbMC4wIDAuMCA1OTUu MCA4NDIuMF0+Pg1lbmRvYmoNMjMyIDAgb2JqDTw8L0EgMjQ3IDAgUi9LIDE1MS9QIDIyNSAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTIzMyAwIG9iag08PC9BIDI0 NiAwIFIvSyAxNTIvUCAyMjUgMCBSL1MvRGVmYXVsdC9QZyA2MiAwIFI+Pg1lbmRvYmoNMjM0IDAg b2JqDTw8L0EgMjQ1IDAgUi9LIDE1My9QIDIyNSAwIFIvUy9EZWZhdWx0L1BnIDYyIDAgUj4+DWVu ZG9iag0yMzUgMCBvYmoNPDwvQSAyNDQgMCBSL0sgMTU0L1AgMjI1IDAgUi9TL0RlZmF1bHQvUGcg NjIgMCBSPj4NZW5kb2JqDTIzNiAwIG9iag08PC9BIDI0MyAwIFIvSyAxNTUvUCAyMjUgMCBSL1Mv RGVmYXVsdC9QZyA2MiAwIFI+Pg1lbmRvYmoNMjM3IDAgb2JqDTw8L0EgMjQyIDAgUi9LIDE1Ni9Q IDIyNSAwIFIvUy9EZWZhdWx0L1BnIDYyIDAgUj4+DWVuZG9iag0yMzggMCBvYmoNPDwvQSAyNDEg MCBSL0sgMTU3L1AgMjI1IDAgUi9TL0RlZmF1bHQvUGcgNjIgMCBSPj4NZW5kb2JqDTIzOSAwIG9i ag08PC9BIDI0MCAwIFIvSyAxNTgvUCAyMjUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYy IDAgUj4+DWVuZG9iag0yNDAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMjQxIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0yNDIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI0MyAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMjQ0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yNDUgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTI0NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMjQ3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI0 OCAwIG9iag08PC9BIDI0OSAwIFIvS1syNTAgMCBSIDE1MF0vUCAyMjQgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0yNDkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MjUwIDAgb2JqDTw8L0EgMjUxIDAgUi9LIDE0OS9QIDI0OCAwIFIvUy9JbmxpbmVTaGFwZS9QZyA2 MiAwIFI+Pg1lbmRvYmoNMjUxIDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJv eFs0MTEuMCA3NjUuMCA1NjcuMCA4MDIuMF0+Pg1lbmRvYmoNMjUyIDAgb2JqDTw8L0EgMjUzIDAg Ui9LIDE0OC9QIDIyMyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2Jq DTI1MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yNTQgMCBvYmoNPDwvQSAyNTUgMCBSL0sgMTQ3 L1AgMjIyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMjU1IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI1NiAwIG9iag08PC9BIDI1NyAwIFIvS1s1MyAxNDZdL1Ag MjIxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMjU3IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTI1OCAwIG9iag08PC9BIDI1OSAwIFIvSyAxNDUvUCAyMjAgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0yNTkgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMjYwIDAgb2JqDTw8L0EgMzE0IDAgUi9LIDEyMS9QIDIxOSAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTI2MSAwIG9iag08PC9BIDMxMyAwIFIv SyAxMjIvUCAyMTkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0y NjIgMCBvYmoNPDwvS1syODMgMCBSIDI4NCAwIFIgMjg1IDAgUiAyODYgMCBSIDI4NyAwIFIgMjg4 IDAgUl0vUCAyMTkgMCBSL1MvTD4+DWVuZG9iag0yNjMgMCBvYmoNPDwvQSAyODIgMCBSL0sgMTM1 L1AgMjE5IDAgUi9TL0RlZmF1bHQvUGcgNjIgMCBSPj4NZW5kb2JqDTI2NCAwIG9iag08PC9BIDI4 MSAwIFIvSyAxMzYvUCAyMTkgMCBSL1MvRGVmYXVsdC9QZyA2MiAwIFI+Pg1lbmRvYmoNMjY1IDAg b2JqDTw8L0EgMjgwIDAgUi9LIDEzNy9QIDIxOSAwIFIvUy9EZWZhdWx0L1BnIDYyIDAgUj4+DWVu ZG9iag0yNjYgMCBvYmoNPDwvQSAyNzkgMCBSL0sgMTM4L1AgMjE5IDAgUi9TL0RlZmF1bHQvUGcg NjIgMCBSPj4NZW5kb2JqDTI2NyAwIG9iag08PC9BIDI3OCAwIFIvSyAxMzkvUCAyMTkgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0yNjggMCBvYmoNPDwvQSAyNzcg MCBSL0sgMTQwL1AgMjE5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRv YmoNMjY5IDAgb2JqDTw8L0EgMjc2IDAgUi9LIDE0MS9QIDIxOSAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTI3MCAwIG9iag08PC9BIDI3NSAwIFIvSyAxNDIvUCAy MTkgMCBSL1MvRGVmYXVsdC9QZyA2MiAwIFI+Pg1lbmRvYmoNMjcxIDAgb2JqDTw8L0EgMjc0IDAg Ui9LIDE0My9QIDIxOSAwIFIvUy92ZXJkYWRhL1BnIDYyIDAgUj4+DWVuZG9iag0yNzIgMCBvYmoN PDwvQSAyNzMgMCBSL0sgMTQ0L1AgMjE5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAw IFI+Pg1lbmRvYmoNMjczIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI3NCAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMjc1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yNzYgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTI3NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMjc4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0y NzkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI4MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMjgxIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0yODIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI4MyAwIG9iag08 PC9BIDMwOSAwIFIvS1szMTAgMCBSIDMxMSAwIFJdL1AgMjYyIDAgUi9TL0xJPj4NZW5kb2JqDTI4 NCAwIG9iag08PC9BIDMwNSAwIFIvS1szMDYgMCBSIDMwNyAwIFJdL1AgMjYyIDAgUi9TL0xJPj4N ZW5kb2JqDTI4NSAwIG9iag08PC9BIDMwMSAwIFIvS1szMDIgMCBSIDMwMyAwIFJdL1AgMjYyIDAg Ui9TL0xJPj4NZW5kb2JqDTI4NiAwIG9iag08PC9BIDI5NyAwIFIvS1syOTggMCBSIDI5OSAwIFJd L1AgMjYyIDAgUi9TL0xJPj4NZW5kb2JqDTI4NyAwIG9iag08PC9BIDI5MyAwIFIvS1syOTQgMCBS IDI5NSAwIFJdL1AgMjYyIDAgUi9TL0xJPj4NZW5kb2JqDTI4OCAwIG9iag08PC9BIDI4OSAwIFIv S1syOTAgMCBSIDI5MSAwIFJdL1AgMjYyIDAgUi9TL0xJPj4NZW5kb2JqDTI4OSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDM2LjA+Pg1lbmRvYmoNMjkwIDAgb2JqDTw8L0sgMTMzL1AgMjg4IDAgUi9TL0xibC9QZyA2MiAw IFI+Pg1lbmRvYmoNMjkxIDAgb2JqDTw8L0sgMjkyIDAgUi9QIDI4OCAwIFIvUy9MYm9keT4+DWVu ZG9iag0yOTIgMCBvYmoNPDwvSyAxMzQvUCAyOTEgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDYyIDAgUj4+DWVuZG9iag0yOTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg LTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTI5NCAwIG9iag08 PC9LIDEzMS9QIDI4NyAwIFIvUy9MYmwvUGcgNjIgMCBSPj4NZW5kb2JqDTI5NSAwIG9iag08PC9L IDI5NiAwIFIvUCAyODcgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMjk2IDAgb2JqDTw8L0sgMTMyL1Ag Mjk1IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMjk3IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMzYuMD4+DWVuZG9iag0yOTggMCBvYmoNPDwvSyAxMjkvUCAyODYgMCBSL1MvTGJsL1Bn IDYyIDAgUj4+DWVuZG9iag0yOTkgMCBvYmoNPDwvSyAzMDAgMCBSL1AgMjg2IDAgUi9TL0xib2R5 Pj4NZW5kb2JqDTMwMCAwIG9iag08PC9LIDEzMC9QIDI5OSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgNjIgMCBSPj4NZW5kb2JqDTMwMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMzAyIDAg b2JqDTw8L0sgMTI3L1AgMjg1IDAgUi9TL0xibC9QZyA2MiAwIFI+Pg1lbmRvYmoNMzAzIDAgb2Jq DTw8L0sgMzA0IDAgUi9QIDI4NSAwIFIvUy9MYm9keT4+DWVuZG9iag0zMDQgMCBvYmoNPDwvSyAx MjgvUCAzMDMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zMDUg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTMwNiAwIG9iag08PC9LIDEyNS9QIDI4NCAwIFIvUy9M YmwvUGcgNjIgMCBSPj4NZW5kb2JqDTMwNyAwIG9iag08PC9LIDMwOCAwIFIvUCAyODQgMCBSL1Mv TGJvZHk+Pg1lbmRvYmoNMzA4IDAgb2JqDTw8L0sgMTI2L1AgMzA3IDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzA5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0z MTAgMCBvYmoNPDwvSyAxMjMvUCAyODMgMCBSL1MvTGJsL1BnIDYyIDAgUj4+DWVuZG9iag0zMTEg MCBvYmoNPDwvSyAzMTIgMCBSL1AgMjgzIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTMxMiAwIG9iag08 PC9LIDEyNC9QIDMxMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2Jq DTMxMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAtNDguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDQ4LjA+Pg1lbmRv YmoNMzE1IDAgb2JqDTw8L0EgMzE2IDAgUi9LWzExIDExOV0vUCAyMTggMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zMTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MzE3IDAgb2JqDTw8L0EgMzE4IDAgUi9LIDExOC9QIDIxNyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgNjIgMCBSPj4NZW5kb2JqDTMxOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzE5IDAgb2Jq DTw8L0EgMzIwIDAgUi9LIDExNy9QIDIxNiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIg MCBSPj4NZW5kb2JqDTMyMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMjEgMCBvYmoNPDwvQSAz MjIgMCBSL0tbMTE1IDExNl0vUCAyMTUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAg Uj4+DWVuZG9iag0zMjIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzIzIDAgb2JqDTw8L0EgMzI0 IDAgUi9LWzIgMTE0XS9QIDIxNCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4N ZW5kb2JqDTMyNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMjUgMCBvYmoNPDwvQSAzMjYgMCBS L0sgMTEzL1AgMjEzIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoN MzI2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMyNyAwIG9iag08PC9BIDQ0NyAwIFIvSyA2Ny9Q IDIxMiAwIFIvUy9EZWZhdWx0L1BnIDYyIDAgUj4+DWVuZG9iag0zMjggMCBvYmoNPDwvQSA0NDYg MCBSL0sgNjgvUCAyMTIgMCBSL1MvRGVmYXVsdC9QZyA2MiAwIFI+Pg1lbmRvYmoNMzI5IDAgb2Jq DTw8L0EgNDQ1IDAgUi9LIDY5L1AgMjEyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAw IFI+Pg1lbmRvYmoNMzMwIDAgb2JqDTw8L0tbNDMwIDAgUiA0MzEgMCBSIDQzMiAwIFJdL1AgMjEy IDAgUi9TL0w+Pg1lbmRvYmoNMzMxIDAgb2JqDTw8L0EgNDI5IDAgUi9LIDc2L1AgMjEyIDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzMyIDAgb2JqDTw8L0EgNDI4 IDAgUi9LIDc3L1AgMjEyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRv YmoNMzMzIDAgb2JqDTw8L0EgNDI3IDAgUi9LIDc4L1AgMjEyIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzM0IDAgb2JqDTw8L0EgNDI2IDAgUi9LIDc5L1AgMjEy IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzM1IDAgb2JqDTw8 L0tbNDAxIDAgUiA0MDIgMCBSIDQwMyAwIFIgNDA0IDAgUiA0MDUgMCBSXS9QIDIxMiAwIFIvUy9M Pj4NZW5kb2JqDTMzNiAwIG9iag08PC9BIDQwMCAwIFIvSyA4OC9QIDIxMiAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTMzNyAwIG9iag08PC9BIDM5OSAwIFIvSyA4 OS9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTMzOCAw IG9iag08PC9BIDM5OCAwIFIvSyA5MC9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg NjIgMCBSPj4NZW5kb2JqDTMzOSAwIG9iag08PC9BIDM5NyAwIFIvSyA5MS9QIDIxMiAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTM0MCAwIG9iag08PC9BIDM5NiAw IFIvSyA5Mi9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2Jq DTM0MSAwIG9iag08PC9BIDM5NSAwIFIvSyA5My9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgNjIgMCBSPj4NZW5kb2JqDTM0MiAwIG9iag08PC9BIDM5NCAwIFIvSyAzOC9QIDIxMiAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTM0MyAwIG9iag08PC9B IDM5MyAwIFIvSyA0MC9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4N ZW5kb2JqDTM0NCAwIG9iag08PC9LWzM3MyAwIFIgMzc0IDAgUiAzNzUgMCBSIDM3NiAwIFJdL1Ag MjEyIDAgUi9TL0w+Pg1lbmRvYmoNMzQ1IDAgb2JqDTw8L0EgMzcyIDAgUi9LIDUxL1AgMjEyIDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzQ2IDAgb2JqDTw8L0Eg MzcxIDAgUi9LIDEwMC9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4N ZW5kb2JqDTM0NyAwIG9iag08PC9BIDM3MCAwIFIvSyAxMDEvUCAyMTIgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zNDggMCBvYmoNPDwvQSAzNjkgMCBSL0sgMTAy L1AgMjEyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzQ5IDAg b2JqDTw8L0EgMzY4IDAgUi9LIDEwMy9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg NjIgMCBSPj4NZW5kb2JqDTM1MCAwIG9iag08PC9BIDM2NyAwIFIvSyAxMDQvUCAyMTIgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zNTEgMCBvYmoNPDwvQSAzNjYg MCBSL0sgMTA1L1AgMjEyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRv YmoNMzUyIDAgb2JqDTw8L0EgMzY1IDAgUi9LIDEwNi9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTM1MyAwIG9iag08PC9BIDM2NCAwIFIvSyAxMDcvUCAy MTIgMCBSL1MvdmVyZGFkYS9QZyA2MiAwIFI+Pg1lbmRvYmoNMzU0IDAgb2JqDTw8L0EgMzYzIDAg Ui9LIDEwOC9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2Jq DTM1NSAwIG9iag08PC9BIDM2MiAwIFIvSyAxMDkvUCAyMTIgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zNTYgMCBvYmoNPDwvQSAzNjEgMCBSL0sgMTEwL1AgMjEy IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNMzU3IDAgb2JqDTw8 L0EgMzYwIDAgUi9LIDExMS9QIDIxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBS Pj4NZW5kb2JqDTM1OCAwIG9iag08PC9BIDM1OSAwIFIvSyAxMTIvUCAyMTIgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zNTkgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTM2MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzYxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zNjIg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM2MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzY0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0zNjUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM2NiAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMzY3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zNjggMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTM2OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzcwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0zNzEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM3MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzcz IDAgb2JqDTw8L0EgMzg5IDAgUi9LWzM5MCAwIFIgMzkxIDAgUl0vUCAzNDQgMCBSL1MvTEk+Pg1l bmRvYmoNMzc0IDAgb2JqDTw8L0EgMzg1IDAgUi9LWzM4NiAwIFIgMzg3IDAgUl0vUCAzNDQgMCBS L1MvTEk+Pg1lbmRvYmoNMzc1IDAgb2JqDTw8L0EgMzgxIDAgUi9LWzM4MiAwIFIgMzgzIDAgUl0v UCAzNDQgMCBSL1MvTEk+Pg1lbmRvYmoNMzc2IDAgb2JqDTw8L0EgMzc3IDAgUi9LWzM3OCAwIFIg Mzc5IDAgUl0vUCAzNDQgMCBSL1MvTEk+Pg1lbmRvYmoNMzc3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVu ZG9iag0zNzggMCBvYmoNPDwvSyA0OC9QIDM3NiAwIFIvUy9MYmwvUGcgNjIgMCBSPj4NZW5kb2Jq DTM3OSAwIG9iag08PC9LIDM4MCAwIFIvUCAzNzYgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMzgwIDAg b2JqDTw8L0sgNDkvUCAzNzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVu ZG9iag0zODEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTM4MiAwIG9iag08PC9LIDk4L1AgMzc1 IDAgUi9TL0xibC9QZyA2MiAwIFI+Pg1lbmRvYmoNMzgzIDAgb2JqDTw8L0sgMzg0IDAgUi9QIDM3 NSAwIFIvUy9MYm9keT4+DWVuZG9iag0zODQgMCBvYmoNPDwvSyA5OS9QIDM4MyAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTM4NSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1l bmRvYmoNMzg2IDAgb2JqDTw8L0sgOTYvUCAzNzQgMCBSL1MvTGJsL1BnIDYyIDAgUj4+DWVuZG9i ag0zODcgMCBvYmoNPDwvSyAzODggMCBSL1AgMzc0IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTM4OCAw IG9iag08PC9LIDk3L1AgMzg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1l bmRvYmoNMzg5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0zOTAgMCBvYmoNPDwvSyA5NC9QIDM3 MyAwIFIvUy9MYmwvUGcgNjIgMCBSPj4NZW5kb2JqDTM5MSAwIG9iag08PC9LIDM5MiAwIFIvUCAz NzMgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMzkyIDAgb2JqDTw8L0sgOTUvUCAzOTEgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag0zOTMgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMzk0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTUyLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCA1Mi4wPj4NZW5kb2JqDTM5NSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMzk2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zOTcgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTM5OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzk5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00MDAg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQwMSAwIG9iag08PC9BIDQyMiAwIFIvS1s0MjMgMCBSIDQy NCAwIFJdL1AgMzM1IDAgUi9TL0xJPj4NZW5kb2JqDTQwMiAwIG9iag08PC9BIDQxOCAwIFIvS1s0 MTkgMCBSIDQyMCAwIFJdL1AgMzM1IDAgUi9TL0xJPj4NZW5kb2JqDTQwMyAwIG9iag08PC9BIDQx NCAwIFIvS1s0MTUgMCBSIDQxNiAwIFJdL1AgMzM1IDAgUi9TL0xJPj4NZW5kb2JqDTQwNCAwIG9i ag08PC9BIDQxMCAwIFIvS1s0MTEgMCBSIDQxMiAwIFJdL1AgMzM1IDAgUi9TL0xJPj4NZW5kb2Jq DTQwNSAwIG9iag08PC9BIDQwNiAwIFIvS1s0MDcgMCBSIDQwOCAwIFJdL1AgMzM1IDAgUi9TL0xJ Pj4NZW5kb2JqDTQwNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNNDA3IDAgb2JqDTw8L0sgODYv UCA0MDUgMCBSL1MvTGJsL1BnIDYyIDAgUj4+DWVuZG9iag00MDggMCBvYmoNPDwvSyA0MDkgMCBS L1AgNDA1IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTQwOSAwIG9iag08PC9LIDg3L1AgNDA4IDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDEwIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYu MD4+DWVuZG9iag00MTEgMCBvYmoNPDwvSyA4NC9QIDQwNCAwIFIvUy9MYmwvUGcgNjIgMCBSPj4N ZW5kb2JqDTQxMiAwIG9iag08PC9LIDQxMyAwIFIvUCA0MDQgMCBSL1MvTGJvZHk+Pg1lbmRvYmoN NDEzIDAgb2JqDTw8L0sgODUvUCA0MTIgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAg Uj4+DWVuZG9iag00MTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTQxNSAwIG9iag08PC9LIDI3 L1AgNDAzIDAgUi9TL0xibC9QZyA2MiAwIFI+Pg1lbmRvYmoNNDE2IDAgb2JqDTw8L0sgNDE3IDAg Ui9QIDQwMyAwIFIvUy9MYm9keT4+DWVuZG9iag00MTcgMCBvYmoNPDwvSyAyOC9QIDQxNiAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTQxOCAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2 LjA+Pg1lbmRvYmoNNDE5IDAgb2JqDTw8L0sgODIvUCA0MDIgMCBSL1MvTGJsL1BnIDYyIDAgUj4+ DWVuZG9iag00MjAgMCBvYmoNPDwvSyA0MjEgMCBSL1AgNDAyIDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTQyMSAwIG9iag08PC9LIDgzL1AgNDIwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAw IFI+Pg1lbmRvYmoNNDIyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag00MjMgMCBvYmoNPDwvSyA4 MC9QIDQwMSAwIFIvUy9MYmwvUGcgNjIgMCBSPj4NZW5kb2JqDTQyNCAwIG9iag08PC9LIDQyNSAw IFIvUCA0MDEgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNDI1IDAgb2JqDTw8L0sgODEvUCA0MjQgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag00MjYgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTQyNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00MjggMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTQyOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAxOC4wPj4NZW5kb2JqDTQzMCAwIG9iag08PC9BIDQ0MSAwIFIv S1s0NDIgMCBSIDQ0MyAwIFJdL1AgMzMwIDAgUi9TL0xJPj4NZW5kb2JqDTQzMSAwIG9iag08PC9B IDQzNyAwIFIvS1s0MzggMCBSIDQzOSAwIFJdL1AgMzMwIDAgUi9TL0xJPj4NZW5kb2JqDTQzMiAw IG9iag08PC9BIDQzMyAwIFIvS1s0MzQgMCBSIDQzNSAwIFJdL1AgMzMwIDAgUi9TL0xJPj4NZW5k b2JqDTQzMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNNDM0IDAgb2JqDTw8L0sgNzQvUCA0MzIg MCBSL1MvTGJsL1BnIDYyIDAgUj4+DWVuZG9iag00MzUgMCBvYmoNPDwvSyA0MzYgMCBSL1AgNDMy IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTQzNiAwIG9iag08PC9LIDc1L1AgNDM1IDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDM3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVu ZG9iag00MzggMCBvYmoNPDwvSyA3Mi9QIDQzMSAwIFIvUy9MYmwvUGcgNjIgMCBSPj4NZW5kb2Jq DTQzOSAwIG9iag08PC9LIDQ0MCAwIFIvUCA0MzEgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNDQwIDAg b2JqDTw8L0sgNzMvUCA0MzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVu ZG9iag00NDEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTQ0MiAwIG9iag08PC9LIDcwL1AgNDMw IDAgUi9TL0xibC9QZyA2MiAwIFI+Pg1lbmRvYmoNNDQzIDAgb2JqDTw8L0sgNDQ0IDAgUi9QIDQz MCAwIFIvUy9MYm9keT4+DWVuZG9iag00NDQgMCBvYmoNPDwvSyA3MS9QIDQ0MyAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgNjIgMCBSPj4NZW5kb2JqDTQ0NSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag00NDYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ0NyAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NDQ4IDAgb2JqDTw8L0EgNTQxIDAgUi9LIDEyL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDQ5IDAgb2JqDTw8L0EgNTQwIDAgUi9LIDEzL1AgMjExIDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDUwIDAgb2JqDTw8L0Eg NTM5IDAgUi9LIDE0L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1l bmRvYmoNNDUxIDAgb2JqDTw8L0EgNTM4IDAgUi9LIDE1L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDUyIDAgb2JqDTw8L0EgNTM3IDAgUi9LIDE2L1Ag MjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDUzIDAgb2Jq DTw8L0EgNTM2IDAgUi9LIDE3L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAw IFI+Pg1lbmRvYmoNNDU0IDAgb2JqDTw8L0EgNTM1IDAgUi9LIDE4L1AgMjExIDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDU1IDAgb2JqDTw8L0EgNTM0IDAgUi9L IDE5L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDU2 IDAgb2JqDTw8L0EgNTMzIDAgUi9LIDIwL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyA2MiAwIFI+Pg1lbmRvYmoNNDU3IDAgb2JqDTw8L0EgNTMyIDAgUi9LIDIxL1AgMjExIDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDU4IDAgb2JqDTw8L0EgNTMx IDAgUi9LIDIyL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRv YmoNNDU5IDAgb2JqDTw8L0EgNTMwIDAgUi9LIDIzL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDYwIDAgb2JqDTw8L0EgNTI5IDAgUi9LIDI0L1AgMjEx IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDYxIDAgb2JqDTw8 L0EgNTI4IDAgUi9LIDI1L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+ Pg1lbmRvYmoNNDYyIDAgb2JqDTw8L0EgNTI3IDAgUi9LIDI2L1AgMjExIDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDYzIDAgb2JqDTw8L0EgNTI2IDAgUi9LIDI5 L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDY0IDAg b2JqDTw8L0EgNTI1IDAgUi9LIDMwL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2 MiAwIFI+Pg1lbmRvYmoNNDY1IDAgb2JqDTw8L0EgNTI0IDAgUi9LIDMxL1AgMjExIDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDY2IDAgb2JqDTw8L0EgNTIzIDAg Ui9LIDMyL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoN NDY3IDAgb2JqDTw8L0EgNTIyIDAgUi9LIDMzL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDY4IDAgb2JqDTw8L0EgNTIxIDAgUi9LIDM0L1AgMjExIDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDY5IDAgb2JqDTw8L0Eg NTIwIDAgUi9LIDM1L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1l bmRvYmoNNDcwIDAgb2JqDTw8L0EgNTE5IDAgUi9LIDM2L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDcxIDAgb2JqDTw8L0EgNTE4IDAgUi9LIDM3L1Ag MjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDcyIDAgb2Jq DTw8L0EgNTE3IDAgUi9LIDM5L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAw IFI+Pg1lbmRvYmoNNDczIDAgb2JqDTw8L0EgNTE2IDAgUi9LIDQxL1AgMjExIDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDc0IDAgb2JqDTw8L0EgNTE1IDAgUi9L IDQyL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDc1 IDAgb2JqDTw8L0EgNTE0IDAgUi9LIDQzL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyA2MiAwIFI+Pg1lbmRvYmoNNDc2IDAgb2JqDTw8L0EgNTEzIDAgUi9LIDQ0L1AgMjExIDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDc3IDAgb2JqDTw8L0EgNTEy IDAgUi9LIDQ1L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRv YmoNNDc4IDAgb2JqDTw8L0EgNTExIDAgUi9LIDQ2L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDc5IDAgb2JqDTw8L0EgNTEwIDAgUi9LIDQ3L1AgMjEx IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDgwIDAgb2JqDTw8 L0EgNTA5IDAgUi9LIDUwL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+ Pg1lbmRvYmoNNDgxIDAgb2JqDTw8L0EgNTA4IDAgUi9LIDUyL1AgMjExIDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDgyIDAgb2JqDTw8L0EgNTA3IDAgUi9LIDU0 L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDgzIDAg b2JqDTw8L0EgNTA2IDAgUi9LIDU1L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2 MiAwIFI+Pg1lbmRvYmoNNDg0IDAgb2JqDTw8L0EgNTA1IDAgUi9LIDU2L1AgMjExIDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDg1IDAgb2JqDTw8L0EgNTA0IDAg Ui9LIDU3L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoN NDg2IDAgb2JqDTw8L0EgNTAzIDAgUi9LIDU4L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDg3IDAgb2JqDTw8L0EgNTAyIDAgUi9LIDU5L1AgMjExIDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDg4IDAgb2JqDTw8L0Eg NTAxIDAgUi9LIDYwL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1l bmRvYmoNNDg5IDAgb2JqDTw8L0EgNTAwIDAgUi9LIDYxL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDkwIDAgb2JqDTw8L0EgNDk5IDAgUi9LIDYyL1Ag MjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDkxIDAgb2Jq DTw8L0EgNDk4IDAgUi9LIDYzL1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAw IFI+Pg1lbmRvYmoNNDkyIDAgb2JqDTw8L0EgNDk3IDAgUi9LIDY0L1AgMjExIDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDkzIDAgb2JqDTw8L0EgNDk2IDAgUi9L IDY1L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA2MiAwIFI+Pg1lbmRvYmoNNDk0 IDAgb2JqDTw8L0EgNDk1IDAgUi9LIDY2L1AgMjExIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyA2MiAwIFI+Pg1lbmRvYmoNNDk1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00OTYgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTQ5NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDk4IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag00OTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUwMCAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNTAxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MDIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUw MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTA0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MDUgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTUwNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTA3IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag01MDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUwOSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNTEwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MTEgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTUxMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MTMgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNTE0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUxNSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag01MTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTE3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTUxOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NTIwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUyMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01 MjIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTIzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUy NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3NS4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUyNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01 MjYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTI3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUy OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MjkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTMw IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUzMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MzIg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTMzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUzNCAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MzUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTM2IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUzNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MzggMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNTM5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU0MCAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag01NDEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTQyIDAgb2Jq DTw8L0EgNTQ3IDAgUi9LWzUgNiA3IDhdL1AgMjEwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyA2MiAwIFI+Pg1lbmRvYmoNNTQzIDAgb2JqDTw8L0EgNTQ2IDAgUi9LIDkvUCAyMTAgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9iag01NDQgMCBvYmoNPDwvQSA1NDUg MCBSL0sgMTAvUCAyMTAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDYyIDAgUj4+DWVuZG9i ag01NDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAyNy4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU0NiAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDI3LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNTQ3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU0OCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag01NDkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU1MCAwIG9iag08PC9LWzU1MSAwIFIgNTUyIDAg UiA1NTMgMCBSIDU1NCAwIFIgNTU1IDAgUiA1NTYgMCBSIDU1NyAwIFIgNTU4IDAgUiA1NTkgMCBS IDU2MCAwIFIgNTYxIDAgUiA1NjIgMCBSIDU2MyAwIFIgNTY0IDAgUiA1NjUgMCBSIDU2NiAwIFIg NTY3IDAgUiA1NjggMCBSIDU2OSAwIFIgNTcwIDAgUl0vUCAyMDUgMCBSL1MvU2VjdD4+DWVuZG9i ag01NTEgMCBvYmoNPDwvQSA3MDggMCBSL0MvTm9ybWFsKzIvSyAwL1AgNTUwIDAgUi9TL05vcm1h bC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTUyIDAgb2JqDTw8L0EgNzA3IDAgUi9LIDEvUCA1NTAgMCBS L1MvTm9ybWFsL1BnIDI4IDAgUj4+DWVuZG9iag01NTMgMCBvYmoNPDwvQSA3MDYgMCBSL0sgMi9Q IDU1MCAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5kb2JqDTU1NCAwIG9iag08PC9BIDcwNSAw IFIvSyAzL1AgNTUwIDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTU1IDAgb2JqDTw8 L0EgNzA0IDAgUi9LIDQvUCA1NTAgMCBSL1MvTm9ybWFsL1BnIDI4IDAgUj4+DWVuZG9iag01NTYg MCBvYmoNPDwvQSA3MDMgMCBSL0sgNS9QIDU1MCAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5k b2JqDTU1NyAwIG9iag08PC9BIDcwMiAwIFIvSyA2L1AgNTUwIDAgUi9TL05vcm1hbC9QZyAyOCAw IFI+Pg1lbmRvYmoNNTU4IDAgb2JqDTw8L0EgNzAxIDAgUi9LIDcvUCA1NTAgMCBSL1MvTm9ybWFs L1BnIDI4IDAgUj4+DWVuZG9iag01NTkgMCBvYmoNPDwvQSA3MDAgMCBSL0sgOC9QIDU1MCAwIFIv Uy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5kb2JqDTU2MCAwIG9iag08PC9BIDY5OSAwIFIvSyA5L1Ag NTUwIDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTYxIDAgb2JqDTw8L0tbNjg1IDAg UiA2ODYgMCBSIDY4NyAwIFIgNjg4IDAgUiA2ODkgMCBSIDY5MCAwIFIgNjkxIDAgUl0vUCA1NTAg MCBSL1MvVGV4dEJveD4+DWVuZG9iag01NjIgMCBvYmoNPDwvS1s2MjUgMCBSIDYyNiAwIFIgNjI3 IDAgUl0vUCA1NTAgMCBSL1MvVGV4dEJveD4+DWVuZG9iag01NjMgMCBvYmoNPDwvS1s2MjEgMCBS IDYyMiAwIFJdL1AgNTUwIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTY0IDAgb2JqDTw8L0tbNjE1 IDAgUiA2MTYgMCBSIDYxNyAwIFJdL1AgNTUwIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTY1IDAg b2JqDTw8L0tbNjExIDAgUiA2MTIgMCBSXS9QIDU1MCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTU2 NiAwIG9iag08PC9LWzU5NyAwIFIgNTk4IDAgUiA1OTkgMCBSIDYwMCAwIFIgNjAxIDAgUiA2MDIg MCBSIDYwMyAwIFJdL1AgNTUwIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTY3IDAgb2JqDTw8L0tb NTkxIDAgUiA1OTIgMCBSIDU5MyAwIFJdL1AgNTUwIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTY4 IDAgb2JqDTw8L0sgNTg3IDAgUi9QIDU1MCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTU2OSAwIG9i ag08PC9LWzU3MyAwIFIgNTc0IDAgUiA1NzUgMCBSIDU3NiAwIFJdL1AgNTUwIDAgUi9TL1RleHRC b3g+Pg1lbmRvYmoNNTcwIDAgb2JqDTw8L0sgNTcxIDAgUi9QIDU1MCAwIFIvUy9UZXh0Qm94Pj4N ZW5kb2JqDTU3MSAwIG9iag08PC9BIDU3MiAwIFIvS1s2NSA2Nl0vUCA1NzAgMCBSL1MvTm9ybWFs L1BnIDI4IDAgUj4+DWVuZG9iag01NzIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTczIDAgb2Jq DTw8L0EgNTg2IDAgUi9LIDU5L1AgNTY5IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoN NTc0IDAgb2JqDTw8L0EgNTgzIDAgUi9LWzYwIDU4NCAwIFJdL1AgNTY5IDAgUi9TL05vcm1hbC9Q ZyAyOCAwIFI+Pg1lbmRvYmoNNTc1IDAgb2JqDTw8L0EgNTgyIDAgUi9LIDYxL1AgNTY5IDAgUi9T L05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTc2IDAgb2JqDTw8L0EgNTc3IDAgUi9LWzU3OCAw IFIgNTc5IDAgUl0vUCA1NjkgMCBSL1MvTm9ybWFsPj4NZW5kb2JqDTU3NyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag01NzggMCBvYmoNPDwvQSA1ODEgMCBSL0sgNjMvUCA1NzYgMCBSL1MvSW5saW5l U2hhcGUvUGcgMjggMCBSL0FsdCj+/wBsAG8AZwBvAF8AYwBoAGkAbgBhADUAZQBfADEANgAwAC0A NQAwAC4AZwBpAGYpPj4NZW5kb2JqDTU3OSAwIG9iag08PC9BIDU4MCAwIFIvSyA2NC9QIDU3NiAw IFIvUy9JbmxpbmVTaGFwZS9QZyAyOCAwIFIvQWx0KP7/AEMAOgBcXABXAGgAaQB0AG4AZQB5AFxc AE0AYQByAHQAaQBuAEwAaQBuAGsAaQBuAGcAQgB1AHMAaQBuAGUAcwBzAEMAbwBuAHMAdQBsAHQA aQBuAGcAXFwAQgB1AHMAaQBuAGUAcwBzAEQAaQB2AGkAcwBpAG8AbgBzAFxcAEMAbwBuAGYAZQBy AGUAbgBjAGUAcwAmAFQAcgBhAGkAbgBpAG4AZwBzAFxcAEIAQgBTADIAMAAwADkAXFwAUABEAEYA XFwATABvAGcAbwBcXABMAE8ARwBPADMALgBnAGkAZik+Pg1lbmRvYmoNNTgwIDAgb2JqDTw8L1Bs YWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFs0NDEuMCAxOS4wIDUzOC4wIDU0LjBdPj4NZW5k b2JqDTU4MSAwIG9iag08PC9QbGFjZW1lbnQvSW5saW5lL08vTGF5b3V0L0JCb3hbMTgwLjAgMTku MCA0NDAuMCA1Ni4wXT4+DWVuZG9iag01ODIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTgzIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU4NCAwIG9iag08PC9BIDU4NSAwIFIvSyA2Mi9QIDU3NCAw IFIvUy9JbmxpbmVTaGFwZS9QZyAyOCAwIFIvQWx0KP7/AEMAOgBcXABXAGgAaQB0AG4AZQB5AFxc AE0AYQByAHQAaQBuAEwAaQBuAGsAaQBuAGcAQgB1AHMAaQBuAGUAcwBzAEMAbwBuAHMAdQBsAHQA aQBuAGcAXFwAQwBvAHIAcABvAHIAYQB0AGUARgBpAGwAZQBzAFxcAEQAbwBjAHUAbQBlAG4AdABz AFxcAEwAbwBnAG8AXFwATABPAEcATwBBAC0AcwBtAGEAbABsAC4AagBwAGcpPj4NZW5kb2JqDTU4 NSAwIG9iag08PC9QbGFjZW1lbnQvSW5saW5lL08vTGF5b3V0L0JCb3hbMTgwLjAgODAuMCAzNDMu MCAxMjAuMF0+Pg1lbmRvYmoNNTg2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU4NyAwIG9iag08 PC9BIDU4OCAwIFIvSyA1ODkgMCBSL1AgNTY4IDAgUi9TL05vcm1hbD4+DWVuZG9iag01ODggMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNTg5IDAgb2JqDTw8L0EgNTkwIDAgUi9LIDU4L1AgNTg3IDAg Ui9TL0lubGluZVNoYXBlL1BnIDI4IDAgUi9BbHQo/v8AQwA6AFxcAFcAaABpAHQAbgBlAHkAXFwA TQBhAHIAdABpAG4ATABpAG4AawBpAG4AZwBCAHUAcwBpAG4AZQBzAHMAQwBvAG4AcwB1AGwAdABp AG4AZwBcXABDAG8AcgBwAG8AcgBhAHQAZQBGAGkAbABlAHMAXFwARABvAGMAdQBtAGUAbgB0AHMA XFwATABvAGcAbwBcXABMAE8ARwBPAEEALQBzAG0AYQBsAGwALgBqAHAAZyk+Pg1lbmRvYmoNNTkw IDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFs0NDAuMCA2MTguMCA1ODUu MCA2NDguMF0+Pg1lbmRvYmoNNTkxIDAgb2JqDTw8L0EgNTk2IDAgUi9LIDU1L1AgNTY3IDAgUi9T L05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTkyIDAgb2JqDTw8L0EgNTk1IDAgUi9LIDU2L1Ag NTY3IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTkzIDAgb2JqDTw8L0EgNTk0IDAg Ui9LIDU3L1AgNTY3IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTk0IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTU5NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01OTYgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNNTk3IDAgb2JqDTw8L0EgNjEwIDAgUi9LIDQ4L1AgNTY2IDAgUi9TL05v cm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTk4IDAgb2JqDTw8L0EgNjA5IDAgUi9LIDQ5L1AgNTY2 IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNTk5IDAgb2JqDTw8L0EgNjA4IDAgUi9L IDUwL1AgNTY2IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjAwIDAgb2JqDTw8L0Eg NjA3IDAgUi9LIDUxL1AgNTY2IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjAxIDAg b2JqDTw8L0EgNjA2IDAgUi9LIDUyL1AgNTY2IDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRv YmoNNjAyIDAgb2JqDTw8L0EgNjA1IDAgUi9LIDUzL1AgNTY2IDAgUi9TL05vcm1hbC9QZyAyOCAw IFI+Pg1lbmRvYmoNNjAzIDAgb2JqDTw8L0EgNjA0IDAgUi9LIDU0L1AgNTY2IDAgUi9TL05vcm1h bC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjA0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MDUgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTYwNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjA3IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag02MDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYwOSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNjEwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MTEgMCBvYmoNPDwvQSA2MTQgMCBSL0sg NDYvUCA1NjUgMCBSL1MvTm9ybWFsL1BnIDI4IDAgUj4+DWVuZG9iag02MTIgMCBvYmoNPDwvQSA2 MTMgMCBSL0sgNDcvUCA1NjUgMCBSL1MvTm9ybWFsL1BnIDI4IDAgUj4+DWVuZG9iag02MTMgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNjE0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYxNSAwIG9i ag08PC9BIDYyMCAwIFIvSyA0My9QIDU2NCAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5kb2Jq DTYxNiAwIG9iag08PC9BIDYxOSAwIFIvSyA0NC9QIDU2NCAwIFIvUy9Ob3JtYWwvUGcgMjggMCBS Pj4NZW5kb2JqDTYxNyAwIG9iag08PC9BIDYxOCAwIFIvSyA0NS9QIDU2NCAwIFIvUy9Ob3JtYWwv UGcgMjggMCBSPj4NZW5kb2JqDTYxOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MTkgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNjIwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYyMSAwIG9iag08 PC9BIDYyNCAwIFIvSyA0MS9QIDU2MyAwIFIvUy9EZWZhdWx0L1BnIDI4IDAgUj4+DWVuZG9iag02 MjIgMCBvYmoNPDwvQSA2MjMgMCBSL0sgNDIvUCA1NjMgMCBSL1MvTm9ybWFsL1BnIDI4IDAgUj4+ DWVuZG9iag02MjMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjI0IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag02MjUgMCBvYmoNPDwvQSA2ODQgMCBSL0sgMTcvUCA1NjIgMCBSL1MvTm9ybWFsL1BnIDI4 IDAgUj4+DWVuZG9iag02MjYgMCBvYmoNPDwvS1s2MjkgMCBSIDYzMCAwIFIgNjMxIDAgUiA2MzIg MCBSIDYzMyAwIFIgNjM0IDAgUiA2MzUgMCBSIDYzNiAwIFIgNjM3IDAgUiA2MzggMCBSIDYzOSAw IFJdL1AgNTYyIDAgUi9TL0w+Pg1lbmRvYmoNNjI3IDAgb2JqDTw8L0EgNjI4IDAgUi9LIDQwL1Ag NTYyIDAgUi9TL05vcm1hbC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjI4IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAtNy45OTk5OC9TdGFydEluZGVudCAt NC45OTk5OD4+DWVuZG9iag02MjkgMCBvYmoNPDwvQSA2ODAgMCBSL0tbNjgxIDAgUiA2ODIgMCBS XS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzAgMCBvYmoNPDwvQSA2NzYgMCBSL0tbNjc3IDAg UiA2NzggMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzEgMCBvYmoNPDwvQSA2NzIgMCBS L0tbNjczIDAgUiA2NzQgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzIgMCBvYmoNPDwv QSA2NjggMCBSL0tbNjY5IDAgUiA2NzAgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzMg MCBvYmoNPDwvQSA2NjQgMCBSL0tbNjY1IDAgUiA2NjYgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVu ZG9iag02MzQgMCBvYmoNPDwvQSA2NjAgMCBSL0tbNjYxIDAgUiA2NjIgMCBSXS9QIDYyNiAwIFIv Uy9MST4+DWVuZG9iag02MzUgMCBvYmoNPDwvQSA2NTYgMCBSL0tbNjU3IDAgUiA2NTggMCBSXS9Q IDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzYgMCBvYmoNPDwvQSA2NTIgMCBSL0tbNjUzIDAgUiA2 NTQgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzcgMCBvYmoNPDwvQSA2NDggMCBSL0tb NjQ5IDAgUiA2NTAgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzggMCBvYmoNPDwvQSA2 NDQgMCBSL0tbNjQ1IDAgUiA2NDYgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9iag02MzkgMCBv YmoNPDwvQSA2NDAgMCBSL0tbNjQxIDAgUiA2NDIgMCBSXS9QIDYyNiAwIFIvUy9MST4+DWVuZG9i ag02NDAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNNjQxIDAgb2JqDTw8L0sgMzgvUCA2Mzkg MCBSL1MvTGJsL1BnIDI4IDAgUj4+DWVuZG9iag02NDIgMCBvYmoNPDwvSyA2NDMgMCBSL1AgNjM5 IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY0MyAwIG9iag08PC9LIDM5L1AgNjQyIDAgUi9TL0xpc3Qj MjBQYXJhZ3JhcGgvUGcgMjggMCBSPj4NZW5kb2JqDTY0NCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVu ZG9iag02NDUgMCBvYmoNPDwvSyAzNi9QIDYzOCAwIFIvUy9MYmwvUGcgMjggMCBSPj4NZW5kb2Jq DTY0NiAwIG9iag08PC9LIDY0NyAwIFIvUCA2MzggMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjQ3IDAg b2JqDTw8L0sgMzcvUCA2NDYgMCBSL1MvTGlzdCMyMFBhcmFncmFwaC9QZyAyOCAwIFI+Pg1lbmRv YmoNNjQ4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTY0OSAwIG9iag08PC9LIDM0L1AgNjM3 IDAgUi9TL0xibC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjUwIDAgb2JqDTw8L0sgNjUxIDAgUi9QIDYz NyAwIFIvUy9MYm9keT4+DWVuZG9iag02NTEgMCBvYmoNPDwvSyAzNS9QIDY1MCAwIFIvUy9MaXN0 IzIwUGFyYWdyYXBoL1BnIDI4IDAgUj4+DWVuZG9iag02NTIgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1l bmRvYmoNNjUzIDAgb2JqDTw8L0sgMzIvUCA2MzYgMCBSL1MvTGJsL1BnIDI4IDAgUj4+DWVuZG9i ag02NTQgMCBvYmoNPDwvSyA2NTUgMCBSL1AgNjM2IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY1NSAw IG9iag08PC9LIDMzL1AgNjU0IDAgUi9TL0xpc3QjMjBQYXJhZ3JhcGgvUGcgMjggMCBSPj4NZW5k b2JqDTY1NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag02NTcgMCBvYmoNPDwvSyAzMC9QIDYz NSAwIFIvUy9MYmwvUGcgMjggMCBSPj4NZW5kb2JqDTY1OCAwIG9iag08PC9LIDY1OSAwIFIvUCA2 MzUgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjU5IDAgb2JqDTw8L0sgMzEvUCA2NTggMCBSL1MvTGlz dCMyMFBhcmFncmFwaC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjYwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4N ZW5kb2JqDTY2MSAwIG9iag08PC9LIDI4L1AgNjM0IDAgUi9TL0xibC9QZyAyOCAwIFI+Pg1lbmRv YmoNNjYyIDAgb2JqDTw8L0sgNjYzIDAgUi9QIDYzNCAwIFIvUy9MYm9keT4+DWVuZG9iag02NjMg MCBvYmoNPDwvSyAyOS9QIDY2MiAwIFIvUy9MaXN0IzIwUGFyYWdyYXBoL1BnIDI4IDAgUj4+DWVu ZG9iag02NjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNNjY1IDAgb2JqDTw8L0sgMjYvUCA2 MzMgMCBSL1MvTGJsL1BnIDI4IDAgUj4+DWVuZG9iag02NjYgMCBvYmoNPDwvSyA2NjcgMCBSL1Ag NjMzIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY2NyAwIG9iag08PC9LIDI3L1AgNjY2IDAgUi9TL0xp c3QjMjBQYXJhZ3JhcGgvUGcgMjggMCBSPj4NZW5kb2JqDTY2OCAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+ DWVuZG9iag02NjkgMCBvYmoNPDwvSyAyNC9QIDYzMiAwIFIvUy9MYmwvUGcgMjggMCBSPj4NZW5k b2JqDTY3MCAwIG9iag08PC9LIDY3MSAwIFIvUCA2MzIgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjcx IDAgb2JqDTw8L0sgMjUvUCA2NzAgMCBSL1MvTGlzdCMyMFBhcmFncmFwaC9QZyAyOCAwIFI+Pg1l bmRvYmoNNjcyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTY3MyAwIG9iag08PC9LIDIyL1Ag NjMxIDAgUi9TL0xibC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjc0IDAgb2JqDTw8L0sgNjc1IDAgUi9Q IDYzMSAwIFIvUy9MYm9keT4+DWVuZG9iag02NzUgMCBvYmoNPDwvSyAyMy9QIDY3NCAwIFIvUy9M aXN0IzIwUGFyYWdyYXBoL1BnIDI4IDAgUj4+DWVuZG9iag02NzYgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+ Pg1lbmRvYmoNNjc3IDAgb2JqDTw8L0sgMjAvUCA2MzAgMCBSL1MvTGJsL1BnIDI4IDAgUj4+DWVu ZG9iag02NzggMCBvYmoNPDwvSyA2NzkgMCBSL1AgNjMwIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY3 OSAwIG9iag08PC9LIDIxL1AgNjc4IDAgUi9TL0xpc3QjMjBQYXJhZ3JhcGgvUGcgMjggMCBSPj4N ZW5kb2JqDTY4MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag02ODEgMCBvYmoNPDwvSyAxOC9Q IDYyOSAwIFIvUy9MYmwvUGcgMjggMCBSPj4NZW5kb2JqDTY4MiAwIG9iag08PC9LIDY4MyAwIFIv UCA2MjkgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjgzIDAgb2JqDTw8L0sgMTkvUCA2ODIgMCBSL1Mv TGlzdCMyMFBhcmFncmFwaC9QZyAyOCAwIFI+Pg1lbmRvYmoNNjg0IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTY4NSAwIG9iag08PC9BIDY5OCAwIFIvSyAxMC9QIDU2MSAwIFIvUy9Ob3JtYWwvUGcg MjggMCBSPj4NZW5kb2JqDTY4NiAwIG9iag08PC9BIDY5NyAwIFIvSyAxMS9QIDU2MSAwIFIvUy9O b3JtYWwvUGcgMjggMCBSPj4NZW5kb2JqDTY4NyAwIG9iag08PC9BIDY5NiAwIFIvSyAxMi9QIDU2 MSAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5kb2JqDTY4OCAwIG9iag08PC9BIDY5NSAwIFIv SyAxMy9QIDU2MSAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5kb2JqDTY4OSAwIG9iag08PC9B IDY5NCAwIFIvSyAxNC9QIDU2MSAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5kb2JqDTY5MCAw IG9iag08PC9BIDY5MyAwIFIvSyAxNS9QIDU2MSAwIFIvUy9Ob3JtYWwvUGcgMjggMCBSPj4NZW5k b2JqDTY5MSAwIG9iag08PC9BIDY5MiAwIFIvSyAxNi9QIDU2MSAwIFIvUy9Ob3JtYWwvUGcgMjgg MCBSPj4NZW5kb2JqDTY5MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAxMi4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY5MyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAxMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTY5NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAxMS4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY5NSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAxMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTY5NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAxMS4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY5NyAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAxMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTY5OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAxMi4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY5OSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag03MDAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzAxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTcwMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NzA0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcwNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03 MDYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzA3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcw OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MDkgMCBvYmoNPDwvS1s3MTAgMCBSIDcxMSAwIFIg NzEyIDAgUiA3MTMgMCBSIDcxNCAwIFIgNzE1IDAgUiA3MTYgMCBSIDcxNyAwIFIgNzE4IDAgUiA3 MTkgMCBSIDcyMCAwIFIgNzIxIDAgUiA3MjIgMCBSIDcyMyAwIFIgNzI0IDAgUiA3MjUgMCBSIDcy NiAwIFIgNzI3IDAgUiA3MjggMCBSIDcyOSAwIFIgNzMwIDAgUl0vUCAyMDQgMCBSL1MvU2VjdD4+ DWVuZG9iag03MTAgMCBvYmoNPDwvQSAxMDMzIDAgUi9DL05vIzIwU3BhY2luZy9LIDAvUCA3MDkg MCBSL1MvTm8jMjBTcGFjaW5nL1BnIDE1IDAgUj4+DWVuZG9iag03MTEgMCBvYmoNPDwvQSAxMDMy IDAgUi9LIDIvUCA3MDkgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag03MTIgMCBvYmoN PDwvS1sxMDI0IDAgUiAxMDI1IDAgUiAxMDI2IDAgUiAxMDI3IDAgUl0vUCA3MDkgMCBSL1MvVGV4 dEJveD4+DWVuZG9iag03MTMgMCBvYmoNPDwvS1s5NDAgMCBSIDk0MSAwIFIgOTQyIDAgUiA5NDMg MCBSIDk0NCAwIFIgOTQ1IDAgUiA5NDYgMCBSIDk0NyAwIFIgOTQ4IDAgUiA5NDkgMCBSIDk1MCAw IFIgOTUxIDAgUiA5NTIgMCBSIDk1MyAwIFIgOTU0IDAgUiA5NTUgMCBSIDk1NiAwIFIgOTU3IDAg UiA5NTggMCBSIDk1OSAwIFIgOTYwIDAgUiA5NjEgMCBSIDk2MiAwIFIgOTYzIDAgUiA5NjQgMCBS IDk2NSAwIFIgOTY2IDAgUiA5NjcgMCBSIDk2OCAwIFIgOTY5IDAgUiA5NzAgMCBSIDk3MSAwIFIg OTcyIDAgUiA5NzMgMCBSIDk3NCAwIFIgOTc1IDAgUiA5NzYgMCBSIDk3NyAwIFIgOTc4IDAgUiA5 NzkgMCBSIDk4MCAwIFIgOTgxIDAgUl0vUCA3MDkgMCBSL1MvVGV4dEJveD4+DWVuZG9iag03MTQg MCBvYmoNPDwvS1s4MjkgMCBSIDgzMCAwIFIgODMxIDAgUiA4MzIgMCBSIDgzMyAwIFIgODM0IDAg UiA4MzUgMCBSIDgzNiAwIFIgODM3IDAgUiA4MzggMCBSIDgzOSAwIFIgODQwIDAgUiA4NDEgMCBS IDg0MiAwIFIgODQzIDAgUiA4NDQgMCBSIDg0NSAwIFIgODQ2IDAgUiA4NDcgMCBSIDg0OCAwIFIg ODQ5IDAgUiA4NTAgMCBSIDg1MSAwIFIgODUyIDAgUiA4NTMgMCBSIDg1NCAwIFIgODU1IDAgUl0v UCA3MDkgMCBSL1MvVGV4dEJveD4+DWVuZG9iag03MTUgMCBvYmoNPDwvSyA4MjcgMCBSL1AgNzA5 IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNzE2IDAgb2JqDTw8L0sgODI1IDAgUi9QIDcwOSAwIFIv Uy9UZXh0Qm94Pj4NZW5kb2JqDTcxNyAwIG9iag08PC9LIDgyMyAwIFIvUCA3MDkgMCBSL1MvVGV4 dEJveD4+DWVuZG9iag03MTggMCBvYmoNPDwvSyA4MjEgMCBSL1AgNzA5IDAgUi9TL1RleHRCb3g+ Pg1lbmRvYmoNNzE5IDAgb2JqDTw8L0sgODE5IDAgUi9QIDcwOSAwIFIvUy9UZXh0Qm94Pj4NZW5k b2JqDTcyMCAwIG9iag08PC9LIDgxNyAwIFIvUCA3MDkgMCBSL1MvVGV4dEJveD4+DWVuZG9iag03 MjEgMCBvYmoNPDwvS1s3NTggMCBSIDc1OSAwIFIgNzYwIDAgUiA3NjEgMCBSIDc2MiAwIFIgNzYz IDAgUiA3NjQgMCBSIDc2NSAwIFIgNzY2IDAgUiA3NjcgMCBSIDc2OCAwIFIgNzY5IDAgUiA3NzAg MCBSIDc3MSAwIFIgNzcyIDAgUl0vUCA3MDkgMCBSL1MvVGV4dEJveD4+DWVuZG9iag03MjIgMCBv YmoNPDwvSyA3NTYgMCBSL1AgNzA5IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNzIzIDAgb2JqDTw8 L0sgNzU0IDAgUi9QIDcwOSAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTcyNCAwIG9iag08PC9LIDc1 MiAwIFIvUCA3MDkgMCBSL1MvVGV4dEJveD4+DWVuZG9iag03MjUgMCBvYmoNPDwvSyA3NTAgMCBS L1AgNzA5IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNzI2IDAgb2JqDTw8L0sgNzQ2IDAgUi9QIDcw OSAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTcyNyAwIG9iag08PC9LWzczNCAwIFIgNzM1IDAgUiA3 MzYgMCBSIDczNyAwIFIgNzM4IDAgUiA3MzkgMCBSXS9QIDcwOSAwIFIvUy9UZXh0Qm94Pj4NZW5k b2JqDTcyOCAwIG9iag08PC9BIDczMyAwIFIvSyAzL1AgNzA5IDAgUi9TL1NoYXBlL1BnIDE1IDAg Uj4+DWVuZG9iag03MjkgMCBvYmoNPDwvQSA3MzIgMCBSL0sgNC9QIDcwOSAwIFIvUy9TaGFwZS9Q ZyAxNSAwIFI+Pg1lbmRvYmoNNzMwIDAgb2JqDTw8L0EgNzMxIDAgUi9LIDExNC9QIDcwOSAwIFIv Uy9TaGFwZS9QZyAxNSAwIFI+Pg1lbmRvYmoNNzMxIDAgb2JqDTw8L1BsYWNlbWVudC9CbG9jay9P L0xheW91dC9FbmRJbmRlbnQgNDY2LjAvU3RhcnRJbmRlbnQgLTcxLjAvQkJveFsxOS4wIDc0Ny4w IDM5LjAgNzUzLjBdPj4NZW5kb2JqDTczMiAwIG9iag08PC9QbGFjZW1lbnQvQmxvY2svTy9MYXlv dXQvRW5kSW5kZW50IC05MC4wL1N0YXJ0SW5kZW50IC05MC4wL0JCb3hbMC4wIDc1MC4wIDU5NS4w IDg0Mi4wXT4+DWVuZG9iag03MzMgMCBvYmoNPDwvUGxhY2VtZW50L0Jsb2NrL08vTGF5b3V0L0Vu ZEluZGVudCAtOTAuMC9TdGFydEluZGVudCAtOTAuMC9CQm94WzAuMCAwLjAgNTk1LjAgODQyLjBd Pj4NZW5kb2JqDTczNCAwIG9iag08PC9BIDc0NSAwIFIvS1sxNDEgMTQ4XS9QIDcyNyAwIFIvUy9O b3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTczNSAwIG9iag08PC9BIDc0NCAwIFIvSyAxNDkvUCA3 MjcgMCBSL1MvRGVmYXVsdC9QZyAxNSAwIFI+Pg1lbmRvYmoNNzM2IDAgb2JqDTw8L0EgNzQzIDAg Ui9LIDE1MC9QIDcyNyAwIFIvUy9EZWZhdWx0L1BnIDE1IDAgUj4+DWVuZG9iag03MzcgMCBvYmoN PDwvQSA3NDIgMCBSL0sgMTUxL1AgNzI3IDAgUi9TL0RlZmF1bHQvUGcgMTUgMCBSPj4NZW5kb2Jq DTczOCAwIG9iag08PC9BIDc0MSAwIFIvSyAxNTIvUCA3MjcgMCBSL1MvRGVmYXVsdC9QZyAxNSAw IFI+Pg1lbmRvYmoNNzM5IDAgb2JqDTw8L0EgNzQwIDAgUi9LIDE1My9QIDcyNyAwIFIvUy9Ob3Jt YWwvUGcgMTUgMCBSPj4NZW5kb2JqDTc0MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NDEgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTc0MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzQzIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag03NDQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc0NSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag03NDYgMCBvYmoNPDwvQSA3NDcgMCBSL0tbMTQ2IDc0OCAwIFJdL1AgNzI2IDAg Ui9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNNzQ3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTc0OCAwIG9iag08PC9BIDc0OSAwIFIvSyAxNDcvUCA3NDYgMCBSL1MvSW5saW5lU2hhcGUvUGcg MTUgMCBSL0FsdCj+/wBMAE8ARwBPAEEALQBzAG0AYQBsAGwpPj4NZW5kb2JqDTc0OSAwIG9iag08 PC9QbGFjZW1lbnQvSW5saW5lL08vTGF5b3V0L0JCb3hbNDEzLjAgNzY1LjAgNTY5LjAgODAyLjBd Pj4NZW5kb2JqDTc1MCAwIG9iag08PC9BIDc1MSAwIFIvSyAxNDUvUCA3MjUgMCBSL1MvTm9ybWFs L1BnIDE1IDAgUj4+DWVuZG9iag03NTEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzUyIDAgb2Jq DTw8L0EgNzUzIDAgUi9LWzEzIDE0NF0vUCA3MjQgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVu ZG9iag03NTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzU0IDAgb2JqDTw8L0EgNzU1IDAgUi9L WzYyIDE0M10vUCA3MjMgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag03NTUgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNzU2IDAgb2JqDTw8L0EgNzU3IDAgUi9LWzQ0IDE0Ml0vUCA3MjIg MCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag03NTcgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNzU4IDAgb2JqDTw8L0EgODE2IDAgUi9LIDExNS9QIDcyMSAwIFIvUy9Ob3JtYWwvUGcgMTUg MCBSPj4NZW5kb2JqDTc1OSAwIG9iag08PC9BIDgxNSAwIFIvSyAxMTYvUCA3MjEgMCBSL1MvTm9y bWFsL1BnIDE1IDAgUj4+DWVuZG9iag03NjAgMCBvYmoNPDwvS1s3ODUgMCBSIDc4NiAwIFIgNzg3 IDAgUiA3ODggMCBSIDc4OSAwIFIgNzkwIDAgUl0vUCA3MjEgMCBSL1MvTD4+DWVuZG9iag03NjEg MCBvYmoNPDwvQSA3ODQgMCBSL0sgMTI5L1AgNzIxIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1l bmRvYmoNNzYyIDAgb2JqDTw8L0EgNzgzIDAgUi9LIDEzMC9QIDcyMSAwIFIvUy9EZWZhdWx0L1Bn IDE1IDAgUj4+DWVuZG9iag03NjMgMCBvYmoNPDwvQSA3ODIgMCBSL0sgMTMxL1AgNzIxIDAgUi9T L0RlZmF1bHQvUGcgMTUgMCBSPj4NZW5kb2JqDTc2NCAwIG9iag08PC9BIDc4MSAwIFIvSyAxMzIv UCA3MjEgMCBSL1MvRGVmYXVsdC9QZyAxNSAwIFI+Pg1lbmRvYmoNNzY1IDAgb2JqDTw8L0EgNzgw IDAgUi9LIDEzMy9QIDcyMSAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTc2NiAwIG9i ag08PC9BIDc3OSAwIFIvSyAxMzQvUCA3MjEgMCBSL1MvRGVmYXVsdC9QZyAxNSAwIFI+Pg1lbmRv YmoNNzY3IDAgb2JqDTw8L0EgNzc4IDAgUi9LWzM5IDEzNV0vUCA3MjEgMCBSL1MvRGVmYXVsdC9Q ZyAxNSAwIFI+Pg1lbmRvYmoNNzY4IDAgb2JqDTw8L0EgNzc3IDAgUi9LIDEzNi9QIDcyMSAwIFIv Uy9EZWZhdWx0L1BnIDE1IDAgUj4+DWVuZG9iag03NjkgMCBvYmoNPDwvQSA3NzYgMCBSL0sgMTM3 L1AgNzIxIDAgUi9TL0RlZmF1bHQvUGcgMTUgMCBSPj4NZW5kb2JqDTc3MCAwIG9iag08PC9BIDc3 NSAwIFIvSyAxMzgvUCA3MjEgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag03NzEgMCBv YmoNPDwvQSA3NzQgMCBSL0sgMTM5L1AgNzIxIDAgUi9TL3ZlcmRhZGEvUGcgMTUgMCBSPj4NZW5k b2JqDTc3MiAwIG9iag08PC9BIDc3MyAwIFIvSyAxNDAvUCA3MjEgMCBSL1MvdmVyZGFkYS9QZyAx NSAwIFI+Pg1lbmRvYmoNNzczIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NzQgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTc3NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzc2IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag03NzcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc3OCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN Nzc5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03ODAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc4MSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNzgyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03ODMgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTc4NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzg1IDAgb2JqDTw8L0Eg ODExIDAgUi9LWzgxMiAwIFIgODEzIDAgUl0vUCA3NjAgMCBSL1MvTEk+Pg1lbmRvYmoNNzg2IDAg b2JqDTw8L0EgODA3IDAgUi9LWzgwOCAwIFIgODA5IDAgUl0vUCA3NjAgMCBSL1MvTEk+Pg1lbmRv YmoNNzg3IDAgb2JqDTw8L0EgODAzIDAgUi9LWzgwNCAwIFIgODA1IDAgUl0vUCA3NjAgMCBSL1Mv TEk+Pg1lbmRvYmoNNzg4IDAgb2JqDTw8L0EgNzk5IDAgUi9LWzgwMCAwIFIgODAxIDAgUl0vUCA3 NjAgMCBSL1MvTEk+Pg1lbmRvYmoNNzg5IDAgb2JqDTw8L0EgNzk1IDAgUi9LWzc5NiAwIFIgNzk3 IDAgUl0vUCA3NjAgMCBSL1MvTEk+Pg1lbmRvYmoNNzkwIDAgb2JqDTw8L0EgNzkxIDAgUi9LWzc5 MiAwIFIgNzkzIDAgUl0vUCA3NjAgMCBSL1MvTEk+Pg1lbmRvYmoNNzkxIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYu MD4+DWVuZG9iag03OTIgMCBvYmoNPDwvSyAxMjcvUCA3OTAgMCBSL1MvTGJsL1BnIDE1IDAgUj4+ DWVuZG9iag03OTMgMCBvYmoNPDwvSyA3OTQgMCBSL1AgNzkwIDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTc5NCAwIG9iag08PC9LIDEyOC9QIDc5MyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2Jq DTc5NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNNzk2IDAgb2JqDTw8L0sgMTI1L1AgNzg5IDAg Ui9TL0xibC9QZyAxNSAwIFI+Pg1lbmRvYmoNNzk3IDAgb2JqDTw8L0sgNzk4IDAgUi9QIDc4OSAw IFIvUy9MYm9keT4+DWVuZG9iag03OTggMCBvYmoNPDwvSyAxMjYvUCA3OTcgMCBSL1MvTm9ybWFs L1BnIDE1IDAgUj4+DWVuZG9iag03OTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTgwMCAwIG9i ag08PC9LIDEyMy9QIDc4OCAwIFIvUy9MYmwvUGcgMTUgMCBSPj4NZW5kb2JqDTgwMSAwIG9iag08 PC9LIDgwMiAwIFIvUCA3ODggMCBSL1MvTGJvZHk+Pg1lbmRvYmoNODAyIDAgb2JqDTw8L0sgMTI0 L1AgODAxIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODAzIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYu MD4+DWVuZG9iag04MDQgMCBvYmoNPDwvSyAxMjEvUCA3ODcgMCBSL1MvTGJsL1BnIDE1IDAgUj4+ DWVuZG9iag04MDUgMCBvYmoNPDwvSyA4MDYgMCBSL1AgNzg3IDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTgwNiAwIG9iag08PC9LIDEyMi9QIDgwNSAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2Jq DTgwNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNODA4IDAgb2JqDTw8L0sgMTE5L1AgNzg2IDAg Ui9TL0xibC9QZyAxNSAwIFI+Pg1lbmRvYmoNODA5IDAgb2JqDTw8L0sgODEwIDAgUi9QIDc4NiAw IFIvUy9MYm9keT4+DWVuZG9iag04MTAgMCBvYmoNPDwvSyAxMjAvUCA4MDkgMCBSL1MvTm9ybWFs L1BnIDE1IDAgUj4+DWVuZG9iag04MTEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTgxMiAwIG9i ag08PC9LIDExNy9QIDc4NSAwIFIvUy9MYmwvUGcgMTUgMCBSPj4NZW5kb2JqDTgxMyAwIG9iag08 PC9LIDgxNCAwIFIvUCA3ODUgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNODE0IDAgb2JqDTw8L0sgMTE4 L1AgODEzIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODE1IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag04MTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtNDguMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDQ4LjA+Pg1lbmRvYmoNODE3IDAgb2JqDTw8L0EgODE4 IDAgUi9LIDExMy9QIDcyMCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTgxOCAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag04MTkgMCBvYmoNPDwvQSA4MjAgMCBSL0sgMTEyL1AgNzE5IDAg Ui9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODIwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04 MjEgMCBvYmoNPDwvQSA4MjIgMCBSL0sgMTExL1AgNzE4IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+ Pg1lbmRvYmoNODIyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTgyMyAwIG9iag08PC9BIDgyNCAw IFIvS1syNiAxMDkgMTEwXS9QIDcxNyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTgy NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04MjUgMCBvYmoNPDwvQSA4MjYgMCBSL0tbMSAxMDhd L1AgNzE2IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODI2IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTgyNyAwIG9iag08PC9BIDgyOCAwIFIvSyAxNi9QIDcxNSAwIFIvUy9Ob3JtYWwv UGcgMTUgMCBSPj4NZW5kb2JqDTgyOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04MjkgMCBvYmoN PDwvQSA5MzkgMCBSL0sgNjYvUCA3MTQgMCBSL1MvRGVmYXVsdC9QZyAxNSAwIFI+Pg1lbmRvYmoN ODMwIDAgb2JqDTw8L0EgOTM4IDAgUi9LIDE4L1AgNzE0IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+ Pg1lbmRvYmoNODMxIDAgb2JqDTw8L0tbOTIzIDAgUiA5MjQgMCBSIDkyNSAwIFJdL1AgNzE0IDAg Ui9TL0w+Pg1lbmRvYmoNODMyIDAgb2JqDTw8L0EgOTIyIDAgUi9LIDczL1AgNzE0IDAgUi9TL05v cm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODMzIDAgb2JqDTw8L0EgOTIxIDAgUi9LIDc0L1AgNzE0 IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODM0IDAgb2JqDTw8L0EgOTIwIDAgUi9L IDI4L1AgNzE0IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODM1IDAgb2JqDTw8L0tb ODk1IDAgUiA4OTYgMCBSIDg5NyAwIFIgODk4IDAgUiA4OTkgMCBSXS9QIDcxNCAwIFIvUy9MPj4N ZW5kb2JqDTgzNiAwIG9iag08PC9BIDg5NCAwIFIvSyAzOC9QIDcxNCAwIFIvUy9Ob3JtYWwvUGcg MTUgMCBSPj4NZW5kb2JqDTgzNyAwIG9iag08PC9BIDg5MyAwIFIvSyA4NS9QIDcxNCAwIFIvUy9O b3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTgzOCAwIG9iag08PC9BIDg5MiAwIFIvSyA4Ni9QIDcx NCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTgzOSAwIG9iag08PC9BIDg5MSAwIFIv SyA4Ny9QIDcxNCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg0MCAwIG9iag08PC9B IDg5MCAwIFIvSyA4OC9QIDcxNCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg0MSAw IG9iag08PC9BIDg4OSAwIFIvSyA4OS9QIDcxNCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5k b2JqDTg0MiAwIG9iag08PC9BIDg4OCAwIFIvSyA5MC9QIDcxNCAwIFIvUy9Ob3JtYWwvUGcgMTUg MCBSPj4NZW5kb2JqDTg0MyAwIG9iag08PC9BIDg4NyAwIFIvSyA5MS9QIDcxNCAwIFIvUy9Ob3Jt YWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg0NCAwIG9iag08PC9BIDg4NiAwIFIvSyA0OC9QIDcxNCAw IFIvUy9ObyMyMFNwYWNpbmcvUGcgMTUgMCBSPj4NZW5kb2JqDTg0NSAwIG9iag08PC9LWzg2NiAw IFIgODY3IDAgUiA4NjggMCBSIDg2OSAwIFJdL1AgNzE0IDAgUi9TL0w+Pg1lbmRvYmoNODQ2IDAg b2JqDTw8L0EgODY1IDAgUi9LIDk4L1AgNzE0IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRv YmoNODQ3IDAgb2JqDTw8L0EgODY0IDAgUi9LIDk5L1AgNzE0IDAgUi9TL05vcm1hbC9QZyAxNSAw IFI+Pg1lbmRvYmoNODQ4IDAgb2JqDTw8L0EgODYzIDAgUi9LIDEwMC9QIDcxNCAwIFIvUy9Ob3Jt YWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg0OSAwIG9iag08PC9BIDg2MiAwIFIvSyAxMDEvUCA3MTQg MCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag04NTAgMCBvYmoNPDwvQSA4NjEgMCBSL0sg MTAyL1AgNzE0IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNODUxIDAgb2JqDTw8L0Eg ODYwIDAgUi9LIDEwMy9QIDcxNCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg1MiAw IG9iag08PC9BIDg1OSAwIFIvSyAxMDQvUCA3MTQgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVu ZG9iag04NTMgMCBvYmoNPDwvQSA4NTggMCBSL0sgMTA1L1AgNzE0IDAgUi9TL05vcm1hbC9QZyAx NSAwIFI+Pg1lbmRvYmoNODU0IDAgb2JqDTw8L0EgODU3IDAgUi9LIDEwNi9QIDcxNCAwIFIvUy9O b3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg1NSAwIG9iag08PC9BIDg1NiAwIFIvSyAxMDcvUCA3 MTQgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag04NTYgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTg1NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNODU4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04 NTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTg2MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNODYxIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag04NjIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTg2MyAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNODY0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04NjUgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTg2NiAwIG9iag08PC9BIDg4MiAwIFIvS1s4ODMgMCBSIDg4NCAwIFJdL1AgODQ1 IDAgUi9TL0xJPj4NZW5kb2JqDTg2NyAwIG9iag08PC9BIDg3OCAwIFIvS1s4NzkgMCBSIDg4MCAw IFJdL1AgODQ1IDAgUi9TL0xJPj4NZW5kb2JqDTg2OCAwIG9iag08PC9BIDg3NCAwIFIvS1s4NzUg MCBSIDg3NiAwIFJdL1AgODQ1IDAgUi9TL0xJPj4NZW5kb2JqDTg2OSAwIG9iag08PC9BIDg3MCAw IFIvS1s4NzEgMCBSIDg3MiAwIFJdL1AgODQ1IDAgUi9TL0xJPj4NZW5kb2JqDTg3MCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDM2LjA+Pg1lbmRvYmoNODcxIDAgb2JqDTw8L0sgNTgvUCA4NjkgMCBSL1MvTGJsL1BnIDE1 IDAgUj4+DWVuZG9iag04NzIgMCBvYmoNPDwvSyA4NzMgMCBSL1AgODY5IDAgUi9TL0xib2R5Pj4N ZW5kb2JqDTg3MyAwIG9iag08PC9LIDU5L1AgODcyIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1l bmRvYmoNODc0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag04NzUgMCBvYmoNPDwvSyA5Ni9QIDg2 OCAwIFIvUy9MYmwvUGcgMTUgMCBSPj4NZW5kb2JqDTg3NiAwIG9iag08PC9LIDg3NyAwIFIvUCA4 NjggMCBSL1MvTGJvZHk+Pg1lbmRvYmoNODc3IDAgb2JqDTw8L0sgOTcvUCA4NzYgMCBSL1MvTm9y bWFsL1BnIDE1IDAgUj4+DWVuZG9iag04NzggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTg3OSAw IG9iag08PC9LIDk0L1AgODY3IDAgUi9TL0xibC9QZyAxNSAwIFI+Pg1lbmRvYmoNODgwIDAgb2Jq DTw8L0sgODgxIDAgUi9QIDg2NyAwIFIvUy9MYm9keT4+DWVuZG9iag04ODEgMCBvYmoNPDwvSyA5 NS9QIDg4MCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTg4MiAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2 LjA+Pg1lbmRvYmoNODgzIDAgb2JqDTw8L0sgOTIvUCA4NjYgMCBSL1MvTGJsL1BnIDE1IDAgUj4+ DWVuZG9iag04ODQgMCBvYmoNPDwvSyA4ODUgMCBSL1AgODY2IDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTg4NSAwIG9iag08PC9LIDkzL1AgODg0IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoN ODg2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04ODcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNODg4 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTUyLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCA1Mi4wPj4NZW5kb2JqDTg4OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNODkw IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04OTEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTg5MiAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNODkzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04OTQgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTg5NSAwIG9iag08PC9BIDkxNiAwIFIvS1s5MTcgMCBSIDkxOCAwIFJdL1Ag ODM1IDAgUi9TL0xJPj4NZW5kb2JqDTg5NiAwIG9iag08PC9BIDkxMiAwIFIvS1s5MTMgMCBSIDkx NCAwIFJdL1AgODM1IDAgUi9TL0xJPj4NZW5kb2JqDTg5NyAwIG9iag08PC9BIDkwOCAwIFIvS1s5 MDkgMCBSIDkxMCAwIFJdL1AgODM1IDAgUi9TL0xJPj4NZW5kb2JqDTg5OCAwIG9iag08PC9BIDkw NCAwIFIvS1s5MDUgMCBSIDkwNiAwIFJdL1AgODM1IDAgUi9TL0xJPj4NZW5kb2JqDTg5OSAwIG9i ag08PC9BIDkwMCAwIFIvS1s5MDEgMCBSIDkwMiAwIFJdL1AgODM1IDAgUi9TL0xJPj4NZW5kb2Jq DTkwMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNOTAxIDAgb2JqDTw8L0sgODMvUCA4OTkgMCBS L1MvTGJsL1BnIDE1IDAgUj4+DWVuZG9iag05MDIgMCBvYmoNPDwvSyA5MDMgMCBSL1AgODk5IDAg Ui9TL0xib2R5Pj4NZW5kb2JqDTkwMyAwIG9iag08PC9LIDg0L1AgOTAyIDAgUi9TL05vcm1hbC9Q ZyAxNSAwIFI+Pg1lbmRvYmoNOTA0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag05MDUgMCBvYmoN PDwvSyA4MS9QIDg5OCAwIFIvUy9MYmwvUGcgMTUgMCBSPj4NZW5kb2JqDTkwNiAwIG9iag08PC9L IDkwNyAwIFIvUCA4OTggMCBSL1MvTGJvZHk+Pg1lbmRvYmoNOTA3IDAgb2JqDTw8L0sgODIvUCA5 MDYgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05MDggMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4N ZW5kb2JqDTkwOSAwIG9iag08PC9LIDc5L1AgODk3IDAgUi9TL0xibC9QZyAxNSAwIFI+Pg1lbmRv YmoNOTEwIDAgb2JqDTw8L0sgOTExIDAgUi9QIDg5NyAwIFIvUy9MYm9keT4+DWVuZG9iag05MTEg MCBvYmoNPDwvSyA4MC9QIDkxMCAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTkxMiAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNOTEzIDAgb2JqDTw8L0sgNzcvUCA4OTYgMCBSL1MvTGJs L1BnIDE1IDAgUj4+DWVuZG9iag05MTQgMCBvYmoNPDwvSyA5MTUgMCBSL1AgODk2IDAgUi9TL0xi b2R5Pj4NZW5kb2JqDTkxNSAwIG9iag08PC9LIDc4L1AgOTE0IDAgUi9TL05vcm1hbC9QZyAxNSAw IFI+Pg1lbmRvYmoNOTE2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag05MTcgMCBvYmoNPDwvSyA3 NS9QIDg5NSAwIFIvUy9MYmwvUGcgMTUgMCBSPj4NZW5kb2JqDTkxOCAwIG9iag08PC9LIDkxOSAw IFIvUCA4OTUgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNOTE5IDAgb2JqDTw8L0sgNzYvUCA5MTggMCBS L1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05MjAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTky MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC00OC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgNDguMD4+DWVuZG9iag05MjIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTky MyAwIG9iag08PC9BIDkzNCAwIFIvS1s5MzUgMCBSIDkzNiAwIFJdL1AgODMxIDAgUi9TL0xJPj4N ZW5kb2JqDTkyNCAwIG9iag08PC9BIDkzMCAwIFIvS1s5MzEgMCBSIDkzMiAwIFJdL1AgODMxIDAg Ui9TL0xJPj4NZW5kb2JqDTkyNSAwIG9iag08PC9BIDkyNiAwIFIvS1s5MjcgMCBSIDkyOCAwIFJd L1AgODMxIDAgUi9TL0xJPj4NZW5kb2JqDTkyNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNOTI3 IDAgb2JqDTw8L0sgNzEvUCA5MjUgMCBSL1MvTGJsL1BnIDE1IDAgUj4+DWVuZG9iag05MjggMCBv YmoNPDwvSyA5MjkgMCBSL1AgOTI1IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTkyOSAwIG9iag08PC9L IDcyL1AgOTI4IDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNOTMwIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MzYuMD4+DWVuZG9iag05MzEgMCBvYmoNPDwvSyA2OS9QIDkyNCAwIFIvUy9MYmwvUGcgMTUgMCBS Pj4NZW5kb2JqDTkzMiAwIG9iag08PC9LIDkzMyAwIFIvUCA5MjQgMCBSL1MvTGJvZHk+Pg1lbmRv YmoNOTMzIDAgb2JqDTw8L0sgNzAvUCA5MzIgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9i ag05MzQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTkzNSAwIG9iag08PC9LIDY3L1AgOTIzIDAg Ui9TL0xibC9QZyAxNSAwIFI+Pg1lbmRvYmoNOTM2IDAgb2JqDTw8L0sgOTM3IDAgUi9QIDkyMyAw IFIvUy9MYm9keT4+DWVuZG9iag05MzcgMCBvYmoNPDwvSyA2OC9QIDkzNiAwIFIvUy9Ob3JtYWwv UGcgMTUgMCBSPj4NZW5kb2JqDTkzOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MzkgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTk0MCAwIG9iag08PC9BIDEwMjMgMCBSL0sgMTIvUCA3MTMgMCBSL1Mv Tm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05NDEgMCBvYmoNPDwvQSAxMDIyIDAgUi9LIDE0L1Ag NzEzIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNOTQyIDAgb2JqDTw8L0EgMTAyMSAw IFIvSyAxNS9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk0MyAwIG9iag08 PC9BIDEwMjAgMCBSL0sgMTcvUCA3MTMgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05 NDQgMCBvYmoNPDwvQSAxMDE5IDAgUi9LIDE5L1AgNzEzIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+ Pg1lbmRvYmoNOTQ1IDAgb2JqDTw8L0EgMTAxOCAwIFIvSyAyMC9QIDcxMyAwIFIvUy9Ob3JtYWwv UGcgMTUgMCBSPj4NZW5kb2JqDTk0NiAwIG9iag08PC9BIDEwMTcgMCBSL0sgMjEvUCA3MTMgMCBS L1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05NDcgMCBvYmoNPDwvQSAxMDE2IDAgUi9LIDIy L1AgNzEzIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNOTQ4IDAgb2JqDTw8L0EgMTAx NSAwIFIvSyAyMy9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk0OSAwIG9i ag08PC9BIDEwMTQgMCBSL0sgMjQvUCA3MTMgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9i ag05NTAgMCBvYmoNPDwvQSAxMDEzIDAgUi9LIDI1L1AgNzEzIDAgUi9TL05vcm1hbC9QZyAxNSAw IFI+Pg1lbmRvYmoNOTUxIDAgb2JqDTw8L0EgMTAxMiAwIFIvSyAyNy9QIDcxMyAwIFIvUy9Ob3Jt YWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk1MiAwIG9iag08PC9BIDEwMTEgMCBSL0sgMjkvUCA3MTMg MCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05NTMgMCBvYmoNPDwvQSAxMDEwIDAgUi9L IDMwL1AgNzEzIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNOTU0IDAgb2JqDTw8L0Eg MTAwOSAwIFIvSyAzMS9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk1NSAw IG9iag08PC9BIDEwMDggMCBSL0sgMzIvUCA3MTMgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVu ZG9iag05NTYgMCBvYmoNPDwvQSAxMDA3IDAgUi9LIDMzL1AgNzEzIDAgUi9TL05vcm1hbC9QZyAx NSAwIFI+Pg1lbmRvYmoNOTU3IDAgb2JqDTw8L0EgMTAwNiAwIFIvSyAzNC9QIDcxMyAwIFIvUy9O b3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk1OCAwIG9iag08PC9BIDEwMDUgMCBSL0sgMzUvUCA3 MTMgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag05NTkgMCBvYmoNPDwvQSAxMDA0IDAg Ui9LIDM2L1AgNzEzIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNOTYwIDAgb2JqDTw8 L0EgMTAwMyAwIFIvSyAzNy9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk2 MSAwIG9iag08PC9BIDEwMDIgMCBSL0sgNDAvUCA3MTMgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+ DWVuZG9iag05NjIgMCBvYmoNPDwvQSAxMDAxIDAgUi9LIDQxL1AgNzEzIDAgUi9TL05vcm1hbC9Q ZyAxNSAwIFI+Pg1lbmRvYmoNOTYzIDAgb2JqDTw8L0EgMTAwMCAwIFIvSyA0Mi9QIDcxMyAwIFIv Uy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk2NCAwIG9iag08PC9BIDk5OSAwIFIvSyA0My9Q IDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk2NSAwIG9iag08PC9BIDk5OCAw IFIvSyA0NS9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk2NiAwIG9iag08 PC9BIDk5NyAwIFIvSyA0Ni9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk2 NyAwIG9iag08PC9BIDk5NiAwIFIvSyA0Ny9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4N ZW5kb2JqDTk2OCAwIG9iag08PC9BIDk5NSAwIFIvSyA0OS9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcg MTUgMCBSPj4NZW5kb2JqDTk2OSAwIG9iag08PC9BIDk5NCAwIFIvSyA1MC9QIDcxMyAwIFIvUy9O b3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3MCAwIG9iag08PC9BIDk5MyAwIFIvSyA1MS9QIDcx MyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3MSAwIG9iag08PC9BIDk5MiAwIFIv SyA1Mi9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3MiAwIG9iag08PC9B IDk5MSAwIFIvSyA1My9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3MyAw IG9iag08PC9BIDk5MCAwIFIvSyA1NC9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5k b2JqDTk3NCAwIG9iag08PC9BIDk4OSAwIFIvSyA1NS9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUg MCBSPj4NZW5kb2JqDTk3NSAwIG9iag08PC9BIDk4OCAwIFIvSyA1Ni9QIDcxMyAwIFIvUy9Ob3Jt YWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3NiAwIG9iag08PC9BIDk4NyAwIFIvSyA1Ny9QIDcxMyAw IFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3NyAwIG9iag08PC9BIDk4NiAwIFIvSyA2 MC9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3OCAwIG9iag08PC9BIDk4 NSAwIFIvSyA2MS9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2JqDTk3OSAwIG9i ag08PC9BIDk4NCAwIFIvSyA2My9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBSPj4NZW5kb2Jq DTk4MCAwIG9iag08PC9BIDk4MyAwIFIvSyA2NC9QIDcxMyAwIFIvUy9Ob3JtYWwvUGcgMTUgMCBS Pj4NZW5kb2JqDTk4MSAwIG9iag08PC9BIDk4MiAwIFIvSyA2NS9QIDcxMyAwIFIvUy9Ob3JtYWwv UGcgMTUgMCBSPj4NZW5kb2JqDTk4MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTgzIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag05ODQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk4NSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNOTg2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05ODcgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTk4OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTg5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05 OTAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk5MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTkyIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag05OTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk5NCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNOTk1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05OTYgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTk5NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTk4IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTk5OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMDAwIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTEwMDEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwMiAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xMDAzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMDQgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTAwNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMDA2IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTEwMDcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwOCAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xMDA5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMjc1 LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAxMCAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xMDExIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMTIgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMTAxMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMDE0IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTEwMTUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAxNiAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xMDE3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMTggMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNMTAxOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMDIwIDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTEwMjEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAyMiAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xMDIzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMjQgMCBv YmoNPDwvQSAxMDMxIDAgUi9LWzUgNiA3IDhdL1AgNzEyIDAgUi9TL05vcm1hbC9QZyAxNSAwIFI+ Pg1lbmRvYmoNMTAyNSAwIG9iag08PC9BIDEwMzAgMCBSL0sgOS9QIDcxMiAwIFIvUy9Ob3JtYWwv UGcgMTUgMCBSPj4NZW5kb2JqDTEwMjYgMCBvYmoNPDwvQSAxMDI5IDAgUi9LIDEwL1AgNzEyIDAg Ui9TL05vcm1hbC9QZyAxNSAwIFI+Pg1lbmRvYmoNMTAyNyAwIG9iag08PC9BIDEwMjggMCBSL0sg MTEvUCA3MTIgMCBSL1MvTm9ybWFsL1BnIDE1IDAgUj4+DWVuZG9iag0xMDI4IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xMDI5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMDMwIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xMDMxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMzIgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTEwMzMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMzQgMCBvYmoNPDwv S1sxMDM1IDAgUiAxMDM2IDAgUiAxMDM3IDAgUiAxMDM4IDAgUiAxMDM5IDAgUiAxMDQwIDAgUiAx MDQxIDAgUiAxMDQyIDAgUiAxMDQzIDAgUiAxMDQ0IDAgUiAxMDQ1IDAgUiAxMDQ2IDAgUiAxMDQ3 IDAgUiAxMDQ4IDAgUiAxMDQ5IDAgUiAxMDUwIDAgUiAxMDUxIDAgUiAxMDUyIDAgUiAxMDUzIDAg UiAxMDU0IDAgUiAxMDU1IDAgUiAxMDU2IDAgUiAxMDU3IDAgUiAxMDU4IDAgUiAxMDU5IDAgUl0v UCAyMDMgMCBSL1MvU2VjdD4+DWVuZG9iag0xMDM1IDAgb2JqDTw8L0EgMTQ4MiAwIFIvQy8jRTYj OTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQvSyAwL1AgMTAzNCAwIFIvUy8jRTYjOTcjQTAjRTkjOTcj QjQjRTkjOUEjOTQvUGcgMSAwIFI+Pg1lbmRvYmoNMTAzNiAwIG9iag08PC9BIDE0ODEgMCBSL0sg Mi9QIDEwMzQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEwMzcg MCBvYmoNPDwvS1sxNDczIDAgUiAxNDc0IDAgUiAxNDc1IDAgUiAxNDc2IDAgUl0vUCAxMDM0IDAg Ui9TL1RleHRCb3g+Pg1lbmRvYmoNMTAzOCAwIG9iag08PC9LWzEzODMgMCBSIDEzODQgMCBSIDEz ODUgMCBSIDEzODYgMCBSIDEzODcgMCBSIDEzODggMCBSIDEzODkgMCBSIDEzOTAgMCBSIDEzOTEg MCBSIDEzOTIgMCBSIDEzOTMgMCBSIDEzOTQgMCBSIDEzOTUgMCBSIDEzOTYgMCBSIDEzOTcgMCBS IDEzOTggMCBSIDEzOTkgMCBSIDE0MDAgMCBSIDE0MDEgMCBSIDE0MDIgMCBSIDE0MDMgMCBSIDE0 MDQgMCBSIDE0MDUgMCBSIDE0MDYgMCBSIDE0MDcgMCBSIDE0MDggMCBSIDE0MDkgMCBSIDE0MTAg MCBSIDE0MTEgMCBSIDE0MTIgMCBSIDE0MTMgMCBSIDE0MTQgMCBSIDE0MTUgMCBSIDE0MTYgMCBS IDE0MTcgMCBSIDE0MTggMCBSIDE0MTkgMCBSIDE0MjAgMCBSIDE0MjEgMCBSIDE0MjIgMCBSIDE0 MjMgMCBSIDE0MjQgMCBSIDE0MjUgMCBSIDE0MjYgMCBSIDE0MjcgMCBSXS9QIDEwMzQgMCBSL1Mv VGV4dEJveD4+DWVuZG9iag0xMDM5IDAgb2JqDTw8L0tbMTI4NSAwIFIgMTI4NiAwIFIgMTI4NyAw IFIgMTI4OCAwIFIgMTI4OSAwIFIgMTI5MCAwIFIgMTI5MSAwIFIgMTI5MiAwIFIgMTI5MyAwIFIg MTI5NCAwIFIgMTI5NSAwIFIgMTI5NiAwIFIgMTI5NyAwIFIgMTI5OCAwIFIgMTI5OSAwIFIgMTMw MCAwIFIgMTMwMSAwIFIgMTMwMiAwIFIgMTMwMyAwIFIgMTMwNCAwIFIgMTMwNSAwIFIgMTMwNiAw IFIgMTMwNyAwIFIgMTMwOCAwIFIgMTMwOSAwIFIgMTMxMCAwIFIgMTMxMSAwIFIgMTMxMiAwIFIg MTMxMyAwIFIgMTMxNCAwIFJdL1AgMTAzNCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTEwNDAgMCBv YmoNPDwvSyAxMjgzIDAgUi9QIDEwMzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xMDQxIDAgb2Jq DTw8L0tbMTI3OSAwIFIgMTI4MCAwIFJdL1AgMTAzNCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTEw NDIgMCBvYmoNPDwvSyAxMjc3IDAgUi9QIDEwMzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xMDQz IDAgb2JqDTw8L0sgMTI3NSAwIFIvUCAxMDM0IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTA0NCAw IG9iag08PC9LIDEyNzMgMCBSL1AgMTAzNCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTEwNDUgMCBv YmoNPDwvSyAxMjcxIDAgUi9QIDEwMzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xMDQ2IDAgb2Jq DTw8L0sgMTI2OSAwIFIvUCAxMDM0IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTA0NyAwIG9iag08 PC9LWzExNDAgMCBSIDExNDEgMCBSIDExNDIgMCBSIDExNDMgMCBSIDExNDQgMCBSIDExNDUgMCBS IDExNDYgMCBSIDExNDcgMCBSIDExNDggMCBSIDExNDkgMCBSIDExNTAgMCBSIDExNTEgMCBSIDEx NTIgMCBSIDExNTMgMCBSIDExNTQgMCBSIDExNTUgMCBSIDExNTYgMCBSIDExNTcgMCBSIDExNTgg MCBSIDExNTkgMCBSIDExNjAgMCBSIDExNjEgMCBSIDExNjIgMCBSIDExNjMgMCBSIDExNjQgMCBS IDExNjUgMCBSIDExNjYgMCBSIDExNjcgMCBSIDExNjggMCBSXS9QIDEwMzQgMCBSL1MvVGV4dEJv eD4+DWVuZG9iag0xMDQ4IDAgb2JqDTw8L0sgMTEzOCAwIFIvUCAxMDM0IDAgUi9TL1RleHRCb3g+ Pg1lbmRvYmoNMTA0OSAwIG9iag08PC9LIDExMzYgMCBSL1AgMTAzNCAwIFIvUy9UZXh0Qm94Pj4N ZW5kb2JqDTEwNTAgMCBvYmoNPDwvSyAxMTM0IDAgUi9QIDEwMzQgMCBSL1MvVGV4dEJveD4+DWVu ZG9iag0xMDUxIDAgb2JqDTw8L0sgMTEzMiAwIFIvUCAxMDM0IDAgUi9TL1RleHRCb3g+Pg1lbmRv YmoNMTA1MiAwIG9iag08PC9LIDExMzAgMCBSL1AgMTAzNCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2Jq DTEwNTMgMCBvYmoNPDwvSyAxMTI4IDAgUi9QIDEwMzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0x MDU0IDAgb2JqDTw8L0sgMTEyNCAwIFIvUCAxMDM0IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTA1 NSAwIG9iag08PC9LWzExMTAgMCBSIDExMTEgMCBSIDExMTIgMCBSIDExMTMgMCBSIDExMTQgMCBS IDExMTUgMCBSIDExMTYgMCBSXS9QIDEwMzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xMDU2IDAg b2JqDTw8L0tbMTA2MyAwIFIgMTA2NCAwIFIgMTA2NSAwIFIgMTA2NiAwIFJdL1AgMTAzNCAwIFIv Uy9UZXh0Qm94Pj4NZW5kb2JqDTEwNTcgMCBvYmoNPDwvQSAxMDYyIDAgUi9LIDMvUCAxMDM0IDAg Ui9TL1NoYXBlL1BnIDEgMCBSPj4NZW5kb2JqDTEwNTggMCBvYmoNPDwvQSAxMDYxIDAgUi9LIDQv UCAxMDM0IDAgUi9TL1NoYXBlL1BnIDEgMCBSPj4NZW5kb2JqDTEwNTkgMCBvYmoNPDwvQSAxMDYw IDAgUi9LIDExOC9QIDEwMzQgMCBSL1MvU2hhcGUvUGcgMSAwIFI+Pg1lbmRvYmoNMTA2MCAwIG9i ag08PC9QbGFjZW1lbnQvQmxvY2svTy9MYXlvdXQvRW5kSW5kZW50IDQ2Ni4wL1N0YXJ0SW5kZW50 IC03MS4wL0JCb3hbMTkuMCA3NDcuMCAzOS4wIDc1My4wXT4+DWVuZG9iag0xMDYxIDAgb2JqDTw8 L1BsYWNlbWVudC9CbG9jay9PL0xheW91dC9FbmRJbmRlbnQgLTkwLjAvU3RhcnRJbmRlbnQgLTkw LjAvQkJveFswLjAgNzUwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTEwNjIgMCBvYmoNPDwvUGxh Y2VtZW50L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCAtOTAuMC9TdGFydEluZGVudCAtOTAuMC9C Qm94WzAuMCAwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTEwNjMgMCBvYmoNPDwvQSAxMTA5IDAg Ui9LIDIwNS9QIDEwNTYgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2Jq DTEwNjQgMCBvYmoNPDwvS1sxMDY5IDAgUiAxMDcwIDAgUiAxMDcxIDAgUiAxMDcyIDAgUiAxMDcz IDAgUiAxMDc0IDAgUiAxMDc1IDAgUiAxMDc2IDAgUl0vUCAxMDU2IDAgUi9TL0w+Pg1lbmRvYmoN MTA2NSAwIG9iag08PC9BIDEwNjggMCBSL0sgMjIxL1AgMTA1NiAwIFIvUy9EZWZhdWx0L1BnIDEg MCBSPj4NZW5kb2JqDTEwNjYgMCBvYmoNPDwvQSAxMDY3IDAgUi9LIDIyMi9QIDEwNTYgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEwNjcgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTA2OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTA2OSAwIG9iag08PC9BIDExMDUg MCBSL0tbMTEwNiAwIFIgMTEwNyAwIFJdL1AgMTA2NCAwIFIvUy9MST4+DWVuZG9iag0xMDcwIDAg b2JqDTw8L0EgMTEwMSAwIFIvS1sxMTAyIDAgUiAxMTAzIDAgUl0vUCAxMDY0IDAgUi9TL0xJPj4N ZW5kb2JqDTEwNzEgMCBvYmoNPDwvQSAxMDk3IDAgUi9LWzEwOTggMCBSIDEwOTkgMCBSXS9QIDEw NjQgMCBSL1MvTEk+Pg1lbmRvYmoNMTA3MiAwIG9iag08PC9BIDEwOTMgMCBSL0tbMTA5NCAwIFIg MTA5NSAwIFJdL1AgMTA2NCAwIFIvUy9MST4+DWVuZG9iag0xMDczIDAgb2JqDTw8L0EgMTA4OSAw IFIvS1sxMDkwIDAgUiAxMDkxIDAgUl0vUCAxMDY0IDAgUi9TL0xJPj4NZW5kb2JqDTEwNzQgMCBv YmoNPDwvQSAxMDg1IDAgUi9LWzEwODYgMCBSIDEwODcgMCBSXS9QIDEwNjQgMCBSL1MvTEk+Pg1l bmRvYmoNMTA3NSAwIG9iag08PC9BIDEwODEgMCBSL0tbMTA4MiAwIFIgMTA4MyAwIFJdL1AgMTA2 NCAwIFIvUy9MST4+DWVuZG9iag0xMDc2IDAgb2JqDTw8L0EgMTA3NyAwIFIvS1sxMDc4IDAgUiAx MDc5IDAgUl0vUCAxMDY0IDAgUi9TL0xJPj4NZW5kb2JqDTEwNzcgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4N ZW5kb2JqDTEwNzggMCBvYmoNPDwvSyAyMTkvUCAxMDc2IDAgUi9TL0xibC9QZyAxIDAgUj4+DWVu ZG9iag0xMDc5IDAgb2JqDTw8L0sgMTA4MCAwIFIvUCAxMDc2IDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTEwODAgMCBvYmoNPDwvSyAyMjAvUCAxMDc5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx IDAgUj4+DWVuZG9iag0xMDgxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0x OC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMDgyIDAgb2JqDTw8 L0sgMjE3L1AgMTA3NSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTA4MyAwIG9iag08PC9L IDEwODQgMCBSL1AgMTA3NSAwIFIvUy9MYm9keT4+DWVuZG9iag0xMDg0IDAgb2JqDTw8L0sgMjE4 L1AgMTA4MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTA4NSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTA4NiAwIG9iag08PC9LIDY1L1AgMTA3NCAwIFIvUy9M YmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTA4NyAwIG9iag08PC9LIDEwODggMCBSL1AgMTA3NCAwIFIv Uy9MYm9keT4+DWVuZG9iag0xMDg4IDAgb2JqDTw8L0tbNjYgMjE2XS9QIDEwODcgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEwODkgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4N ZW5kb2JqDTEwOTAgMCBvYmoNPDwvSyAyMTQvUCAxMDczIDAgUi9TL0xibC9QZyAxIDAgUj4+DWVu ZG9iag0xMDkxIDAgb2JqDTw8L0sgMTA5MiAwIFIvUCAxMDczIDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTEwOTIgMCBvYmoNPDwvSyAyMTUvUCAxMDkxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx IDAgUj4+DWVuZG9iag0xMDkzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0x OC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMDk0IDAgb2JqDTw8 L0sgMjEyL1AgMTA3MiAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTA5NSAwIG9iag08PC9L IDEwOTYgMCBSL1AgMTA3MiAwIFIvUy9MYm9keT4+DWVuZG9iag0xMDk2IDAgb2JqDTw8L0sgMjEz L1AgMTA5NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTA5NyAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTA5OCAwIG9iag08PC9LIDIxMC9QIDEwNzEgMCBSL1Mv TGJsL1BnIDEgMCBSPj4NZW5kb2JqDTEwOTkgMCBvYmoNPDwvSyAxMTAwIDAgUi9QIDEwNzEgMCBS L1MvTGJvZHk+Pg1lbmRvYmoNMTEwMCAwIG9iag08PC9LIDIxMS9QIDEwOTkgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTExMDEgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5k b2JqDTExMDIgMCBvYmoNPDwvSyAyMDgvUCAxMDcwIDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9i ag0xMTAzIDAgb2JqDTw8L0sgMTEwNCAwIFIvUCAxMDcwIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTEx MDQgMCBvYmoNPDwvSyAyMDkvUCAxMTAzIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag0xMTA1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMTA2IDAgb2JqDTw8L0sg MjA2L1AgMTA2OSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTEwNyAwIG9iag08PC9LIDEx MDggMCBSL1AgMTA2OSAwIFIvUy9MYm9keT4+DWVuZG9iag0xMTA4IDAgb2JqDTw8L0sgMjA3L1Ag MTEwNyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTEwOSAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xMTEwIDAgb2JqDTw8L0EgMTEyMyAwIFIvSyAxODEvUCAxMDU1 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMTExIDAgb2JqDTw8 L0EgMTEyMiAwIFIvSyAxODIvUCAxMDU1IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoN MTExMiAwIG9iag08PC9BIDExMjEgMCBSL0sgMTgzL1AgMTA1NSAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTExMyAwIG9iag08PC9BIDExMjAgMCBSL0sgMTg0L1Ag MTA1NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTExNCAwIG9i ag08PC9BIDExMTkgMCBSL0sgMTg1L1AgMTA1NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MSAwIFI+Pg1lbmRvYmoNMTExNSAwIG9iag08PC9BIDExMTggMCBSL0sgMTg2L1AgMTA1NSAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTExNiAwIG9iag08PC9BIDEx MTcgMCBSL0tbMTg3IDE4OCAxODkgMTkwIDE5MSAxOTIgMTkzIDE5NCAxOTUgMTk2IDE5NyAxOTgg MTk5IDIwMCAyMDEgMjAyIDIwMyAyMDRdL1AgMTA1NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNMTExNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTExOCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMTExOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTEyMCAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMTEyMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTEyMiAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTEyMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMTI0IDAgb2JqDTw8L0EgMTEy NSAwIFIvS1sxMTI2IDAgUiAxODBdL1AgMTA1NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MSAwIFI+Pg1lbmRvYmoNMTEyNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMTI2IDAgb2JqDTw8 L0EgMTEyNyAwIFIvSyAxNzkvUCAxMTI0IDAgUi9TL0lubGluZVNoYXBlL1BnIDEgMCBSL0FsdCj+ /wBMAE8ARwBPAEEALQBzAG0AYQBsAGwpPj4NZW5kb2JqDTExMjcgMCBvYmoNPDwvUGxhY2VtZW50 L0lubGluZS9PL0xheW91dC9CQm94WzQxMS4wIDc2NS4wIDU2Ny4wIDgwMi4wXT4+DWVuZG9iag0x MTI4IDAgb2JqDTw8L0EgMTEyOSAwIFIvSyAxNzgvUCAxMDUzIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMTI5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTExMzAg MCBvYmoNPDwvQSAxMTMxIDAgUi9LIDE3Ny9QIDEwNTIgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3 L1BnIDEgMCBSPj4NZW5kb2JqDTExMzEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTEzMiAwIG9i ag08PC9BIDExMzMgMCBSL0sgMTc2L1AgMTA1MSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MSAwIFI+Pg1lbmRvYmoNMTEzMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMTM0IDAgb2JqDTw8 L0EgMTEzNSAwIFIvS1sxMyAxNzVdL1AgMTA1MCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MSAwIFI+Pg1lbmRvYmoNMTEzNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMTM2IDAgb2JqDTw8 L0EgMTEzNyAwIFIvSyAxNzQvUCAxMDQ5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag0xMTM3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTExMzggMCBvYmoNPDwvQSAx MTM5IDAgUi9LWzM5IDE3M10vUCAxMDQ4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag0xMTM5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTExNDAgMCBvYmoNPDwvQSAx MjY4IDAgUi9LIDExOS9QIDEwNDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4N ZW5kb2JqDTExNDEgMCBvYmoNPDwvQSAxMjY3IDAgUi9LIDEyMC9QIDEwNDcgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTExNDIgMCBvYmoNPDwvS1sxMjUyIDAgUiAx MjUzIDAgUiAxMjU0IDAgUl0vUCAxMDQ3IDAgUi9TL0w+Pg1lbmRvYmoNMTE0MyAwIG9iag08PC9B IDEyNTEgMCBSL0sgMTI3L1AgMTA0NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+ Pg1lbmRvYmoNMTE0NCAwIG9iag08PC9BIDEyNTAgMCBSL0sgMTI4L1AgMTA0NyAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTE0NSAwIG9iag08PC9BIDEyNDkgMCBS L0sgMTI5L1AgMTA0NyAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTExNDYgMCBvYmoN PDwvQSAxMjQ4IDAgUi9LIDEzMC9QIDEwNDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEg MCBSPj4NZW5kb2JqDTExNDcgMCBvYmoNPDwvQSAxMjQ3IDAgUi9LIDEzMS9QIDEwNDcgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTExNDggMCBvYmoNPDwvS1sxMjMy IDAgUiAxMjMzIDAgUiAxMjM0IDAgUl0vUCAxMDQ3IDAgUi9TL0w+Pg1lbmRvYmoNMTE0OSAwIG9i ag08PC9BIDEyMzEgMCBSL0sgMTM4L1AgMTA0NyAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5k b2JqDTExNTAgMCBvYmoNPDwvQSAxMjMwIDAgUi9LIDEzOS9QIDEwNDcgMCBSL1MvRGVmYXVsdC9Q ZyAxIDAgUj4+DWVuZG9iag0xMTUxIDAgb2JqDTw8L0EgMTIyOSAwIFIvSyAxNDAvUCAxMDQ3IDAg Ui9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNMTE1MiAwIG9iag08PC9BIDEyMjggMCBSL0sg MTQxL1AgMTA0NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTE1 MyAwIG9iag08PC9BIDEyMjcgMCBSL0sgMTQyL1AgMTA0NyAwIFIvUy92ZXJkYWRhL1BnIDEgMCBS Pj4NZW5kb2JqDTExNTQgMCBvYmoNPDwvQSAxMjI2IDAgUi9LIDE0My9QIDEwNDcgMCBSL1MvRGVm YXVsdC9QZyAxIDAgUj4+DWVuZG9iag0xMTU1IDAgb2JqDTw8L0EgMTIyNSAwIFIvSyAxNDQvUCAx MDQ3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMTU2IDAgb2Jq DTw8L0tbMTIwMCAwIFIgMTIwMSAwIFIgMTIwMiAwIFIgMTIwMyAwIFIgMTIwNCAwIFJdL1AgMTA0 NyAwIFIvUy9MPj4NZW5kb2JqDTExNTcgMCBvYmoNPDwvQSAxMTk5IDAgUi9LIDE1NC9QIDEwNDcg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTExNTggMCBvYmoNPDwv QSAxMTk4IDAgUi9LIDE1NS9QIDEwNDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBS Pj4NZW5kb2JqDTExNTkgMCBvYmoNPDwvQSAxMTk3IDAgUi9LIDE1Ni9QIDEwNDcgMCBSL1MvRGVm YXVsdC9QZyAxIDAgUj4+DWVuZG9iag0xMTYwIDAgb2JqDTw8L0EgMTE5NiAwIFIvSyAxNTcvUCAx MDQ3IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNMTE2MSAwIG9iag08PC9BIDExOTUg MCBSL0sgMTU4L1AgMTA0NyAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTExNjIgMCBv YmoNPDwvS1sxMTc1IDAgUiAxMTc2IDAgUiAxMTc3IDAgUiAxMTc4IDAgUl0vUCAxMDQ3IDAgUi9T L0w+Pg1lbmRvYmoNMTE2MyAwIG9iag08PC9BIDExNzQgMCBSL0sgMTY3L1AgMTA0NyAwIFIvUy9E ZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTExNjQgMCBvYmoNPDwvQSAxMTczIDAgUi9LIDE2OC9Q IDEwNDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTExNjUgMCBv YmoNPDwvQSAxMTcyIDAgUi9LIDE2OS9QIDEwNDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDEgMCBSPj4NZW5kb2JqDTExNjYgMCBvYmoNPDwvQSAxMTcxIDAgUi9LIDE3MC9QIDEwNDcgMCBS L1MvdmVyZGFkYS9QZyAxIDAgUj4+DWVuZG9iag0xMTY3IDAgb2JqDTw8L0EgMTE3MCAwIFIvSyAx NzEvUCAxMDQ3IDAgUi9TL3ZlcmRhZGEvUGcgMSAwIFI+Pg1lbmRvYmoNMTE2OCAwIG9iag08PC9B IDExNjkgMCBSL0sgMTcyL1AgMTA0NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+ Pg1lbmRvYmoNMTE2OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMTcwIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTExNzEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTE3MiAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTE3MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTE3NCAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTE3NSAwIG9iag08PC9BIDExOTEgMCBSL0tbMTE5MiAwIFIgMTE5MyAwIFJdL1AgMTE2 MiAwIFIvUy9MST4+DWVuZG9iag0xMTc2IDAgb2JqDTw8L0EgMTE4NyAwIFIvS1sxMTg4IDAgUiAx MTg5IDAgUl0vUCAxMTYyIDAgUi9TL0xJPj4NZW5kb2JqDTExNzcgMCBvYmoNPDwvQSAxMTgzIDAg Ui9LWzExODQgMCBSIDExODUgMCBSXS9QIDExNjIgMCBSL1MvTEk+Pg1lbmRvYmoNMTE3OCAwIG9i ag08PC9BIDExNzkgMCBSL0tbMTE4MCAwIFIgMTE4MSAwIFJdL1AgMTE2MiAwIFIvUy9MST4+DWVu ZG9iag0xMTc5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMTgwIDAgb2JqDTw8L0sgMTY1L1Ag MTE3OCAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTE4MSAwIG9iag08PC9LIDExODIgMCBS L1AgMTE3OCAwIFIvUy9MYm9keT4+DWVuZG9iag0xMTgyIDAgb2JqDTw8L0sgMTY2L1AgMTE4MSAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTE4MyAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDM2LjA+Pg1lbmRvYmoNMTE4NCAwIG9iag08PC9LIDE2My9QIDExNzcgMCBSL1MvTGJsL1BnIDEg MCBSPj4NZW5kb2JqDTExODUgMCBvYmoNPDwvSyAxMTg2IDAgUi9QIDExNzcgMCBSL1MvTGJvZHk+ Pg1lbmRvYmoNMTE4NiAwIG9iag08PC9LIDE2NC9QIDExODUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTExODcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTExODgg MCBvYmoNPDwvSyAxNjEvUCAxMTc2IDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0xMTg5IDAg b2JqDTw8L0sgMTE5MCAwIFIvUCAxMTc2IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTExOTAgMCBvYmoN PDwvSyAxNjIvUCAxMTg5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9i ag0xMTkxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMTkyIDAgb2JqDTw8L0sgMTU5L1AgMTE3 NSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTE5MyAwIG9iag08PC9LIDExOTQgMCBSL1Ag MTE3NSAwIFIvUy9MYm9keT4+DWVuZG9iag0xMTk0IDAgb2JqDTw8L0sgMTYwL1AgMTE5MyAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTE5NSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTE5NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTE5NyAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTE5OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTE5OSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNMTIwMCAwIG9iag08PC9BIDEyMjEgMCBSL0tbMTIyMiAwIFIgMTIyMyAwIFJdL1AgMTE1NiAw IFIvUy9MST4+DWVuZG9iag0xMjAxIDAgb2JqDTw8L0EgMTIxNyAwIFIvS1sxMjE4IDAgUiAxMjE5 IDAgUl0vUCAxMTU2IDAgUi9TL0xJPj4NZW5kb2JqDTEyMDIgMCBvYmoNPDwvQSAxMjEzIDAgUi9L WzEyMTQgMCBSIDEyMTUgMCBSXS9QIDExNTYgMCBSL1MvTEk+Pg1lbmRvYmoNMTIwMyAwIG9iag08 PC9BIDEyMDkgMCBSL0tbMTIxMCAwIFIgMTIxMSAwIFJdL1AgMTE1NiAwIFIvUy9MST4+DWVuZG9i ag0xMjA0IDAgb2JqDTw8L0EgMTIwNSAwIFIvS1sxMjA2IDAgUiAxMjA3IDAgUl0vUCAxMTU2IDAg Ui9TL0xJPj4NZW5kb2JqDTEyMDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg LTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTEyMDYgMCBvYmoN PDwvSyAxNTIvUCAxMjA0IDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0xMjA3IDAgb2JqDTw8 L0sgMTIwOCAwIFIvUCAxMjA0IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTEyMDggMCBvYmoNPDwvSyAx NTMvUCAxMjA3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMjA5 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMjEwIDAgb2JqDTw8L0sgMTUwL1AgMTIwMyAwIFIv Uy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTIxMSAwIG9iag08PC9LIDEyMTIgMCBSL1AgMTIwMyAw IFIvUy9MYm9keT4+DWVuZG9iag0xMjEyIDAgb2JqDTw8L0sgMTUxL1AgMTIxMSAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTIxMyAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1l bmRvYmoNMTIxNCAwIG9iag08PC9LIDE0OC9QIDEyMDIgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5k b2JqDTEyMTUgMCBvYmoNPDwvSyAxMjE2IDAgUi9QIDEyMDIgMCBSL1MvTGJvZHk+Pg1lbmRvYmoN MTIxNiAwIG9iag08PC9LIDE0OS9QIDEyMTUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEg MCBSPj4NZW5kb2JqDTEyMTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4 LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTEyMTggMCBvYmoNPDwv SyAxNDYvUCAxMjAxIDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0xMjE5IDAgb2JqDTw8L0sg MTIyMCAwIFIvUCAxMjAxIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTEyMjAgMCBvYmoNPDwvSyAxNDcv UCAxMjE5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMjIxIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMjIyIDAgb2JqDTw8L0sgNDIvUCAxMjAwIDAgUi9TL0xi bC9QZyAxIDAgUj4+DWVuZG9iag0xMjIzIDAgb2JqDTw8L0sgMTIyNCAwIFIvUCAxMjAwIDAgUi9T L0xib2R5Pj4NZW5kb2JqDTEyMjQgMCBvYmoNPDwvS1s0MyAxNDVdL1AgMTIyMyAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTIyNSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNMTIyNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTIyNyAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0xMjI4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMjI5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0x MjMwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMjMxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMjMy IDAgb2JqDTw8L0EgMTI0MyAwIFIvS1sxMjQ0IDAgUiAxMjQ1IDAgUl0vUCAxMTQ4IDAgUi9TL0xJ Pj4NZW5kb2JqDTEyMzMgMCBvYmoNPDwvQSAxMjM5IDAgUi9LWzEyNDAgMCBSIDEyNDEgMCBSXS9Q IDExNDggMCBSL1MvTEk+Pg1lbmRvYmoNMTIzNCAwIG9iag08PC9BIDEyMzUgMCBSL0tbMTIzNiAw IFIgMTIzNyAwIFJdL1AgMTE0OCAwIFIvUy9MST4+DWVuZG9iag0xMjM1IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYu MD4+DWVuZG9iag0xMjM2IDAgb2JqDTw8L0sgMTM2L1AgMTIzNCAwIFIvUy9MYmwvUGcgMSAwIFI+ Pg1lbmRvYmoNMTIzNyAwIG9iag08PC9LIDEyMzggMCBSL1AgMTIzNCAwIFIvUy9MYm9keT4+DWVu ZG9iag0xMjM4IDAgb2JqDTw8L0sgMTM3L1AgMTIzNyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNMTIzOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTI0MCAwIG9i ag08PC9LIDEzNC9QIDEyMzMgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2JqDTEyNDEgMCBvYmoN PDwvSyAxMjQyIDAgUi9QIDEyMzMgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTI0MiAwIG9iag08PC9L IDEzNS9QIDEyNDEgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEy NDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTEyNDQgMCBvYmoNPDwvSyAxMzIvUCAxMjMyIDAg Ui9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0xMjQ1IDAgb2JqDTw8L0sgMTI0NiAwIFIvUCAxMjMy IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTEyNDYgMCBvYmoNPDwvSyAxMzMvUCAxMjQ1IDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMjQ3IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTEyNDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTI0OSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTI1MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTI1MSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNMTI1MiAwIG9iag08PC9BIDEyNjMgMCBSL0tbMTI2NCAwIFIgMTI2NSAwIFJdL1AgMTE0MiAw IFIvUy9MST4+DWVuZG9iag0xMjUzIDAgb2JqDTw8L0EgMTI1OSAwIFIvS1sxMjYwIDAgUiAxMjYx IDAgUl0vUCAxMTQyIDAgUi9TL0xJPj4NZW5kb2JqDTEyNTQgMCBvYmoNPDwvQSAxMjU1IDAgUi9L WzEyNTYgMCBSIDEyNTcgMCBSXS9QIDExNDIgMCBSL1MvTEk+Pg1lbmRvYmoNMTI1NSAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDM2LjA+Pg1lbmRvYmoNMTI1NiAwIG9iag08PC9LIDEyNS9QIDEyNTQgMCBSL1MvTGJsL1Bn IDEgMCBSPj4NZW5kb2JqDTEyNTcgMCBvYmoNPDwvSyAxMjU4IDAgUi9QIDEyNTQgMCBSL1MvTGJv ZHk+Pg1lbmRvYmoNMTI1OCAwIG9iag08PC9LIDEyNi9QIDEyNTcgMCBSL1MvI0U2I0FEI0EzI0U2 Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEyNTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTEy NjAgMCBvYmoNPDwvSyAxMjMvUCAxMjUzIDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0xMjYx IDAgb2JqDTw8L0sgMTI2MiAwIFIvUCAxMjUzIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTEyNjIgMCBv YmoNPDwvSyAxMjQvUCAxMjYxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVu ZG9iag0xMjYzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMjY0IDAgb2JqDTw8L0sgMTIxL1Ag MTI1MiAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTI2NSAwIG9iag08PC9LIDEyNjYgMCBS L1AgMTI1MiAwIFIvUy9MYm9keT4+DWVuZG9iag0xMjY2IDAgb2JqDTw8L0sgMTIyL1AgMTI2NSAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTI2NyAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xMjY4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMjY5IDAgb2JqDTw8L0Eg MTI3MCAwIFIvSyAxMTcvUCAxMDQ2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag0xMjcwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEyNzEgMCBvYmoNPDwvQSAxMjcy IDAgUi9LIDExNi9QIDEwNDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5k b2JqDTEyNzIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEyNzMgMCBvYmoNPDwvQSAxMjc0IDAgUi9L WzM2IDExNV0vUCAxMDQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9i ag0xMjc0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEyNzUgMCBvYmoNPDwvQSAxMjc2IDAgUi9L WzI4IDExMyAxMTRdL1AgMTA0MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1l bmRvYmoNMTI3NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMjc3IDAgb2JqDTw8L0EgMTI3OCAw IFIvS1sxIDExMl0vUCAxMDQyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVu ZG9iag0xMjc4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEyNzkgMCBvYmoNPDwvQSAxMjgyIDAg Ui9LIDExMC9QIDEwNDEgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2Jq DTEyODAgMCBvYmoNPDwvQSAxMjgxIDAgUi9LIDExMS9QIDEwNDEgMCBSL1MvI0U2I0FEI0EzI0U2 Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEyODEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTI4 MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTI4MyAwIG9iag08PC9BIDEyODQgMCBSL0sgMTYvUCAx MDQwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMjg0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTEyODUgMCBvYmoNPDwvQSAxMzgyIDAgUi9LIDcyL1AgMTAzOSAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTI4NiAwIG9iag08PC9B IDEzODEgMCBSL0sgMTgvUCAxMDM5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag0xMjg3IDAgb2JqDTw8L0EgMTM4MCAwIFIvSyA3My9QIDEwMzkgMCBSL1MvRGVmYXVs dC9QZyAxIDAgUj4+DWVuZG9iag0xMjg4IDAgb2JqDTw8L0EgMTM3OSAwIFIvSyA3NC9QIDEwMzkg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEyODkgMCBvYmoNPDwv QSAxMzc4IDAgUi9LIDc1L1AgMTAzOSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+ Pg1lbmRvYmoNMTI5MCAwIG9iag08PC9BIDEzNzcgMCBSL0sgNzYvUCAxMDM5IDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMjkxIDAgb2JqDTw8L0EgMTM3NiAwIFIv SyA3Ny9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEy OTIgMCBvYmoNPDwvQSAxMzc1IDAgUi9LIDc4L1AgMTAzOSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTI5MyAwIG9iag08PC9LWzEzNjAgMCBSIDEzNjEgMCBSIDEz NjIgMCBSXS9QIDEwMzkgMCBSL1MvTD4+DWVuZG9iag0xMjk0IDAgb2JqDTw8L0EgMTM1OSAwIFIv SyA4NS9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEy OTUgMCBvYmoNPDwvQSAxMzU4IDAgUi9LIDg2L1AgMTAzOSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTI5NiAwIG9iag08PC9BIDEzNTcgMCBSL0sgMzgvUCAxMDM5 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMjk3IDAgb2JqDTw8 L0EgMTM1NiAwIFIvSyA4Ny9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBS Pj4NZW5kb2JqDTEyOTggMCBvYmoNPDwvQSAxMzU1IDAgUi9LIDQxL1AgMTAzOSAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTI5OSAwIG9iag08PC9BIDEzNTQgMCBS L0sgODgvUCAxMDM5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0x MzAwIDAgb2JqDTw8L0EgMTM1MyAwIFIvSyA4OS9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzMDEgMCBvYmoNPDwvS1sxMzI4IDAgUiAxMzI5IDAgUiAx MzMwIDAgUiAxMzMxIDAgUiAxMzMyIDAgUl0vUCAxMDM5IDAgUi9TL0w+Pg1lbmRvYmoNMTMwMiAw IG9iag08PC9BIDEzMjcgMCBSL0sgNTUvUCAxMDM5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxIDAgUj4+DWVuZG9iag0xMzAzIDAgb2JqDTw8L0EgMTMyNiAwIFIvSyA5OC9QIDEwMzkgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzMDQgMCBvYmoNPDwvQSAx MzI1IDAgUi9LIDk5L1AgMTAzOSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1l bmRvYmoNMTMwNSAwIG9iag08PC9BIDEzMjQgMCBSL0sgMTAwL1AgMTAzOSAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTMwNiAwIG9iag08PC9BIDEzMjMgMCBSL0sg MTAxL1AgMTAzOSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTMw NyAwIG9iag08PC9BIDEzMjIgMCBSL0sgMTAyL1AgMTAzOSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTMwOCAwIG9iag08PC9BIDEzMjEgMCBSL0sgMTAzL1AgMTAz OSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTMwOSAwIG9iag08 PC9BIDEzMjAgMCBSL0sgMTA0L1AgMTAzOSAwIFIvUy92ZXJkYWRhL1BnIDEgMCBSPj4NZW5kb2Jq DTEzMTAgMCBvYmoNPDwvQSAxMzE5IDAgUi9LIDEwNS9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2 Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzMTEgMCBvYmoNPDwvQSAxMzE4IDAgUi9LIDEwNi9Q IDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzMTIgMCBv YmoNPDwvQSAxMzE3IDAgUi9LIDEwNy9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDEgMCBSPj4NZW5kb2JqDTEzMTMgMCBvYmoNPDwvQSAxMzE2IDAgUi9LIDEwOC9QIDEwMzkgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzMTQgMCBvYmoNPDwvQSAx MzE1IDAgUi9LIDEwOS9QIDEwMzkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4N ZW5kb2JqDTEzMTUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEzMTYgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTEzMTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEzMTggMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTEzMTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEzMjAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MTMyMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTMyMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTMy MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTMyNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTMyNSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTMyNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTMyNyAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNMTMyOCAwIG9iag08PC9BIDEzNDkgMCBSL0tbMTM1MCAwIFIgMTM1 MSAwIFJdL1AgMTMwMSAwIFIvUy9MST4+DWVuZG9iag0xMzI5IDAgb2JqDTw8L0EgMTM0NSAwIFIv S1sxMzQ2IDAgUiAxMzQ3IDAgUl0vUCAxMzAxIDAgUi9TL0xJPj4NZW5kb2JqDTEzMzAgMCBvYmoN PDwvQSAxMzQxIDAgUi9LWzEzNDIgMCBSIDEzNDMgMCBSXS9QIDEzMDEgMCBSL1MvTEk+Pg1lbmRv YmoNMTMzMSAwIG9iag08PC9BIDEzMzcgMCBSL0tbMTMzOCAwIFIgMTMzOSAwIFJdL1AgMTMwMSAw IFIvUy9MST4+DWVuZG9iag0xMzMyIDAgb2JqDTw8L0EgMTMzMyAwIFIvS1sxMzM0IDAgUiAxMzM1 IDAgUl0vUCAxMzAxIDAgUi9TL0xJPj4NZW5kb2JqDTEzMzMgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5k b2JqDTEzMzQgMCBvYmoNPDwvSyA1Mi9QIDEzMzIgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2Jq DTEzMzUgMCBvYmoNPDwvSyAxMzM2IDAgUi9QIDEzMzIgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTMz NiAwIG9iag08PC9LIDUzL1AgMTMzNSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+ Pg1lbmRvYmoNMTMzNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTMzOCAwIG9iag08PC9LIDk2 L1AgMTMzMSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTMzOSAwIG9iag08PC9LIDEzNDAg MCBSL1AgMTMzMSAwIFIvUy9MYm9keT4+DWVuZG9iag0xMzQwIDAgb2JqDTw8L0sgOTcvUCAxMzM5 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMzQxIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMzYuMD4+DWVuZG9iag0xMzQyIDAgb2JqDTw8L0sgOTQvUCAxMzMwIDAgUi9TL0xibC9QZyAx IDAgUj4+DWVuZG9iag0xMzQzIDAgb2JqDTw8L0sgMTM0NCAwIFIvUCAxMzMwIDAgUi9TL0xib2R5 Pj4NZW5kb2JqDTEzNDQgMCBvYmoNPDwvSyA5NS9QIDEzNDMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzNDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTEzNDYg MCBvYmoNPDwvSyA5Mi9QIDEzMjkgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2JqDTEzNDcgMCBv YmoNPDwvSyAxMzQ4IDAgUi9QIDEzMjkgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTM0OCAwIG9iag08 PC9LIDkzL1AgMTM0NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoN MTM0OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTM1MCAwIG9iag08PC9LIDkwL1AgMTMyOCAw IFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTM1MSAwIG9iag08PC9LIDEzNTIgMCBSL1AgMTMy OCAwIFIvUy9MYm9keT4+DWVuZG9iag0xMzUyIDAgb2JqDTw8L0sgOTEvUCAxMzUxIDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMzUzIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0xMzU0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMzU1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgLTUyLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCA1Mi4wPj4N ZW5kb2JqDTEzNTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEzNTcgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTEzNTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEzNTkgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTEzNjAgMCBvYmoNPDwvQSAxMzcxIDAgUi9LWzEzNzIgMCBSIDEzNzMgMCBSXS9QIDEyOTMgMCBS L1MvTEk+Pg1lbmRvYmoNMTM2MSAwIG9iag08PC9BIDEzNjcgMCBSL0tbMTM2OCAwIFIgMTM2OSAw IFJdL1AgMTI5MyAwIFIvUy9MST4+DWVuZG9iag0xMzYyIDAgb2JqDTw8L0EgMTM2MyAwIFIvS1sx MzY0IDAgUiAxMzY1IDAgUl0vUCAxMjkzIDAgUi9TL0xJPj4NZW5kb2JqDTEzNjMgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAzNi4wPj4NZW5kb2JqDTEzNjQgMCBvYmoNPDwvSyA4My9QIDEzNjIgMCBSL1MvTGJsL1BnIDEg MCBSPj4NZW5kb2JqDTEzNjUgMCBvYmoNPDwvSyAxMzY2IDAgUi9QIDEzNjIgMCBSL1MvTGJvZHk+ Pg1lbmRvYmoNMTM2NiAwIG9iag08PC9LIDg0L1AgMTM2NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTM2NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTM2OCAw IG9iag08PC9LIDgxL1AgMTM2MSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMTM2OSAwIG9i ag08PC9LIDEzNzAgMCBSL1AgMTM2MSAwIFIvUy9MYm9keT4+DWVuZG9iag0xMzcwIDAgb2JqDTw8 L0sgODIvUCAxMzY5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0x MzcxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xMzcyIDAgb2JqDTw8L0sgNzkvUCAxMzYwIDAg Ui9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0xMzczIDAgb2JqDTw8L0sgMTM3NCAwIFIvUCAxMzYw IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTEzNzQgMCBvYmoNPDwvSyA4MC9QIDEzNzMgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzNzUgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTEzNzYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTM3NyAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNMTM3OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTM3OSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MTM4MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTM4MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0x MzgyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMzgzIDAgb2JqDTw8L0EgMTQ3MiAwIFIvSyAxMi9Q IDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzODQgMCBv YmoNPDwvQSAxNDcxIDAgUi9LIDE0L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MSAwIFI+Pg1lbmRvYmoNMTM4NSAwIG9iag08PC9BIDE0NzAgMCBSL0sgMTUvUCAxMDM4IDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMzg2IDAgb2JqDTw8L0EgMTQ2 OSAwIFIvSyAxNy9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5k b2JqDTEzODcgMCBvYmoNPDwvQSAxNDY4IDAgUi9LIDE5L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTM4OCAwIG9iag08PC9BIDE0NjcgMCBSL0sgMjAv UCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMzg5IDAg b2JqDTw8L0EgMTQ2NiAwIFIvSyAyMS9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDEgMCBSPj4NZW5kb2JqDTEzOTAgMCBvYmoNPDwvQSAxNDY1IDAgUi9LIDIyL1AgMTAzOCAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTM5MSAwIG9iag08PC9BIDE0 NjQgMCBSL0sgMjMvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVu ZG9iag0xMzkyIDAgb2JqDTw8L0EgMTQ2MyAwIFIvSyAyNC9QIDEwMzggMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzOTMgMCBvYmoNPDwvQSAxNDYyIDAgUi9LIDI1 L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTM5NCAw IG9iag08PC9BIDE0NjEgMCBSL0sgMjYvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxIDAgUj4+DWVuZG9iag0xMzk1IDAgb2JqDTw8L0EgMTQ2MCAwIFIvSyAyNy9QIDEwMzggMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzOTYgMCBvYmoNPDwvQSAx NDU5IDAgUi9LIDI5L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1l bmRvYmoNMTM5NyAwIG9iag08PC9BIDE0NTggMCBSL0sgMzAvUCAxMDM4IDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xMzk4IDAgb2JqDTw8L0EgMTQ1NyAwIFIvSyAz MS9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTEzOTkg MCBvYmoNPDwvQSAxNDU2IDAgUi9LIDMyL1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNMTQwMCAwIG9iag08PC9BIDE0NTUgMCBSL0sgMzMvUCAxMDM4IDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDAxIDAgb2JqDTw8L0Eg MTQ1NCAwIFIvSyAzNC9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4N ZW5kb2JqDTE0MDIgMCBvYmoNPDwvQSAxNDUzIDAgUi9LIDM1L1AgMTAzOCAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQwMyAwIG9iag08PC9BIDE0NTIgMCBSL0sg MzcvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDA0 IDAgb2JqDTw8L0EgMTQ1MSAwIFIvSyA0MC9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3 L1BnIDEgMCBSPj4NZW5kb2JqDTE0MDUgMCBvYmoNPDwvQSAxNDUwIDAgUi9LIDQ0L1AgMTAzOCAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQwNiAwIG9iag08PC9B IDE0NDkgMCBSL0sgNDUvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag0xNDA3IDAgb2JqDTw8L0EgMTQ0OCAwIFIvSyA0Ni9QIDEwMzggMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0MDggMCBvYmoNPDwvQSAxNDQ3IDAgUi9L IDQ3L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQw OSAwIG9iag08PC9BIDE0NDYgMCBSL0sgNDgvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDEwIDAgb2JqDTw8L0EgMTQ0NSAwIFIvSyA0OS9QIDEwMzgg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0MTEgMCBvYmoNPDwv QSAxNDQ0IDAgUi9LIDUwL1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+ Pg1lbmRvYmoNMTQxMiAwIG9iag08PC9BIDE0NDMgMCBSL0sgNTEvUCAxMDM4IDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDEzIDAgb2JqDTw8L0EgMTQ0MiAwIFIv SyA1NC9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0 MTQgMCBvYmoNPDwvQSAxNDQxIDAgUi9LIDU2L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQxNSAwIG9iag08PC9BIDE0NDAgMCBSL0sgNTcvUCAxMDM4 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDE2IDAgb2JqDTw8 L0EgMTQzOSAwIFIvSyA1OC9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBS Pj4NZW5kb2JqDTE0MTcgMCBvYmoNPDwvQSAxNDM4IDAgUi9LIDU5L1AgMTAzOCAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQxOCAwIG9iag08PC9BIDE0MzcgMCBS L0sgNjAvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0x NDE5IDAgb2JqDTw8L0EgMTQzNiAwIFIvSyA2MS9QIDEwMzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0MjAgMCBvYmoNPDwvQSAxNDM1IDAgUi9LIDYyL1AgMTAz OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQyMSAwIG9iag08 PC9BIDE0MzQgMCBSL0sgNjMvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag0xNDIyIDAgb2JqDTw8L0EgMTQzMyAwIFIvSyA2NC9QIDEwMzggMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0MjMgMCBvYmoNPDwvQSAxNDMyIDAg Ui9LIDY3L1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoN MTQyNCAwIG9iag08PC9BIDE0MzEgMCBSL0sgNjgvUCAxMDM4IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDI1IDAgb2JqDTw8L0EgMTQzMCAwIFIvSyA2OS9QIDEw MzggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0MjYgMCBvYmoN PDwvQSAxNDI5IDAgUi9LIDcwL1AgMTAzOCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAw IFI+Pg1lbmRvYmoNMTQyNyAwIG9iag08PC9BIDE0MjggMCBSL0sgNzEvUCAxMDM4IDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDI4IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0xNDI5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDMwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0xNDMxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDMyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0x NDMzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDM0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDM1 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDM2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDM3IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xNDM4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDM5IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xNDQwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDQxIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xNDQyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDQzIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xNDQ0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDQ1IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xNDQ2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0NDcgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTQ0OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDQ5IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTE0NTAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTQ1MSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xNDUyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0NTMgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMTQ1NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDU1IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTE0NTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTQ1NyAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xNDU4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg Mjc1LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTQ1OSAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xNDYwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0NjEgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNMTQ2MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDYzIDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTE0NjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTQ2NSAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xNDY2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0NjcgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTQ2OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDY5IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0NzAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTQ3MSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDcyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0NzMg MCBvYmoNPDwvQSAxNDgwIDAgUi9LWzUgNiA3IDhdL1AgMTAzNyAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMTQ3NCAwIG9iag08PC9BIDE0NzkgMCBSL0sgOS9QIDEw MzcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTE0NzUgMCBvYmoN PDwvQSAxNDc4IDAgUi9LIDEwL1AgMTAzNyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAw IFI+Pg1lbmRvYmoNMTQ3NiAwIG9iag08PC9BIDE0NzcgMCBSL0sgMTEvUCAxMDM3IDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0xNDc3IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xNDc4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNDc5IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xNDgwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0ODEgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTE0ODIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE0ODMgMCBvYmoNPDwvS1sxNDg0 IDAgUiAxNDg1IDAgUiAxNDg2IDAgUiAxNDg3IDAgUiAxNDg4IDAgUiAxNDg5IDAgUiAxNDkwIDAg UiAxNDkxIDAgUiAxNDkyIDAgUiAxNDkzIDAgUiAxNDk0IDAgUiAxNDk1IDAgUiAxNDk2IDAgUiAx NDk3IDAgUiAxNDk4IDAgUiAxNDk5IDAgUiAxNTAwIDAgUiAxNTAxIDAgUiAxNTAyIDAgUiAxNTAz IDAgUl0vUCAyMDIgMCBSL1MvU2VjdD4+DWVuZG9iag0xNDg0IDAgb2JqDTw8L0EgMTYzMyAwIFIv Qy9Ob3JtYWwvSyAwL1AgMTQ4MyAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTQ4 NSAwIG9iag08PC9BIDE2MzIgMCBSL0sgMS9QIDE0ODMgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBS Pj4NZW5kb2JqDTE0ODYgMCBvYmoNPDwvQSAxNjMxIDAgUi9LIDIvUCAxNDgzIDAgUi9TL05vcm1h bC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNDg3IDAgb2JqDTw8L0EgMTYzMCAwIFIvSyAzL1AgMTQ4 MyAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTQ4OCAwIG9iag08PC9BIDE2Mjkg MCBSL0sgNC9QIDE0ODMgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE0ODkgMCBv YmoNPDwvQSAxNjI4IDAgUi9LIDUvUCAxNDgzIDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVu ZG9iag0xNDkwIDAgb2JqDTw8L0EgMTYyNyAwIFIvSyA2L1AgMTQ4MyAwIFIvUy9Ob3JtYWwvUGcg MjA0OSAwIFI+Pg1lbmRvYmoNMTQ5MSAwIG9iag08PC9BIDE2MjYgMCBSL0sgNy9QIDE0ODMgMCBS L1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE0OTIgMCBvYmoNPDwvQSAxNjI1IDAgUi9L IDgvUCAxNDgzIDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNDkzIDAgb2JqDTw8 L0EgMTYyNCAwIFIvSyA5L1AgMTQ4MyAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoN MTQ5NCAwIG9iag08PC9LWzE2MTAgMCBSIDE2MTEgMCBSIDE2MTIgMCBSIDE2MTMgMCBSIDE2MTQg MCBSIDE2MTUgMCBSIDE2MTYgMCBSXS9QIDE0ODMgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xNDk1 IDAgb2JqDTw8L0tbMTU5NiAwIFIgMTU5NyAwIFIgMTU5OCAwIFIgMTU5OSAwIFJdL1AgMTQ4MyAw IFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTE0OTYgMCBvYmoNPDwvS1sxNTM4IDAgUiAxNTM5IDAgUl0v UCAxNDgzIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTQ5NyAwIG9iag08PC9LWzE1MzQgMCBSIDE1 MzUgMCBSXS9QIDE0ODMgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xNDk4IDAgb2JqDTw8L0tbMTUz MCAwIFIgMTUzMSAwIFJdL1AgMTQ4MyAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTE0OTkgMCBvYmoN PDwvS1sxNTI2IDAgUiAxNTI3IDAgUl0vUCAxNDgzIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTUw MCAwIG9iag08PC9LWzE1MTYgMCBSIDE1MTcgMCBSIDE1MTggMCBSIDE1MTkgMCBSIDE1MjAgMCBS XS9QIDE0ODMgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xNTAxIDAgb2JqDTw8L0tbMTUxMCAwIFIg MTUxMSAwIFIgMTUxMiAwIFJdL1AgMTQ4MyAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTE1MDIgMCBv YmoNPDwvSyAxNTA2IDAgUi9QIDE0ODMgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xNTAzIDAgb2Jq DTw8L0sgMTUwNCAwIFIvUCAxNDgzIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTUwNCAwIG9iag08 PC9BIDE1MDUgMCBSL0sgNjEvUCAxNTAzIDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9i ag0xNTA1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE1MDYgMCBvYmoNPDwvQSAxNTA3IDAgUi9L IDE1MDggMCBSL1AgMTUwMiAwIFIvUy9Ob3JtYWw+Pg1lbmRvYmoNMTUwNyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xNTA4IDAgb2JqDTw8L0EgMTUwOSAwIFIvSyA2MC9QIDE1MDYgMCBSL1MvSW5s aW5lU2hhcGUvUGcgMjA0OSAwIFIvQWx0KP7/AEMAOgBcXABXAGgAaQB0AG4AZQB5AFxcAE0AYQBy AHQAaQBuAEwAaQBuAGsAaQBuAGcAQgB1AHMAaQBuAGUAcwBzAEMAbwBuAHMAdQBsAHQAaQBuAGcA XFwAQwBvAHIAcABvAHIAYQB0AGUARgBpAGwAZQBzAFxcAEQAbwBjAHUAbQBlAG4AdABzAFxcAEwA bwBnAG8AXFwATABPAEcATwBBAC0AcwBtAGEAbABsAC4AagBwAGcpPj4NZW5kb2JqDTE1MDkgMCBv YmoNPDwvUGxhY2VtZW50L0lubGluZS9PL0xheW91dC9CQm94WzQ0MC4wIDYxOC4wIDU4NS4wIDY0 OC4wXT4+DWVuZG9iag0xNTEwIDAgb2JqDTw8L0EgMTUxNSAwIFIvSyA1Ny9QIDE1MDEgMCBSL1Mv Tm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1MTEgMCBvYmoNPDwvQSAxNTE0IDAgUi9LIDU4 L1AgMTUwMSAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTUxMiAwIG9iag08PC9B IDE1MTMgMCBSL0sgNTkvUCAxNTAxIDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0x NTEzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE1MTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MTUxNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNTE2IDAgb2JqDTw8L0EgMTUyNSAwIFIvSyA1 Mi9QIDE1MDAgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1MTcgMCBvYmoNPDwv QSAxNTI0IDAgUi9LIDUzL1AgMTUwMCAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoN MTUxOCAwIG9iag08PC9BIDE1MjMgMCBSL0sgNTQvUCAxNTAwIDAgUi9TL05vcm1hbC9QZyAyMDQ5 IDAgUj4+DWVuZG9iag0xNTE5IDAgb2JqDTw8L0EgMTUyMiAwIFIvSyA1NS9QIDE1MDAgMCBSL1Mv Tm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1MjAgMCBvYmoNPDwvQSAxNTIxIDAgUi9LIDU2 L1AgMTUwMCAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTUyMSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMTUyMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTUyMyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTUyNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTUyNSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTUyNiAwIG9iag08PC9BIDE1MjkgMCBSL0sgNTAvUCAxNDk5IDAgUi9TL05vcm1hbC9Q ZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTI3IDAgb2JqDTw8L0EgMTUyOCAwIFIvSyA1MS9QIDE0OTkg MCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1MjggMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTUyOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNTMwIDAgb2JqDTw8L0EgMTUzMyAw IFIvSyA0OC9QIDE0OTggMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1MzEgMCBv YmoNPDwvQSAxNTMyIDAgUi9LIDQ5L1AgMTQ5OCAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1l bmRvYmoNMTUzMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNTMzIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0xNTM0IDAgb2JqDTw8L0EgMTUzNyAwIFIvSyA0Ni9QIDE0OTcgMCBSL1MvRGVmYXVsdC9Q ZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTM1IDAgb2JqDTw8L0EgMTUzNiAwIFIvSyA0Ny9QIDE0OTcg MCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1MzYgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTUzNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTUzOCAwIG9iag08PC9BIDE1OTUgMCBS L0sgMjMvUCAxNDk2IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTM5IDAgb2Jq DTw8L0tbMTU0MCAwIFIgMTU0MSAwIFIgMTU0MiAwIFIgMTU0MyAwIFIgMTU0NCAwIFIgMTU0NSAw IFIgMTU0NiAwIFIgMTU0NyAwIFIgMTU0OCAwIFIgMTU0OSAwIFIgMTU1MCAwIFJdL1AgMTQ5NiAw IFIvUy9MPj4NZW5kb2JqDTE1NDAgMCBvYmoNPDwvQSAxNTkxIDAgUi9LWzE1OTIgMCBSIDE1OTMg MCBSXS9QIDE1MzkgMCBSL1MvTEk+Pg1lbmRvYmoNMTU0MSAwIG9iag08PC9BIDE1ODcgMCBSL0tb MTU4OCAwIFIgMTU4OSAwIFJdL1AgMTUzOSAwIFIvUy9MST4+DWVuZG9iag0xNTQyIDAgb2JqDTw8 L0EgMTU4MyAwIFIvS1sxNTg0IDAgUiAxNTg1IDAgUl0vUCAxNTM5IDAgUi9TL0xJPj4NZW5kb2Jq DTE1NDMgMCBvYmoNPDwvQSAxNTc5IDAgUi9LWzE1ODAgMCBSIDE1ODEgMCBSXS9QIDE1MzkgMCBS L1MvTEk+Pg1lbmRvYmoNMTU0NCAwIG9iag08PC9BIDE1NzUgMCBSL0tbMTU3NiAwIFIgMTU3NyAw IFJdL1AgMTUzOSAwIFIvUy9MST4+DWVuZG9iag0xNTQ1IDAgb2JqDTw8L0EgMTU3MSAwIFIvS1sx NTcyIDAgUiAxNTczIDAgUl0vUCAxNTM5IDAgUi9TL0xJPj4NZW5kb2JqDTE1NDYgMCBvYmoNPDwv QSAxNTY3IDAgUi9LWzE1NjggMCBSIDE1NjkgMCBSXS9QIDE1MzkgMCBSL1MvTEk+Pg1lbmRvYmoN MTU0NyAwIG9iag08PC9BIDE1NjMgMCBSL0tbMTU2NCAwIFIgMTU2NSAwIFJdL1AgMTUzOSAwIFIv Uy9MST4+DWVuZG9iag0xNTQ4IDAgb2JqDTw8L0EgMTU1OSAwIFIvS1sxNTYwIDAgUiAxNTYxIDAg Ul0vUCAxNTM5IDAgUi9TL0xJPj4NZW5kb2JqDTE1NDkgMCBvYmoNPDwvQSAxNTU1IDAgUi9LWzE1 NTYgMCBSIDE1NTcgMCBSXS9QIDE1MzkgMCBSL1MvTEk+Pg1lbmRvYmoNMTU1MCAwIG9iag08PC9B IDE1NTEgMCBSL0tbMTU1MiAwIFIgMTU1MyAwIFJdL1AgMTUzOSAwIFIvUy9MST4+DWVuZG9iag0x NTUxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE1NTIgMCBvYmoNPDwvSyA0NC9QIDE1NTAg MCBSL1MvTGJsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1NTMgMCBvYmoNPDwvSyAxNTU0IDAgUi9Q IDE1NTAgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTU1NCAwIG9iag08PC9LIDQ1L1AgMTU1MyAwIFIv Uy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTU1NSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVu ZG9iag0xNTU2IDAgb2JqDTw8L0sgNDIvUCAxNTQ5IDAgUi9TL0xibC9QZyAyMDQ5IDAgUj4+DWVu ZG9iag0xNTU3IDAgb2JqDTw8L0sgMTU1OCAwIFIvUCAxNTQ5IDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTE1NTggMCBvYmoNPDwvSyA0My9QIDE1NTcgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5k b2JqDTE1NTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTU2MCAwIG9iag08PC9LIDQwL1Ag MTU0OCAwIFIvUy9MYmwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTU2MSAwIG9iag08PC9LIDE1NjIg MCBSL1AgMTU0OCAwIFIvUy9MYm9keT4+DWVuZG9iag0xNTYyIDAgb2JqDTw8L0sgNDEvUCAxNTYx IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTYzIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4w Pj4NZW5kb2JqDTE1NjQgMCBvYmoNPDwvSyAzOC9QIDE1NDcgMCBSL1MvTGJsL1BnIDIwNDkgMCBS Pj4NZW5kb2JqDTE1NjUgMCBvYmoNPDwvSyAxNTY2IDAgUi9QIDE1NDcgMCBSL1MvTGJvZHk+Pg1l bmRvYmoNMTU2NiAwIG9iag08PC9LIDM5L1AgMTU2NSAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+ Pg1lbmRvYmoNMTU2NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNTY4IDAgb2JqDTw8L0sg MzYvUCAxNTQ2IDAgUi9TL0xibC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTY5IDAgb2JqDTw8L0sg MTU3MCAwIFIvUCAxNTQ2IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTE1NzAgMCBvYmoNPDwvSyAzNy9Q IDE1NjkgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1NzEgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDM2LjA+Pg1lbmRvYmoNMTU3MiAwIG9iag08PC9LIDM0L1AgMTU0NSAwIFIvUy9MYmwvUGcgMjA0 OSAwIFI+Pg1lbmRvYmoNMTU3MyAwIG9iag08PC9LIDE1NzQgMCBSL1AgMTU0NSAwIFIvUy9MYm9k eT4+DWVuZG9iag0xNTc0IDAgb2JqDTw8L0sgMzUvUCAxNTczIDAgUi9TL05vcm1hbC9QZyAyMDQ5 IDAgUj4+DWVuZG9iag0xNTc1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg LTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE1NzYgMCBvYmoN PDwvSyAzMi9QIDE1NDQgMCBSL1MvTGJsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1NzcgMCBvYmoN PDwvSyAxNTc4IDAgUi9QIDE1NDQgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTU3OCAwIG9iag08PC9L IDMzL1AgMTU3NyAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTU3OSAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMzYuMD4+DWVuZG9iag0xNTgwIDAgb2JqDTw8L0sgMzAvUCAxNTQzIDAgUi9TL0xibC9Q ZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTgxIDAgb2JqDTw8L0sgMTU4MiAwIFIvUCAxNTQzIDAgUi9T L0xib2R5Pj4NZW5kb2JqDTE1ODIgMCBvYmoNPDwvSyAzMS9QIDE1ODEgMCBSL1MvTm9ybWFsL1Bn IDIwNDkgMCBSPj4NZW5kb2JqDTE1ODMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNMTU4NCAw IG9iag08PC9LIDI4L1AgMTU0MiAwIFIvUy9MYmwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTU4NSAw IG9iag08PC9LIDE1ODYgMCBSL1AgMTU0MiAwIFIvUy9MYm9keT4+DWVuZG9iag0xNTg2IDAgb2Jq DTw8L0sgMjkvUCAxNTg1IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTg3IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE1ODggMCBvYmoNPDwvSyAyNi9QIDE1NDEgMCBSL1Mv TGJsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1ODkgMCBvYmoNPDwvSyAxNTkwIDAgUi9QIDE1NDEg MCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTU5MCAwIG9iag08PC9LIDI3L1AgMTU4OSAwIFIvUy9Ob3Jt YWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTU5MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0x NTkyIDAgb2JqDTw8L0sgMjQvUCAxNTQwIDAgUi9TL0xibC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0x NTkzIDAgb2JqDTw8L0sgMTU5NCAwIFIvUCAxNTQwIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTE1OTQg MCBvYmoNPDwvSyAyNS9QIDE1OTMgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1 OTUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTU5NiAwIG9iag08PC9BIDE2MDkgMCBSL0sgMTcv UCAxNDk1IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNTk3IDAgb2JqDTw8L0Eg MTYwNiAwIFIvS1sxOCAxNjA3IDAgUl0vUCAxNDk1IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+ DWVuZG9iag0xNTk4IDAgb2JqDTw8L0EgMTYwNSAwIFIvSyAxOS9QIDE0OTUgMCBSL1MvTm9ybWFs L1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE1OTkgMCBvYmoNPDwvQSAxNjAwIDAgUi9LWzE2MDEgMCBS IDE2MDIgMCBSXS9QIDE0OTUgMCBSL1MvTm9ybWFsPj4NZW5kb2JqDTE2MDAgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMTYwMSAwIG9iag08PC9BIDE2MDQgMCBSL0sgMjEvUCAxNTk5IDAgUi9TL0lu bGluZVNoYXBlL1BnIDIwNDkgMCBSL0FsdCj+/wBsAG8AZwBvAF8AYwBoAGkAbgBhADUAZQBfADEA NgAwAC0ANQAwAC4AZwBpAGYpPj4NZW5kb2JqDTE2MDIgMCBvYmoNPDwvQSAxNjAzIDAgUi9LIDIy L1AgMTU5OSAwIFIvUy9JbmxpbmVTaGFwZS9QZyAyMDQ5IDAgUi9BbHQo/v8AQwA6AFxcAFcAaABp AHQAbgBlAHkAXFwATQBhAHIAdABpAG4ATABpAG4AawBpAG4AZwBCAHUAcwBpAG4AZQBzAHMAQwBv AG4AcwB1AGwAdABpAG4AZwBcXABCAHUAcwBpAG4AZQBzAHMARABpAHYAaQBzAGkAbwBuAHMAXFwA QwBvAG4AZgBlAHIAZQBuAGMAZQBzACYAVAByAGEAaQBuAGkAbgBnAHMAXFwAQgBCAFMAMgAwADAA OQBcXABQAEQARgBcXABMAG8AZwBvAFxcAEwATwBHAE8AMwAuAGcAaQBmKT4+DWVuZG9iag0xNjAz IDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFs0NDEuMCAxOS4wIDUzOC4w IDU0LjBdPj4NZW5kb2JqDTE2MDQgMCBvYmoNPDwvUGxhY2VtZW50L0lubGluZS9PL0xheW91dC9C Qm94WzE4MC4wIDE5LjAgNDQwLjAgNTYuMF0+Pg1lbmRvYmoNMTYwNSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xNjA2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MDcgMCBvYmoNPDwvQSAxNjA4 IDAgUi9LIDIwL1AgMTU5NyAwIFIvUy9JbmxpbmVTaGFwZS9QZyAyMDQ5IDAgUi9BbHQo/v8AQwA6 AFxcAFcAaABpAHQAbgBlAHkAXFwATQBhAHIAdABpAG4ATABpAG4AawBpAG4AZwBCAHUAcwBpAG4A ZQBzAHMAQwBvAG4AcwB1AGwAdABpAG4AZwBcXABDAG8AcgBwAG8AcgBhAHQAZQBGAGkAbABlAHMA XFwARABvAGMAdQBtAGUAbgB0AHMAXFwATABvAGcAbwBcXABMAE8ARwBPAEEALQBzAG0AYQBsAGwA LgBqAHAAZyk+Pg1lbmRvYmoNMTYwOCAwIG9iag08PC9QbGFjZW1lbnQvSW5saW5lL08vTGF5b3V0 L0JCb3hbMTgwLjAgODAuMCAzNDMuMCAxMjAuMF0+Pg1lbmRvYmoNMTYwOSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xNjEwIDAgb2JqDTw8L0EgMTYyMyAwIFIvSyAxMC9QIDE0OTQgMCBSL1MvTm9y bWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE2MTEgMCBvYmoNPDwvQSAxNjIyIDAgUi9LIDExL1Ag MTQ5NCAwIFIvUy9Ob3JtYWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTYxMiAwIG9iag08PC9BIDE2 MjEgMCBSL0sgMTIvUCAxNDk0IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNjEz IDAgb2JqDTw8L0EgMTYyMCAwIFIvSyAxMy9QIDE0OTQgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBS Pj4NZW5kb2JqDTE2MTQgMCBvYmoNPDwvQSAxNjE5IDAgUi9LIDE0L1AgMTQ5NCAwIFIvUy9Ob3Jt YWwvUGcgMjA0OSAwIFI+Pg1lbmRvYmoNMTYxNSAwIG9iag08PC9BIDE2MTggMCBSL0sgMTUvUCAx NDk0IDAgUi9TL05vcm1hbC9QZyAyMDQ5IDAgUj4+DWVuZG9iag0xNjE2IDAgb2JqDTw8L0EgMTYx NyAwIFIvSyAxNi9QIDE0OTQgMCBSL1MvTm9ybWFsL1BnIDIwNDkgMCBSPj4NZW5kb2JqDTE2MTcg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMTIuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNjE4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDExLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTYxOSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAxMS4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MjAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMTEuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNjIxIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDExLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTYyMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAxMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MjMgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMTIuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xNjI0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MjUgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTYyNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNjI3IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MjggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTYyOSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNjMwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MzEg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTYzMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNjMz IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE2MzQgMCBvYmoNPDwvQSAxOTY3IDAgUi9DL05vIzIw U3BhY2luZysxL0sgMC9QIDE5NiAwIFIvUy9ObyMyMFNwYWNpbmcvUGcgNDUgMCBSPj4NZW5kb2Jq DTE2MzUgMCBvYmoNPDwvQSAxOTY2IDAgUi9DL05vcm1hbCszL0sgMS9QIDE5NiAwIFIvUy9Ob3Jt YWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE2MzYgMCBvYmoNPDwvQSAxOTY1IDAgUi9LIDIvUCAxOTYg MCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNjM3IDAgb2JqDTw8L0tbMTk1OSAwIFIg MTk2MCAwIFIgMTk2MSAwIFJdL1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTYzOCAwIG9i ag08PC9LWzE4NzMgMCBSIDE4NzQgMCBSIDE4NzUgMCBSIDE4NzYgMCBSIDE4NzcgMCBSIDE4Nzgg MCBSIDE4NzkgMCBSIDE4ODAgMCBSIDE4ODEgMCBSIDE4ODIgMCBSIDE4ODMgMCBSIDE4ODQgMCBS IDE4ODUgMCBSIDE4ODYgMCBSIDE4ODcgMCBSIDE4ODggMCBSIDE4ODkgMCBSIDE4OTAgMCBSIDE4 OTEgMCBSIDE4OTIgMCBSIDE4OTMgMCBSIDE4OTQgMCBSIDE4OTUgMCBSIDE4OTYgMCBSIDE4OTcg MCBSIDE4OTggMCBSIDE4OTkgMCBSIDE5MDAgMCBSIDE5MDEgMCBSIDE5MDIgMCBSIDE5MDMgMCBS IDE5MDQgMCBSIDE5MDUgMCBSIDE5MDYgMCBSIDE5MDcgMCBSIDE5MDggMCBSIDE5MDkgMCBSIDE5 MTAgMCBSIDE5MTEgMCBSIDE5MTIgMCBSIDE5MTMgMCBSIDE5MTQgMCBSIDE5MTUgMCBSXS9QIDE5 NiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTE2MzkgMCBvYmoNPDwvS1sxODA1IDAgUiAxODA2IDAg UiAxODA3IDAgUiAxODA4IDAgUiAxODA5IDAgUiAxODEwIDAgUiAxODExIDAgUiAxODEyIDAgUiAx ODEzIDAgUiAxODE0IDAgUiAxODE1IDAgUiAxODE2IDAgUiAxODE3IDAgUiAxODE4IDAgUiAxODE5 IDAgUiAxODIwIDAgUiAxODIxIDAgUiAxODIyIDAgUiAxODIzIDAgUiAxODI0IDAgUiAxODI1IDAg UiAxODI2IDAgUiAxODI3IDAgUiAxODI4IDAgUiAxODI5IDAgUiAxODMwIDAgUiAxODMxIDAgUiAx ODMyIDAgUiAxODMzIDAgUiAxODM0IDAgUiAxODM1IDAgUiAxODM2IDAgUiAxODM3IDAgUiAxODM4 IDAgUl0vUCAxOTYgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xNjQwIDAgb2JqDTw8L0sgMTgwMyAw IFIvUCAxOTYgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0xNjQxIDAgb2JqDTw8L0tbMTc5OSAwIFIg MTgwMCAwIFJdL1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0MiAwIG9iag08PC9LIDE3 OTcgMCBSL1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0MyAwIG9iag08PC9LIDE3OTUg MCBSL1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0NCAwIG9iag08PC9LIDE3OTMgMCBS L1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0NSAwIG9iag08PC9LIDE3OTEgMCBSL1Ag MTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0NiAwIG9iag08PC9LIDE3ODkgMCBSL1AgMTk2 IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0NyAwIG9iag08PC9LIDE3ODcgMCBSL1AgMTk2IDAg Ui9TL1RleHRCb3g+Pg1lbmRvYmoNMTY0OCAwIG9iag08PC9LIDE3ODUgMCBSL1AgMTk2IDAgUi9T L1RleHRCb3g+Pg1lbmRvYmoNMTY0OSAwIG9iag08PC9LIDE3ODMgMCBSL1AgMTk2IDAgUi9TL1Rl eHRCb3g+Pg1lbmRvYmoNMTY1MCAwIG9iag08PC9LIDE3ODEgMCBSL1AgMTk2IDAgUi9TL1RleHRC b3g+Pg1lbmRvYmoNMTY1MSAwIG9iag08PC9LIDE3NzkgMCBSL1AgMTk2IDAgUi9TL1RleHRCb3g+ Pg1lbmRvYmoNMTY1MiAwIG9iag08PC9LIDE3NzcgMCBSL1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1l bmRvYmoNMTY1MyAwIG9iag08PC9LIDE3NzMgMCBSL1AgMTk2IDAgUi9TL1RleHRCb3g+Pg1lbmRv YmoNMTY1NCAwIG9iag08PC9LWzE3MjYgMCBSIDE3MjcgMCBSIDE3MjggMCBSIDE3MjkgMCBSXS9Q IDE5NiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTE2NTUgMCBvYmoNPDwvS1sxNjYyIDAgUiAxNjYz IDAgUiAxNjY0IDAgUiAxNjY1IDAgUiAxNjY2IDAgUl0vUCAxOTYgMCBSL1MvVGV4dEJveD4+DWVu ZG9iag0xNjU2IDAgb2JqDTw8L0EgMTY2MSAwIFIvSyAzL1AgMTk2IDAgUi9TL1NoYXBlL1BnIDQ1 IDAgUj4+DWVuZG9iag0xNjU3IDAgb2JqDTw8L0EgMTY2MCAwIFIvSyA0L1AgMTk2IDAgUi9TL1No YXBlL1BnIDQ1IDAgUj4+DWVuZG9iag0xNjU4IDAgb2JqDTw8L0EgMTY1OSAwIFIvSyAxMDgvUCAx OTYgMCBSL1MvU2hhcGUvUGcgNDUgMCBSPj4NZW5kb2JqDTE2NTkgMCBvYmoNPDwvUGxhY2VtZW50 L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCA0NjYuMC9TdGFydEluZGVudCAtNzEuMC9CQm94WzE5 LjAgNzQ3LjAgMzkuMCA3NTMuMF0+Pg1lbmRvYmoNMTY2MCAwIG9iag08PC9QbGFjZW1lbnQvQmxv Y2svTy9MYXlvdXQvRW5kSW5kZW50IC05MC4wL1N0YXJ0SW5kZW50IC05MC4wL0JCb3hbMC4wIDc1 MC4wIDU5NS4wIDg0Mi4wXT4+DWVuZG9iag0xNjYxIDAgb2JqDTw8L1BsYWNlbWVudC9CbG9jay9P L0xheW91dC9FbmRJbmRlbnQgLTkwLjAvU3RhcnRJbmRlbnQgLTkwLjAvQkJveFswLjAgMC4wIDU5 NS4wIDg0Mi4wXT4+DWVuZG9iag0xNjYyIDAgb2JqDTw8L0EgMTcyNSAwIFIvSyAxNzYvUCAxNjU1 IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTY2MyAwIG9iag08PC9LWzE2NzAgMCBS IDE2NzEgMCBSIDE2NzIgMCBSIDE2NzMgMCBSIDE2NzQgMCBSIDE2NzUgMCBSIDE2NzYgMCBSIDE2 NzcgMCBSIDE2NzggMCBSIDE2NzkgMCBSIDE2ODAgMCBSXS9QIDE2NTUgMCBSL1MvTD4+DWVuZG9i ag0xNjY0IDAgb2JqDTw8L0EgMTY2OSAwIFIvSyAxOTYvUCAxNjU1IDAgUi9TL0RlZmF1bHQvUGcg NDUgMCBSPj4NZW5kb2JqDTE2NjUgMCBvYmoNPDwvQSAxNjY4IDAgUi9LIDE5Ny9QIDE2NTUgMCBS L1MvRGVmYXVsdC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTY2NiAwIG9iag08PC9BIDE2NjcgMCBSL0sg MTk4L1AgMTY1NSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE2NjcgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMTY2OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTY2OSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMTY3MCAwIG9iag08PC9BIDE3MjEgMCBSL0tbMTcyMiAwIFIgMTcyMyAwIFJd L1AgMTY2MyAwIFIvUy9MST4+DWVuZG9iag0xNjcxIDAgb2JqDTw8L0EgMTcxNyAwIFIvS1sxNzE4 IDAgUiAxNzE5IDAgUl0vUCAxNjYzIDAgUi9TL0xJPj4NZW5kb2JqDTE2NzIgMCBvYmoNPDwvQSAx NzEzIDAgUi9LWzE3MTQgMCBSIDE3MTUgMCBSXS9QIDE2NjMgMCBSL1MvTEk+Pg1lbmRvYmoNMTY3 MyAwIG9iag08PC9BIDE3MDkgMCBSL0tbMTcxMCAwIFIgMTcxMSAwIFJdL1AgMTY2MyAwIFIvUy9M ST4+DWVuZG9iag0xNjc0IDAgb2JqDTw8L0EgMTcwNSAwIFIvS1sxNzA2IDAgUiAxNzA3IDAgUl0v UCAxNjYzIDAgUi9TL0xJPj4NZW5kb2JqDTE2NzUgMCBvYmoNPDwvQSAxNzAxIDAgUi9LWzE3MDIg MCBSIDE3MDMgMCBSXS9QIDE2NjMgMCBSL1MvTEk+Pg1lbmRvYmoNMTY3NiAwIG9iag08PC9BIDE2 OTcgMCBSL0tbMTY5OCAwIFIgMTY5OSAwIFJdL1AgMTY2MyAwIFIvUy9MST4+DWVuZG9iag0xNjc3 IDAgb2JqDTw8L0EgMTY5MyAwIFIvS1sxNjk0IDAgUiAxNjk1IDAgUl0vUCAxNjYzIDAgUi9TL0xJ Pj4NZW5kb2JqDTE2NzggMCBvYmoNPDwvQSAxNjg5IDAgUi9LWzE2OTAgMCBSIDE2OTEgMCBSXS9Q IDE2NjMgMCBSL1MvTEk+Pg1lbmRvYmoNMTY3OSAwIG9iag08PC9BIDE2ODUgMCBSL0tbMTY4NiAw IFIgMTY4NyAwIFJdL1AgMTY2MyAwIFIvUy9MST4+DWVuZG9iag0xNjgwIDAgb2JqDTw8L0EgMTY4 MSAwIFIvS1sxNjgyIDAgUiAxNjgzIDAgUl0vUCAxNjYzIDAgUi9TL0xJPj4NZW5kb2JqDTE2ODEg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE2ODIgMCBvYmoNPDwvSyAxOTQvUCAxNjgwIDAgUi9T L0xibC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTY4MyAwIG9iag08PC9LIDE2ODQgMCBSL1AgMTY4MCAw IFIvUy9MYm9keT4+DWVuZG9iag0xNjg0IDAgb2JqDTw8L0sgMTk1L1AgMTY4MyAwIFIvUy9Ob3Jt YWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE2ODUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE2ODYg MCBvYmoNPDwvSyAxOTIvUCAxNjc5IDAgUi9TL0xibC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTY4NyAw IG9iag08PC9LIDE2ODggMCBSL1AgMTY3OSAwIFIvUy9MYm9keT4+DWVuZG9iag0xNjg4IDAgb2Jq DTw8L0sgMTkzL1AgMTY4NyAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE2ODkgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAzNi4wPj4NZW5kb2JqDTE2OTAgMCBvYmoNPDwvSyAxOTAvUCAxNjc4IDAgUi9TL0xi bC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTY5MSAwIG9iag08PC9LIDE2OTIgMCBSL1AgMTY3OCAwIFIv Uy9MYm9keT4+DWVuZG9iag0xNjkyIDAgb2JqDTw8L0sgMTkxL1AgMTY5MSAwIFIvUy9Ob3JtYWwv UGcgNDUgMCBSPj4NZW5kb2JqDTE2OTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE2OTQgMCBv YmoNPDwvSyAxODgvUCAxNjc3IDAgUi9TL0xibC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTY5NSAwIG9i ag08PC9LIDE2OTYgMCBSL1AgMTY3NyAwIFIvUy9MYm9keT4+DWVuZG9iag0xNjk2IDAgb2JqDTw8 L0sgMTg5L1AgMTY5NSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE2OTcgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAzNi4wPj4NZW5kb2JqDTE2OTggMCBvYmoNPDwvSyA1NC9QIDE2NzYgMCBSL1MvTGJsL1Bn IDQ1IDAgUj4+DWVuZG9iag0xNjk5IDAgb2JqDTw8L0sgMTcwMCAwIFIvUCAxNjc2IDAgUi9TL0xi b2R5Pj4NZW5kb2JqDTE3MDAgMCBvYmoNPDwvS1s1NSAxODddL1AgMTY5OSAwIFIvUy9Ob3JtYWwv UGcgNDUgMCBSPj4NZW5kb2JqDTE3MDEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE3MDIgMCBv YmoNPDwvSyAxODUvUCAxNjc1IDAgUi9TL0xibC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTcwMyAwIG9i ag08PC9LIDE3MDQgMCBSL1AgMTY3NSAwIFIvUy9MYm9keT4+DWVuZG9iag0xNzA0IDAgb2JqDTw8 L0sgMTg2L1AgMTcwMyAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3MDUgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAzNi4wPj4NZW5kb2JqDTE3MDYgMCBvYmoNPDwvSyAxODMvUCAxNjc0IDAgUi9TL0xibC9Q ZyA0NSAwIFI+Pg1lbmRvYmoNMTcwNyAwIG9iag08PC9LIDE3MDggMCBSL1AgMTY3NCAwIFIvUy9M Ym9keT4+DWVuZG9iag0xNzA4IDAgb2JqDTw8L0sgMTg0L1AgMTcwNyAwIFIvUy9Ob3JtYWwvUGcg NDUgMCBSPj4NZW5kb2JqDTE3MDkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg LTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE3MTAgMCBvYmoN PDwvSyA1MC9QIDE2NzMgMCBSL1MvTGJsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzExIDAgb2JqDTw8 L0sgMTcxMiAwIFIvUCAxNjczIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTE3MTIgMCBvYmoNPDwvS1s1 MSAxODJdL1AgMTcxMSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3MTMgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAzNi4wPj4NZW5kb2JqDTE3MTQgMCBvYmoNPDwvSyA0Ny9QIDE2NzIgMCBSL1MvTGJsL1Bn IDQ1IDAgUj4+DWVuZG9iag0xNzE1IDAgb2JqDTw8L0sgMTcxNiAwIFIvUCAxNjcyIDAgUi9TL0xi b2R5Pj4NZW5kb2JqDTE3MTYgMCBvYmoNPDwvS1s0OCAxODFdL1AgMTcxNSAwIFIvUy9Ob3JtYWwv UGcgNDUgMCBSPj4NZW5kb2JqDTE3MTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNi4wPj4NZW5kb2JqDTE3MTggMCBv YmoNPDwvSyAxNzkvUCAxNjcxIDAgUi9TL0xibC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTcxOSAwIG9i ag08PC9LIDE3MjAgMCBSL1AgMTY3MSAwIFIvUy9MYm9keT4+DWVuZG9iag0xNzIwIDAgb2JqDTw8 L0sgMTgwL1AgMTcxOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3MjEgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAzNi4wPj4NZW5kb2JqDTE3MjIgMCBvYmoNPDwvSyAxNzcvUCAxNjcwIDAgUi9TL0xibC9Q ZyA0NSAwIFI+Pg1lbmRvYmoNMTcyMyAwIG9iag08PC9LIDE3MjQgMCBSL1AgMTY3MCAwIFIvUy9M Ym9keT4+DWVuZG9iag0xNzI0IDAgb2JqDTw8L0sgMTc4L1AgMTcyMyAwIFIvUy9Ob3JtYWwvUGcg NDUgMCBSPj4NZW5kb2JqDTE3MjUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTcyNiAwIG9iag08 PC9BIDE3NzIgMCBSL0sgMTU3L1AgMTY1NCAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2Jq DTE3MjcgMCBvYmoNPDwvQSAxNzcxIDAgUi9LIDE1OC9QIDE2NTQgMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xNzI4IDAgb2JqDTw8L0tbMTczMSAwIFIgMTczMiAwIFIgMTczMyAwIFIg MTczNCAwIFIgMTczNSAwIFIgMTczNiAwIFIgMTczNyAwIFIgMTczOCAwIFJdL1AgMTY1NCAwIFIv Uy9MPj4NZW5kb2JqDTE3MjkgMCBvYmoNPDwvQSAxNzMwIDAgUi9LIDE3NS9QIDE2NTQgMCBSL1Mv Tm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzMwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE3 MzEgMCBvYmoNPDwvQSAxNzY3IDAgUi9LWzE3NjggMCBSIDE3NjkgMCBSXS9QIDE3MjggMCBSL1Mv TEk+Pg1lbmRvYmoNMTczMiAwIG9iag08PC9BIDE3NjMgMCBSL0tbMTc2NCAwIFIgMTc2NSAwIFJd L1AgMTcyOCAwIFIvUy9MST4+DWVuZG9iag0xNzMzIDAgb2JqDTw8L0EgMTc1OSAwIFIvS1sxNzYw IDAgUiAxNzYxIDAgUl0vUCAxNzI4IDAgUi9TL0xJPj4NZW5kb2JqDTE3MzQgMCBvYmoNPDwvQSAx NzU1IDAgUi9LWzE3NTYgMCBSIDE3NTcgMCBSXS9QIDE3MjggMCBSL1MvTEk+Pg1lbmRvYmoNMTcz NSAwIG9iag08PC9BIDE3NTEgMCBSL0tbMTc1MiAwIFIgMTc1MyAwIFJdL1AgMTcyOCAwIFIvUy9M ST4+DWVuZG9iag0xNzM2IDAgb2JqDTw8L0EgMTc0NyAwIFIvS1sxNzQ4IDAgUiAxNzQ5IDAgUl0v UCAxNzI4IDAgUi9TL0xJPj4NZW5kb2JqDTE3MzcgMCBvYmoNPDwvQSAxNzQzIDAgUi9LWzE3NDQg MCBSIDE3NDUgMCBSXS9QIDE3MjggMCBSL1MvTEk+Pg1lbmRvYmoNMTczOCAwIG9iag08PC9BIDE3 MzkgMCBSL0tbMTc0MCAwIFIgMTc0MSAwIFJdL1AgMTcyOCAwIFIvUy9MST4+DWVuZG9iag0xNzM5 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNzQwIDAgb2JqDTw8L0sgMTczL1AgMTczOCAwIFIv Uy9MYmwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3NDEgMCBvYmoNPDwvSyAxNzQyIDAgUi9QIDE3Mzgg MCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTc0MiAwIG9iag08PC9LIDE3NC9QIDE3NDEgMCBSL1MvTm9y bWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzQzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNzQ0 IDAgb2JqDTw8L0sgMTcxL1AgMTczNyAwIFIvUy9MYmwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3NDUg MCBvYmoNPDwvSyAxNzQ2IDAgUi9QIDE3MzcgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTc0NiAwIG9i ag08PC9LIDE3Mi9QIDE3NDUgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzQ3IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNzQ4IDAgb2JqDTw8L0sgMTY5L1AgMTczNiAwIFIvUy9M YmwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3NDkgMCBvYmoNPDwvSyAxNzUwIDAgUi9QIDE3MzYgMCBS L1MvTGJvZHk+Pg1lbmRvYmoNMTc1MCAwIG9iag08PC9LIDE3MC9QIDE3NDkgMCBSL1MvTm9ybWFs L1BnIDQ1IDAgUj4+DWVuZG9iag0xNzUxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNzUyIDAg b2JqDTw8L0sgMTY3L1AgMTczNSAwIFIvUy9MYmwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3NTMgMCBv YmoNPDwvSyAxNzU0IDAgUi9QIDE3MzUgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTc1NCAwIG9iag08 PC9LIDE2OC9QIDE3NTMgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzU1IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMzYuMD4+DWVuZG9iag0xNzU2IDAgb2JqDTw8L0sgMTY1L1AgMTczNCAwIFIvUy9MYmwv UGcgNDUgMCBSPj4NZW5kb2JqDTE3NTcgMCBvYmoNPDwvSyAxNzU4IDAgUi9QIDE3MzQgMCBSL1Mv TGJvZHk+Pg1lbmRvYmoNMTc1OCAwIG9iag08PC9LIDE2Ni9QIDE3NTcgMCBSL1MvTm9ybWFsL1Bn IDQ1IDAgUj4+DWVuZG9iag0xNzU5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNzYwIDAgb2Jq DTw8L0sgMTYzL1AgMTczMyAwIFIvUy9MYmwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3NjEgMCBvYmoN PDwvSyAxNzYyIDAgUi9QIDE3MzMgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTc2MiAwIG9iag08PC9L IDE2NC9QIDE3NjEgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzYzIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMzYuMD4+DWVuZG9iag0xNzY0IDAgb2JqDTw8L0sgMTYxL1AgMTczMiAwIFIvUy9MYmwvUGcg NDUgMCBSPj4NZW5kb2JqDTE3NjUgMCBvYmoNPDwvSyAxNzY2IDAgUi9QIDE3MzIgMCBSL1MvTGJv ZHk+Pg1lbmRvYmoNMTc2NiAwIG9iag08PC9LIDE2Mi9QIDE3NjUgMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xNzY3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0x OC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzYuMD4+DWVuZG9iag0xNzY4IDAgb2JqDTw8 L0sgMTU5L1AgMTczMSAwIFIvUy9MYmwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3NjkgMCBvYmoNPDwv SyAxNzcwIDAgUi9QIDE3MzEgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMTc3MCAwIG9iag08PC9LIDE2 MC9QIDE3NjkgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xNzcxIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTE3NzIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTc3MyAwIG9iag08PC9B IDE3NzQgMCBSL0tbMTU1IDE3NzUgMCBSXS9QIDE2NTMgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+ DWVuZG9iag0xNzc0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE3NzUgMCBvYmoNPDwvQSAxNzc2 IDAgUi9LIDE1Ni9QIDE3NzMgMCBSL1MvSW5saW5lU2hhcGUvUGcgNDUgMCBSL0FsdCj+/wBMAE8A RwBPAEEALQBzAG0AYQBsAGwpPj4NZW5kb2JqDTE3NzYgMCBvYmoNPDwvUGxhY2VtZW50L0lubGlu ZS9PL0xheW91dC9CQm94WzQxMy4wIDc2NS4wIDU2OC4wIDgwMi4wXT4+DWVuZG9iag0xNzc3IDAg b2JqDTw8L0EgMTc3OCAwIFIvSyAxNTQvUCAxNjUyIDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1l bmRvYmoNMTc3OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNzc5IDAgb2JqDTw8L0EgMTc4MCAw IFIvSyAxNTMvUCAxNjUxIDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTc4MCAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xNzgxIDAgb2JqDTw8L0EgMTc4MiAwIFIvS1szMSAxNTJdL1Ag MTY1MCAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3ODIgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTc4MyAwIG9iag08PC9BIDE3ODQgMCBSL0sgMTUxL1AgMTY0OSAwIFIvUy9Ob3Jt YWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3ODQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTc4NSAw IG9iag08PC9BIDE3ODYgMCBSL0tbNDEgMTUwXS9QIDE2NDggMCBSL1MvTm9ybWFsL1BnIDQ1IDAg Uj4+DWVuZG9iag0xNzg2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE3ODcgMCBvYmoNPDwvQSAx Nzg4IDAgUi9LWzMzIDE0OV0vUCAxNjQ3IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoN MTc4OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xNzg5IDAgb2JqDTw8L0EgMTc5MCAwIFIvS1sx MSAxMDddL1AgMTY0NiAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3OTAgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNMTc5MSAwIG9iag08PC9BIDE3OTIgMCBSL0sgMTA2L1AgMTY0NSAw IFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3OTIgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTE3OTMgMCBvYmoNPDwvQSAxNzk0IDAgUi9LIDEwNS9QIDE2NDQgMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xNzk0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE3OTUgMCBvYmoNPDwv QSAxNzk2IDAgUi9LWzIzIDEwMyAxMDRdL1AgMTY0MyAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4N ZW5kb2JqDTE3OTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTc5NyAwIG9iag08PC9BIDE3OTgg MCBSL0sgMTAyL1AgMTY0MiAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE3OTggMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTc5OSAwIG9iag08PC9BIDE4MDIgMCBSL0sgMTAwL1AgMTY0 MSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MDAgMCBvYmoNPDwvQSAxODAxIDAg Ui9LIDEwMS9QIDE2NDEgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODAxIDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTE4MDIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE4MDMgMCBvYmoN PDwvQSAxODA0IDAgUi9LIDE1L1AgMTY0MCAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2Jq DTE4MDQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTgwNSAwIG9iag08PC9BIDE4NzIgMCBSL0sg NjkvUCAxNjM5IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTgwNiAwIG9iag08PC9B IDE4NzEgMCBSL0sgMTcvUCAxNjM5IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTgw NyAwIG9iag08PC9BIDE4NzAgMCBSL0sgNzAvUCAxNjM5IDAgUi9TL0RlZmF1bHQvUGcgNDUgMCBS Pj4NZW5kb2JqDTE4MDggMCBvYmoNPDwvQSAxODY5IDAgUi9LIDcxL1AgMTYzOSAwIFIvUy9Ob3Jt YWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MDkgMCBvYmoNPDwvQSAxODY4IDAgUi9LIDcyL1AgMTYz OSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MTAgMCBvYmoNPDwvQSAxODY3IDAg Ui9LIDczL1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MTEgMCBvYmoN PDwvQSAxODY2IDAgUi9LIDc0L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2Jq DTE4MTIgMCBvYmoNPDwvQSAxODY1IDAgUi9LIDc1L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUg MCBSPj4NZW5kb2JqDTE4MTMgMCBvYmoNPDwvQSAxODY0IDAgUi9LIDc2L1AgMTYzOSAwIFIvUy9O b3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MTQgMCBvYmoNPDwvQSAxODYzIDAgUi9LIDI3L1Ag MTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MTUgMCBvYmoNPDwvQSAxODYy IDAgUi9LIDc3L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MTYgMCBv YmoNPDwvQSAxODYxIDAgUi9LIDc4L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5k b2JqDTE4MTcgMCBvYmoNPDwvQSAxODYwIDAgUi9LIDc5L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcg NDUgMCBSPj4NZW5kb2JqDTE4MTggMCBvYmoNPDwvQSAxODU5IDAgUi9LIDgwL1AgMTYzOSAwIFIv Uy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MTkgMCBvYmoNPDwvQSAxODU4IDAgUi9LIDgx L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MjAgMCBvYmoNPDwvQSAx ODU3IDAgUi9LIDgyL1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MjEg MCBvYmoNPDwvQSAxODU2IDAgUi9LIDgzL1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4N ZW5kb2JqDTE4MjIgMCBvYmoNPDwvQSAxODU1IDAgUi9LIDg0L1AgMTYzOSAwIFIvUy9Ob3JtYWwv UGcgNDUgMCBSPj4NZW5kb2JqDTE4MjMgMCBvYmoNPDwvQSAxODU0IDAgUi9LIDg1L1AgMTYzOSAw IFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MjQgMCBvYmoNPDwvQSAxODUzIDAgUi9L IDg2L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MjUgMCBvYmoNPDwv QSAxODUyIDAgUi9LIDM4L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4 MjYgMCBvYmoNPDwvQSAxODUxIDAgUi9LIDg3L1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBS Pj4NZW5kb2JqDTE4MjcgMCBvYmoNPDwvQSAxODUwIDAgUi9LIDg4L1AgMTYzOSAwIFIvUy9Ob3Jt YWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MjggMCBvYmoNPDwvQSAxODQ5IDAgUi9LIDg5L1AgMTYz OSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MjkgMCBvYmoNPDwvQSAxODQ4IDAg Ui9LIDkwL1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MzAgMCBvYmoN PDwvQSAxODQ3IDAgUi9LIDkxL1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUgMCBSPj4NZW5kb2Jq DTE4MzEgMCBvYmoNPDwvQSAxODQ2IDAgUi9LIDkyL1AgMTYzOSAwIFIvUy9Ob3JtYWwvUGcgNDUg MCBSPj4NZW5kb2JqDTE4MzIgMCBvYmoNPDwvQSAxODQ1IDAgUi9LIDkzL1AgMTYzOSAwIFIvUy9O b3JtYWwvUGcgNDUgMCBSPj4NZW5kb2JqDTE4MzMgMCBvYmoNPDwvQSAxODQ0IDAgUi9LIDk0L1Ag MTYzOSAwIFIvUy92ZXJkYWRhL1BnIDQ1IDAgUj4+DWVuZG9iag0xODM0IDAgb2JqDTw8L0EgMTg0 MyAwIFIvSyA5NS9QIDE2MzkgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODM1IDAg b2JqDTw8L0EgMTg0MiAwIFIvSyA5Ni9QIDE2MzkgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVu ZG9iag0xODM2IDAgb2JqDTw8L0EgMTg0MSAwIFIvSyA5Ny9QIDE2MzkgMCBSL1MvTm9ybWFsL1Bn IDQ1IDAgUj4+DWVuZG9iag0xODM3IDAgb2JqDTw8L0EgMTg0MCAwIFIvSyA5OC9QIDE2MzkgMCBS L1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODM4IDAgb2JqDTw8L0EgMTgzOSAwIFIvSyA5 OS9QIDE2MzkgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODM5IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xODQwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODQxIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xODQyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODQzIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0xODQ0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODQ1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0xODQ2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODQ3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0x ODQ4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODQ5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODUw IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODUxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODUyIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xODUzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODU0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xODU1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODU2IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xODU3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODU4IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xODU5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODYwIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xODYxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODYyIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0xODYzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE4NjQgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTg2NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODY2IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTE4NjcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTg2OCAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTg2OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTg3MCAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNMTg3MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xODcyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0xODczIDAgb2JqDTw8L0EgMTk1OCAwIFIvSyAxMi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xODc0IDAgb2JqDTw8L0EgMTk1NyAwIFIvSyAxMy9QIDE2MzggMCBSL1Mv Tm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODc1IDAgb2JqDTw8L0EgMTk1NiAwIFIvSyAxNC9Q IDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODc2IDAgb2JqDTw8L0EgMTk1 NSAwIFIvSyAxNi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODc3IDAg b2JqDTw8L0EgMTk1NCAwIFIvSyAxOC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVu ZG9iag0xODc4IDAgb2JqDTw8L0EgMTk1MyAwIFIvSyAxOS9QIDE2MzggMCBSL1MvTm9ybWFsL1Bn IDQ1IDAgUj4+DWVuZG9iag0xODc5IDAgb2JqDTw8L0EgMTk1MiAwIFIvSyAyMC9QIDE2MzggMCBS L1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODgwIDAgb2JqDTw8L0EgMTk1MSAwIFIvSyAy MS9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODgxIDAgb2JqDTw8L0Eg MTk1MCAwIFIvSyAyMi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODgy IDAgb2JqDTw8L0EgMTk0OSAwIFIvSyAyNC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+ DWVuZG9iag0xODgzIDAgb2JqDTw8L0EgMTk0OCAwIFIvSyAyNS9QIDE2MzggMCBSL1MvTm9ybWFs L1BnIDQ1IDAgUj4+DWVuZG9iag0xODg0IDAgb2JqDTw8L0EgMTk0NyAwIFIvSyAyNi9QIDE2Mzgg MCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODg1IDAgb2JqDTw8L0EgMTk0NiAwIFIv SyAyOC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODg2IDAgb2JqDTw8 L0EgMTk0NSAwIFIvSyAyOS9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0x ODg3IDAgb2JqDTw8L0EgMTk0NCAwIFIvSyAzMC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAg Uj4+DWVuZG9iag0xODg4IDAgb2JqDTw8L0EgMTk0MyAwIFIvSyAzMi9QIDE2MzggMCBSL1MvTm9y bWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODg5IDAgb2JqDTw8L0EgMTk0MiAwIFIvSyAzNC9QIDE2 MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODkwIDAgb2JqDTw8L0EgMTk0MSAw IFIvSyAzNS9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODkxIDAgb2Jq DTw8L0EgMTk0MCAwIFIvSyAzNi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9i ag0xODkyIDAgb2JqDTw8L0EgMTkzOSAwIFIvSyAzNy9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xODkzIDAgb2JqDTw8L0EgMTkzOCAwIFIvSyAzOS9QIDE2MzggMCBSL1Mv Tm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODk0IDAgb2JqDTw8L0EgMTkzNyAwIFIvSyA0MC9Q IDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODk1IDAgb2JqDTw8L0EgMTkz NiAwIFIvSyA0Mi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODk2IDAg b2JqDTw8L0EgMTkzNSAwIFIvSyA0My9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVu ZG9iag0xODk3IDAgb2JqDTw8L0EgMTkzNCAwIFIvSyA0NC9QIDE2MzggMCBSL1MvTm9ybWFsL1Bn IDQ1IDAgUj4+DWVuZG9iag0xODk4IDAgb2JqDTw8L0EgMTkzMyAwIFIvSyA0NS9QIDE2MzggMCBS L1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xODk5IDAgb2JqDTw8L0EgMTkzMiAwIFIvSyA0 Ni9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTAwIDAgb2JqDTw8L0Eg MTkzMSAwIFIvSyA0OS9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTAx IDAgb2JqDTw8L0EgMTkzMCAwIFIvSyA1Mi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+ DWVuZG9iag0xOTAyIDAgb2JqDTw8L0EgMTkyOSAwIFIvSyA1My9QIDE2MzggMCBSL1MvTm9ybWFs L1BnIDQ1IDAgUj4+DWVuZG9iag0xOTAzIDAgb2JqDTw8L0EgMTkyOCAwIFIvSyA1Ni9QIDE2Mzgg MCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTA0IDAgb2JqDTw8L0EgMTkyNyAwIFIv SyA1Ny9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTA1IDAgb2JqDTw8 L0EgMTkyNiAwIFIvSyA1OC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0x OTA2IDAgb2JqDTw8L0EgMTkyNSAwIFIvSyA1OS9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAg Uj4+DWVuZG9iag0xOTA3IDAgb2JqDTw8L0EgMTkyNCAwIFIvSyA2MC9QIDE2MzggMCBSL1MvTm9y bWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTA4IDAgb2JqDTw8L0EgMTkyMyAwIFIvSyA2MS9QIDE2 MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTA5IDAgb2JqDTw8L0EgMTkyMiAw IFIvSyA2Mi9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTEwIDAgb2Jq DTw8L0EgMTkyMSAwIFIvSyA2My9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9i ag0xOTExIDAgb2JqDTw8L0EgMTkyMCAwIFIvSyA2NC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xOTEyIDAgb2JqDTw8L0EgMTkxOSAwIFIvSyA2NS9QIDE2MzggMCBSL1Mv Tm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTEzIDAgb2JqDTw8L0EgMTkxOCAwIFIvSyA2Ni9Q IDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTE0IDAgb2JqDTw8L0EgMTkx NyAwIFIvSyA2Ny9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTE1IDAg b2JqDTw8L0EgMTkxNiAwIFIvSyA2OC9QIDE2MzggMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVu ZG9iag0xOTE2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTE3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0xOTE4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTE5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0x OTIwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTIxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTIy IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTIzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTI0IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xOTI1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTI2IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xOTI3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTI4IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xOTI5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTMwIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xOTMxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTMyIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xOTMzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTM0IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTE5MzUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTkzNiAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xOTM3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE5MzggMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMTkzOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTQwIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTE5NDEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTk0MiAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0xOTQzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE5NDQgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAyNzUuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0xOTQ1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE5NDYgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMTk0NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTQ4IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTE5NDkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTk1MCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0xOTUxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE5NTIgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNMTk1MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTU0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTE5NTUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTk1NiAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xOTU3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE5NTggMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTk1OSAwIG9iag08PC9BIDE5NjQgMCBSL0tbNSA2IDcgOF0v UCAxNjM3IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk2MCAwIG9iag08PC9BIDE5 NjMgMCBSL0sgOS9QIDE2MzcgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTYxIDAg b2JqDTw8L0EgMTk2MiAwIFIvSyAxMC9QIDE2MzcgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVu ZG9iag0xOTYyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xOTYzIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0xOTY0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTE5NjUgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTE5NjYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTk2NyAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMTk2OCAwIG9iag08PC9BIDIwNDMgMCBSL0sgMTA5L1AgMTk1IDAgUi9TL05vcm1hbC9Q ZyA0NSAwIFI+Pg1lbmRvYmoNMTk2OSAwIG9iag08PC9BIDIwNDIgMCBSL0sgMTEwL1AgMTk1IDAg Ui9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk3MCAwIG9iag08PC9BIDIwNDEgMCBSL0sg MTExL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk3MSAwIG9iag08PC9B IDIwNDAgMCBSL0sgMTEyL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk3 MiAwIG9iag08PC9BIDIwMzkgMCBSL0sgMTEzL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+ Pg1lbmRvYmoNMTk3MyAwIG9iag08PC9BIDIwMzggMCBSL0sgMTE0L1AgMTk1IDAgUi9TL05vcm1h bC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk3NCAwIG9iag08PC9BIDIwMzcgMCBSL0sgMTE1L1AgMTk1 IDAgUi9TL0RlZmF1bHQvUGcgNDUgMCBSPj4NZW5kb2JqDTE5NzUgMCBvYmoNPDwvQSAyMDM2IDAg Ui9LIDExNi9QIDE5NSAwIFIvUy9EZWZhdWx0L1BnIDQ1IDAgUj4+DWVuZG9iag0xOTc2IDAgb2Jq DTw8L0EgMjAzNSAwIFIvSyAxMTcvUCAxOTUgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9i ag0xOTc3IDAgb2JqDTw8L0EgMjAzNCAwIFIvSyAxMTgvUCAxOTUgMCBSL1MvTm9ybWFsL1BnIDQ1 IDAgUj4+DWVuZG9iag0xOTc4IDAgb2JqDTw8L0EgMjAzMyAwIFIvSyAxMTkvUCAxOTUgMCBSL1Mv Tm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTc5IDAgb2JqDTw8L0EgMjAzMiAwIFIvSyAxMjAv UCAxOTUgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTgwIDAgb2JqDTw8L0EgMjAz MSAwIFIvSyAxMjEvUCAxOTUgMCBSL1MvTm9ybWFsL1BnIDQ1IDAgUj4+DWVuZG9iag0xOTgxIDAg b2JqDTw8L0EgMjAzMCAwIFIvSyAxMjIvUCAxOTUgMCBSL1MvRGVmYXVsdC9QZyA0NSAwIFI+Pg1l bmRvYmoNMTk4MiAwIG9iag08PC9BIDIwMjkgMCBSL0sgMTIzL1AgMTk1IDAgUi9TL05vcm1hbC9Q ZyA0NSAwIFI+Pg1lbmRvYmoNMTk4MyAwIG9iag08PC9BIDIwMjggMCBSL0sgMTI0L1AgMTk1IDAg Ui9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk4NCAwIG9iag08PC9BIDIwMjcgMCBSL0sg MTI1L1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk4NSAwIG9iag08PC9B IDIwMjYgMCBSL0sgMTI2L1AgMTk1IDAgUi9TL3ZlcmRhZGEvUGcgNDUgMCBSPj4NZW5kb2JqDTE5 ODYgMCBvYmoNPDwvQSAyMDI1IDAgUi9LIDEyNy9QIDE5NSAwIFIvUy92ZXJkYWRhL1BnIDQ1IDAg Uj4+DWVuZG9iag0xOTg3IDAgb2JqDTw8L0EgMjAyNCAwIFIvSyAxMjgvUCAxOTUgMCBSL1MvRGVm YXVsdC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk4OCAwIG9iag08PC9BIDIwMjMgMCBSL0sgMTI5L1Ag MTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk4OSAwIG9iag08PC9BIDIwMjIg MCBSL0sgMTMwL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk5MCAwIG9i ag08PC9BIDIwMjEgMCBSL0sgMTMxL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRv YmoNMTk5MSAwIG9iag08PC9BIDIwMjAgMCBSL0sgMTMyL1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0 NSAwIFI+Pg1lbmRvYmoNMTk5MiAwIG9iag08PC9BIDIwMTkgMCBSL0sgMTMzL1AgMTk1IDAgUi9T L05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk5MyAwIG9iag08PC9BIDIwMTggMCBSL0sgMTM0 L1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk5NCAwIG9iag08PC9BIDIw MTcgMCBSL0sgMTM3L1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk5NSAw IG9iag08PC9BIDIwMTYgMCBSL0sgMTM4L1AgMTk1IDAgUi9TL0RlZmF1bHQvUGcgNDUgMCBSPj4N ZW5kb2JqDTE5OTYgMCBvYmoNPDwvQSAyMDE1IDAgUi9LIDEzOS9QIDE5NSAwIFIvUy9EZWZhdWx0 L1BnIDQ1IDAgUj4+DWVuZG9iag0xOTk3IDAgb2JqDTw8L0EgMjAxNCAwIFIvSyAxNDAvUCAxOTUg MCBSL1MvRGVmYXVsdC9QZyA0NSAwIFI+Pg1lbmRvYmoNMTk5OCAwIG9iag08PC9BIDIwMTMgMCBS L0sgMTQxL1AgMTk1IDAgUi9TL0RlZmF1bHQvUGcgNDUgMCBSPj4NZW5kb2JqDTE5OTkgMCBvYmoN PDwvQSAyMDEyIDAgUi9LIDE0Mi9QIDE5NSAwIFIvUy9EZWZhdWx0L1BnIDQ1IDAgUj4+DWVuZG9i ag0yMDAwIDAgb2JqDTw8L0EgMjAxMSAwIFIvSyAxNDMvUCAxOTUgMCBSL1MvRGVmYXVsdC9QZyA0 NSAwIFI+Pg1lbmRvYmoNMjAwMSAwIG9iag08PC9BIDIwMTAgMCBSL0sgMTQ0L1AgMTk1IDAgUi9T L0RlZmF1bHQvUGcgNDUgMCBSPj4NZW5kb2JqDTIwMDIgMCBvYmoNPDwvQSAyMDA5IDAgUi9LIDE0 NS9QIDE5NSAwIFIvUy9EZWZhdWx0L1BnIDQ1IDAgUj4+DWVuZG9iag0yMDAzIDAgb2JqDTw8L0Eg MjAwOCAwIFIvSyAxNDYvUCAxOTUgMCBSL1MvRGVmYXVsdC9QZyA0NSAwIFI+Pg1lbmRvYmoNMjAw NCAwIG9iag08PC9BIDIwMDcgMCBSL0sgMTQ3L1AgMTk1IDAgUi9TL05vcm1hbC9QZyA0NSAwIFI+ Pg1lbmRvYmoNMjAwNSAwIG9iag08PC9BIDIwMDYgMCBSL0sgMTQ4L1AgMTk1IDAgUi9TL05vcm1h bC9QZyA0NSAwIFI+Pg1lbmRvYmoNMjAwNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yMDA3IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMDkgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTIwMTAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMTEgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTIwMTIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMTMgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTIwMTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMTUgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTIwMTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMTcgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTIwMTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMTkgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTIwMjAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMjEgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTIwMjIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMjMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIw MjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMjUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMjYg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMjcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMjggMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTIwMjkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMzAgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTIwMzEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMzIgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTIwMzMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwMzQgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtNDguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDQ4LjA+Pg1lbmRvYmoNMjAzNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IC00OC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgNDguMD4+DWVuZG9iag0yMDM2IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0yMDM3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yMDM4IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0yMDM5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yMDQwIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0yMDQxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xNS4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMTUuMD4+DWVuZG9iag0yMDQyIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTIwNDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwNDQgMCBvYmoNPDwvQ291 bnQgNy9UeXBlL1BhZ2VzL0tpZHNbMjA0OSAwIFIgMSAwIFIgMTUgMCBSIDI4IDAgUiA0NSAwIFIg NjIgMCBSIDc4IDAgUl0+Pg1lbmRvYmoNMjA0NSAwIG9iag08PC9TdWJ0eXBlL1hNTC9MZW5ndGgg MzUwMC9UeXBlL01ldGFkYXRhPj5zdHJlYW0NCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVN ME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0 YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMC1jMzE2IDQ0LjI1MzkyMSwgU3VuIE9jdCAw MSAyMDA2IDE3OjE0OjM5Ij4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9y Zy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6 YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x LjAvIj4KICAgICAgICAgPHhhcDpNb2RpZnlEYXRlPjIwMDktMDUtMDRUMTE6NDA6NDUrMDg6MDA8 L3hhcDpNb2RpZnlEYXRlPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAwOS0wNS0wNFQxMTo0 MDo0NSswODowMDwveGFwOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4YXA6TWV0YWRhdGFEYXRlPjIw MDktMDUtMDRUMTE6NDA6NDUrMDg6MDA8L3hhcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4YXA6 Q3JlYXRvclRvb2w+QWRvYmUgQWNyb2JhdCA4LjEgQ29tYmluZSBGaWxlczwveGFwOkNyZWF0b3JU b29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6 YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50 cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4K ICAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAg ICA8cmRmOmxpPmFteWhlPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAg PC9kYzpjcmVhdG9yPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwTU09Imh0dHA6Ly9ucy5hZG9i ZS5jb20veGFwLzEuMC9tbS8iPgogICAgICAgICA8eGFwTU06RG9jdW1lbnRJRD51dWlkOjYwZTM2 MWE3LTAwMDAtNGJlMC04NDA4LTk3YzJlODQ1YWNhNzwveGFwTU06RG9jdW1lbnRJRD4KICAgICAg ICAgPHhhcE1NOkluc3RhbmNlSUQ+dXVpZDo0NmFmNDdiMS04ZDdkLTRkMTQtOTk1OS02OTg4ZGIy MzAwNzI8L3hhcE1NOkluc3RhbmNlSUQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8 cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6 Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFjcm9iYXQg RGlzdGlsbGVyIDguMS4wIChXaW5kb3dzKTwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNj cmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+DQplbmRz dHJlYW0NZW5kb2JqDTIwNDYgMCBvYmoNPDwvQ3JlYXRpb25EYXRlKEQ6MjAwOTA1MDQxMTQwNDUr MDgnMDAnKS9BdXRob3IoYW15aGUpL0NyZWF0b3IoQWRvYmUgQWNyb2JhdCA4LjEgQ29tYmluZSBG aWxlcykvUHJvZHVjZXIoQWNyb2JhdCBEaXN0aWxsZXIgOC4xLjAgXChXaW5kb3dzXCkpL01vZERh dGUoRDoyMDA5MDUwNDExNDA0NSswOCcwMCcpPj4NZW5kb2JqDXhyZWYNCjAgMjA0Nw0KMDAwMDAw MDAwMCA2NTUzNSBmDQowMDAwMDUzMjQ3IDAwMDAwIG4NCjAwMDAwNTM2MDcgMDAwMDAgbg0KMDAw MDA1MzY3MyAwMDAwMCBuDQowMDAwMDU0OTExIDAwMDAwIG4NCjAwMDAwNTU5ODggMDAwMDAgbg0K MDAwMDA1NzUzMCAwMDAwMCBuDQowMDAwMDU4OTc2IDAwMDAwIG4NCjAwMDAwNjA0MzggMDAwMDAg bg0KMDAwMDA2MTY3NyAwMDAwMCBuDQowMDAwMDYzMTI5IDAwMDAwIG4NCjAwMDAwNjQ0NjIgMDAw MDAgbg0KMDAwMDA2NDc0NyAwMDAwMCBuDQowMDAwMDY1MDMyIDAwMDAwIG4NCjAwMDAwNjUzMTYg MDAwMDAgbg0KMDAwMDA2NTYwNSAwMDAwMCBuDQowMDAwMDY1OTQ3IDAwMDAwIG4NCjAwMDAwNjYw MjEgMDAwMDAgbg0KMDAwMDA2NzIyNCAwMDAwMCBuDQowMDAwMDY4NDM0IDAwMDAwIG4NCjAwMDAw Njk1OTIgMDAwMDAgbg0KMDAwMDA3MTEwMyAwMDAwMCBuDQowMDAwMDcyNzE2IDAwMDAwIG4NCjAw MDAwNzQyNTQgMDAwMDAgbg0KMDAwMDA3NTU1MSAwMDAwMCBuDQowMDAwMDc2ODA3IDAwMDAwIG4N CjAwMDAwNzcwOTIgMDAwMDAgbg0KMDAwMDA3NzM3NyAwMDAwMCBuDQowMDAwMDc3NjYxIDAwMDAw IG4NCjAwMDAwNzgwODggMDAwMDAgbg0KMDAwMDA3ODE2MiAwMDAwMCBuDQowMDAwMDc4Nzc3IDAw MDAwIG4NCjAwMDAwNzk0NzIgMDAwMDAgbg0KMDAwMDA4MDEzMSAwMDAwMCBuDQowMDAwMDgwNjIx IDAwMDAwIG4NCjAwMDAwODEyMzcgMDAwMDAgbg0KMDAwMDA4MjAxOSAwMDAwMCBuDQowMDAwMDgy Njg0IDAwMDAwIG4NCjAwMDAwODMzMTIgMDAwMDAgbg0KMDAwMDA4MzU5NyAwMDAwMCBuDQowMDAw MDg1MzMzIDAwMDAwIG4NCjAwMDAwODU2MjAgMDAwMDAgbg0KMDAwMDA5MzIxMCAwMDAwMCBuDQow MDAwMDkzNDYzIDAwMDAwIG4NCjAwMDAwOTM2NzEgMDAwMDAgbg0KMDAwMDA5Mzk1OCAwMDAwMCBu DQowMDAwMDk0MzY1IDAwMDAwIG4NCjAwMDAwOTQzOTEgMDAwMDAgbg0KMDAwMDA5NDQ2NSAwMDAw MCBuDQowMDAwMDk1NDk3IDAwMDAwIG4NCjAwMDAwOTY0OTIgMDAwMDAgbg0KMDAwMDA5NzMyMyAw MDAwMCBuDQowMDAwMDk4NDUzIDAwMDAwIG4NCjAwMDAwOTk1MDYgMDAwMDAgbg0KMDAwMDEwMDg0 NSAwMDAwMCBuDQowMDAwMTAxOTczIDAwMDAwIG4NCjAwMDAxMDI5NDAgMDAwMDAgbg0KMDAwMDEw MzIyNSAwMDAwMCBuDQowMDAwMTAzNTEwIDAwMDAwIG4NCjAwMDAxMDU4NzUgMDAwMDAgbg0KMDAw MDEwNjE5MyAwMDAwMCBuDQowMDAwMTA2NDgyIDAwMDAwIG4NCjAwMDAxMDY3NjkgMDAwMDAgbg0K MDAwMDEwNzE2MSAwMDAwMCBuDQowMDAwMTA3MjM1IDAwMDAwIG4NCjAwMDAxMDgxMTAgMDAwMDAg bg0KMDAwMDEwODk3NCAwMDAwMCBuDQowMDAwMTEwMTgzIDAwMDAwIG4NCjAwMDAxMTExNDAgMDAw MDAgbg0KMDAwMDExMjA2NiAwMDAwMCBuDQowMDAwMTEzMTg4IDAwMDAwIG4NCjAwMDAxMTQwODIg MDAwMDAgbg0KMDAwMDExNDk3NSAwMDAwMCBuDQowMDAwMTE1MjAwIDAwMDAwIG4NCjAwMDAxMTU0 ODUgMDAwMDAgbg0KMDAwMDExNTc3MCAwMDAwMCBuDQowMDAwMTE2MDg5IDAwMDAwIG4NCjAwMDAx MTg1MTkgMDAwMDAgbg0KMDAwMDExODgwNiAwMDAwMCBuDQowMDAwMTE4OTYwIDAwMDAwIG4NCjAw MDAxMTkxNDIgMDAwMDAgbg0KMDAwMDE3MjkyOCAwMDAwMCBuDQowMDAwMTcyOTY1IDAwMDAwIG4N CjAwMDAxODI0ODAgMDAwMDAgbg0KMDAwMDE4MjcwOCAwMDAwMCBuDQowMDAwMTgyOTU3IDAwMDAw IG4NCjAwMDAxODMyMDAgMDAwMDAgbg0KMDAwMDE4MzQxMCAwMDAwMCBuDQowMDAwMjQ2NTUxIDAw MDAwIG4NCjAwMDAyNDY4MDEgMDAwMDAgbg0KMDAwMDI0NzMyNiAwMDAwMCBuDQowMDAwMjUyMTMz IDAwMDAwIG4NCjAwMDAyNTIyNTYgMDAwMDAgbg0KMDAwMDI1MjM4NyAwMDAwMCBuDQowMDAwMjUy NTE2IDAwMDAwIG4NCjAwMDAyNTI2NTMgMDAwMDAgbg0KMDAwMDI1Mjg5OCAwMDAwMCBuDQowMDAw MjUzMTAwIDAwMDAwIG4NCjAwMDAyNTMzNDAgMDAwMDAgbg0KMDAwMDI1MzU1NSAwMDAwMCBuDQow MDAwMjU2OTIwIDAwMDAwIG4NCjAwMDAyNTcxNjcgMDAwMDAgbg0KMDAwMDI1NzM3NCAwMDAwMCBu DQowMDAwMjU3NjIyIDAwMDAwIG4NCjAwMDAyNTgxMjEgMDAwMDAgbg0KMDAwMDI4NTM3MyAwMDAw MCBuDQowMDAwMjg1NjIzIDAwMDAwIG4NCjAwMDAyODU4MjkgMDAwMDAgbg0KMDAwMDI5MTQ2OSAw MDAwMCBuDQowMDAwMzAyMDE5IDAwMDAwIG4NCjAwMDAzMDIxODAgMDAwMDAgbg0KMDAwMDMwMjMx MyAwMDAwMCBuDQowMDAwMzAyNDUxIDAwMDAwIG4NCjAwMDAzMDI1ODEgMDAwMDAgbg0KMDAwMDMw MjcxNCAwMDAwMCBuDQowMDAwMzAzMjE1IDAwMDAwIG4NCjAwMDAzMDMzMzkgMDAwMDAgbg0KMDAw MDMwMzg1MyAwMDAwMCBuDQowMDAwMzAzOTg0IDAwMDAwIG4NCjAwMDAzMDQyMjQgMDAwMDAgbg0K MDAwMDMwNDU3MSAwMDAwMCBuDQowMDAwNDAzNTkzIDAwMDAwIG4NCjAwMDA0MDM3MjcgMDAwMDAg bg0KMDAwMDQwMzg2MyAwMDAwMCBuDQowMDAwNDAzOTk2IDAwMDAwIG4NCjAwMDA0MDQyNTQgMDAw MDAgbg0KMDAwMDQwNDY4MCAwMDAwMCBuDQowMDAwNDA1MDY4IDAwMDAwIG4NCjAwMDA0MDUzMzYg MDAwMDAgbg0KMDAwMDQwNTQ5NyAwMDAwMCBuDQowMDAwNDA1NjMwIDAwMDAwIG4NCjAwMDA0MDU3 NjAgMDAwMDAgbg0KMDAwMDQwNTg4NCAwMDAwMCBuDQowMDAwNDA2MDQwIDAwMDAwIG4NCjAwMDA0 MDYxMjIgMDAwMDAgbg0KMDAwMDQwNjMzMSAwMDAwMCBuDQowMDAwNDA2NTg0IDAwMDAwIG4NCjAw MDA0MTEzMzcgMDAwMDAgbg0KMDAwMDQxMTQ2OCAwMDAwMCBuDQowMDAwNDExNjA2IDAwMDAwIG4N CjAwMDA0MTE3MzggMDAwMDAgbg0KMDAwMDQxMTg3NCAwMDAwMCBuDQowMDAwNDEyMDA1IDAwMDAw IG4NCjAwMDA0MTIxMjkgMDAwMDAgbg0KMDAwMDQxMjI1OSAwMDAwMCBuDQowMDAwNDEyMzk3IDAw MDAwIG4NCjAwMDA0MTI1MzMgMDAwMDAgbg0KMDAwMDQxMjkyMyAwMDAwMCBuDQowMDAwNDEzMTk3 IDAwMDAwIG4NCjAwMDA0MTMzODMgMDAwMDAgbg0KMDAwMDQxMzU0NCAwMDAwMCBuDQowMDAwNDEz Njc3IDAwMDAwIG4NCjAwMDA0MTQxMjAgMDAwMDAgbg0KMDAwMDQxNDYzMCAwMDAwMCBuDQowMDAw NDE1MDMwIDAwMDAwIG4NCjAwMDA0MTUyNTkgMDAwMDAgbg0KMDAwMDQxNTMxNiAwMDAwMCBuDQow MDAwNDE1NDg2IDAwMDAwIG4NCjAwMDA0MTU1ODkgMDAwMDAgbg0KMDAwMDQxNTYzNyAwMDAwMCBu DQowMDAwNDE1NzMyIDAwMDAwIG4NCjAwMDA0MTU3ODIgMDAwMDAgbg0KMDAwMDQxNTg3NCAwMDAw MCBuDQowMDAwNDE1OTIyIDAwMDAwIG4NCjAwMDA0MTYwMjcgMDAwMDAgbg0KMDAwMDQxNjA3NSAw MDAwMCBuDQowMDAwNDE2MTc5IDAwMDAwIG4NCjAwMDA0MTYyMjcgMDAwMDAgbg0KMDAwMDQxNjMz MiAwMDAwMCBuDQowMDAwNDE2MzgwIDAwMDAwIG4NCjAwMDA0MTY0ODUgMDAwMDAgbg0KMDAwMDQx NjUzMiAwMDAwMCBuDQowMDAwNDE2NTgyIDAwMDAwIG4NCjAwMDA0MTY3MDYgMDAwMDAgbg0KMDAw MDQxNjc2OCAwMDAwMCBuDQowMDAwNDI0MjI5IDAwMDAwIG4NCjAwMDA0MjQ1NzIgMDAwMDAgbg0K MDAwMDQyNDgzNCAwMDAwMCBuDQowMDAwNDI0OTc2IDAwMDAwIG4NCjAwMDA0MjUxMTYgMDAwMDAg bg0KMDAwMDQyNTI1OCAwMDAwMCBuDQowMDAwNDI1NDAwIDAwMDAwIG4NCjAwMDA0MjU1NDIgMDAw MDAgbg0KMDAwMDQyNTY4NCAwMDAwMCBuDQowMDAwNDI1ODI0IDAwMDAwIG4NCjAwMDA0MjU5NjQg MDAwMDAgbg0KMDAwMDQyNjEwNCAwMDAwMCBuDQowMDAwNDI2MjQ2IDAwMDAwIG4NCjAwMDA0MjYz MzggMDAwMDAgbg0KMDAwMDQyNjM2NSAwMDAwMCBuDQowMDAwNDI2NDE4IDAwMDAwIG4NCjAwMDA0 MjY0OTcgMDAwMDAgbg0KMDAwMDQyNjcyNCAwMDAwMCBuDQowMDAwNDI4MzQ4IDAwMDAwIG4NCjAw MDA0Mjg0MjQgMDAwMDAgbg0KMDAwMDQyODU2NCAwMDAwMCBuDQowMDAwNDI4OTU5IDAwMDAwIG4N CjAwMDA0MjkyMzQgMDAwMDAgbg0KMDAwMDQyOTI4MyAwMDAwMCBuDQowMDAwNDI5MzczIDAwMDAw IG4NCjAwMDA0Mjk0NTIgMDAwMDAgbg0KMDAwMDQyOTY3MiAwMDAwMCBuDQowMDAwNDMxMjAxIDAw MDAwIG4NCjAwMDA0MzEyNTEgMDAwMDAgbg0KMDAwMDQzMTMwMSAwMDAwMCBuDQowMDAwNDMxMzUw IDAwMDAwIG4NCjAwMDA0MzEzOTkgMDAwMDAgbg0KMDAwMDQzMTQ0OCAwMDAwMCBuDQowMDAwNDMx NjU4IDAwMDAwIG4NCjAwMDA0MzE3NzYgMDAwMDAgbg0KMDAwMDQzMTg3NiAwMDAwMCBuDQowMDAw NDMxOTQ1IDAwMDAwIG4NCjAwMDA0MzIzNjYgMDAwMDAgbg0KMDAwMDQzMjY2NyAwMDAwMCBuDQow MDAwNDMyNzE5IDAwMDAwIG4NCjAwMDA0MzI3NzEgMDAwMDAgbg0KMDAwMDQzMjgyMyAwMDAwMCBu DQowMDAwNDMyODc1IDAwMDAwIG4NCjAwMDA0MzI5MjcgMDAwMDAgbg0KMDAwMDQzMjk3OSAwMDAw MCBuDQowMDAwNDMzMTI4IDAwMDAwIG4NCjAwMDA0MzMxODAgMDAwMDAgbg0KMDAwMDQzMzIzMiAw MDAwMCBuDQowMDAwNDMzMjg0IDAwMDAwIG4NCjAwMDA0MzMzMzYgMDAwMDAgbg0KMDAwMDQzMzM4 OCAwMDAwMCBuDQowMDAwNDMzNDk3IDAwMDAwIG4NCjAwMDA0MzM1NjEgMDAwMDAgbg0KMDAwMDQz MzYyNSAwMDAwMCBuDQowMDAwNDMzNjkxIDAwMDAwIG4NCjAwMDA0MzM4MDAgMDAwMDAgbg0KMDAw MDQzMzkwOSAwMDAwMCBuDQowMDAwNDM0MDE2IDAwMDAwIG4NCjAwMDA0MzQwOTUgMDAwMDAgbg0K MDAwMDQzNDE2MyAwMDAwMCBuDQowMDAwNDM0MjMxIDAwMDAwIG4NCjAwMDA0MzQyOTkgMDAwMDAg bg0KMDAwMDQzNDM2NyAwMDAwMCBuDQowMDAwNDM0NDM1IDAwMDAwIG4NCjAwMDA0MzQ1MDMgMDAw MDAgbg0KMDAwMDQzNDU4MiAwMDAwMCBuDQowMDAwNDM0NzI0IDAwMDAwIG4NCjAwMDA0MzQ4NjQg MDAwMDAgbg0KMDAwMDQzNTAwNCAwMDAwMCBuDQowMDAwNDM1MTQ0IDAwMDAwIG4NCjAwMDA0MzUy ODQgMDAwMDAgbg0KMDAwMDQzNTQyNCAwMDAwMCBuDQowMDAwNDM1NTY0IDAwMDAwIG4NCjAwMDA0 MzU3MDYgMDAwMDAgbg0KMDAwMDQzNTc5NCAwMDAwMCBuDQowMDAwNDM1OTM2IDAwMDAwIG4NCjAw MDA0MzYwMDggMDAwMDAgbg0KMDAwMDQzNjA4NiAwMDAwMCBuDQowMDAwNDM2MTY1IDAwMDAwIG4N CjAwMDA0MzYzMDcgMDAwMDAgbg0KMDAwMDQzNjM4NiAwMDAwMCBuDQowMDAwNDM2NTI4IDAwMDAw IG4NCjAwMDA0MzY2MTEgMDAwMDAgbg0KMDAwMDQzNjc1MyAwMDAwMCBuDQowMDAwNDM2ODMyIDAw MDAwIG4NCjAwMDA0MzY5NzQgMDAwMDAgbg0KMDAwMDQzNzA1MyAwMDAwMCBuDQowMDAwNDM3MTMy IDAwMDAwIG4NCjAwMDA0MzcyMTkgMDAwMDAgbg0KMDAwMDQzNzI4NyAwMDAwMCBuDQowMDAwNDM3 MzU1IDAwMDAwIG4NCjAwMDA0Mzc0MjMgMDAwMDAgbg0KMDAwMDQzNzQ5MSAwMDAwMCBuDQowMDAw NDM3NTcwIDAwMDAwIG4NCjAwMDA0Mzc2NDkgMDAwMDAgbg0KMDAwMDQzNzcyOCAwMDAwMCBuDQow MDAwNDM3Nzk2IDAwMDAwIG4NCjAwMDA0Mzc4NjQgMDAwMDAgbg0KMDAwMDQzNzk0MyAwMDAwMCBu DQowMDAwNDM4MDg1IDAwMDAwIG4NCjAwMDA0MzgyMjUgMDAwMDAgbg0KMDAwMDQzODM2NSAwMDAw MCBuDQowMDAwNDM4NTA1IDAwMDAwIG4NCjAwMDA0Mzg2NDUgMDAwMDAgbg0KMDAwMDQzODc4NSAw MDAwMCBuDQowMDAwNDM4OTI1IDAwMDAwIG4NCjAwMDA0MzkwNjUgMDAwMDAgbg0KMDAwMDQzOTIw NSAwMDAwMCBuDQowMDAwNDM5MzQ1IDAwMDAwIG4NCjAwMDA0Mzk0MTEgMDAwMDAgbg0KMDAwMDQz OTQ3NyAwMDAwMCBuDQowMDAwNDM5NTQzIDAwMDAwIG4NCjAwMDA0Mzk2MDkgMDAwMDAgbg0KMDAw MDQzOTY3NSAwMDAwMCBuDQowMDAwNDM5NzQxIDAwMDAwIG4NCjAwMDA0Mzk4ODQgMDAwMDAgbg0K MDAwMDQzOTkzOCAwMDAwMCBuDQowMDAwNDM5OTg4IDAwMDAwIG4NCjAwMDA0NDAwNTcgMDAwMDAg bg0KMDAwMDQ0MDIwMCAwMDAwMCBuDQowMDAwNDQwMjU0IDAwMDAwIG4NCjAwMDA0NDAzMDQgMDAw MDAgbg0KMDAwMDQ0MDM3MyAwMDAwMCBuDQowMDAwNDQwNTE2IDAwMDAwIG4NCjAwMDA0NDA1NzAg MDAwMDAgbg0KMDAwMDQ0MDYyMCAwMDAwMCBuDQowMDAwNDQwNjg5IDAwMDAwIG4NCjAwMDA0NDA4 MzIgMDAwMDAgbg0KMDAwMDQ0MDg4NiAwMDAwMCBuDQowMDAwNDQwOTM2IDAwMDAwIG4NCjAwMDA0 NDEwMDUgMDAwMDAgbg0KMDAwMDQ0MTE0OCAwMDAwMCBuDQowMDAwNDQxMjAyIDAwMDAwIG4NCjAw MDA0NDEyNTIgMDAwMDAgbg0KMDAwMDQ0MTMyMSAwMDAwMCBuDQowMDAwNDQxNDY0IDAwMDAwIG4N CjAwMDA0NDE1MTggMDAwMDAgbg0KMDAwMDQ0MTU2OCAwMDAwMCBuDQowMDAwNDQxNjM3IDAwMDAw IG4NCjAwMDA0NDE3NzkgMDAwMDAgbg0KMDAwMDQ0MTkyNCAwMDAwMCBuDQowMDAwNDQyMDA3IDAw MDAwIG4NCjAwMDA0NDIxNDkgMDAwMDAgbg0KMDAwMDQ0MjIyOCAwMDAwMCBuDQowMDAwNDQyMzY4 IDAwMDAwIG4NCjAwMDA0NDI0NDcgMDAwMDAgbg0KMDAwMDQ0MjU4OSAwMDAwMCBuDQowMDAwNDQy NjczIDAwMDAwIG4NCjAwMDA0NDI4MTUgMDAwMDAgbg0KMDAwMDQ0Mjg5NyAwMDAwMCBuDQowMDAw NDQzMDM5IDAwMDAwIG4NCjAwMDA0NDMxMTggMDAwMDAgbg0KMDAwMDQ0MzI2MCAwMDAwMCBuDQow MDAwNDQzMzI3IDAwMDAwIG4NCjAwMDA0NDMzOTQgMDAwMDAgbg0KMDAwMDQ0MzQ3MiAwMDAwMCBu DQowMDAwNDQzNTM1IDAwMDAwIG4NCjAwMDA0NDM2MTMgMDAwMDAgbg0KMDAwMDQ0MzY5MSAwMDAw MCBuDQowMDAwNDQzNzY5IDAwMDAwIG4NCjAwMDA0NDM4NDcgMDAwMDAgbg0KMDAwMDQ0MzkyNiAw MDAwMCBuDQowMDAwNDQ0MDA0IDAwMDAwIG4NCjAwMDA0NDQwODIgMDAwMDAgbg0KMDAwMDQ0NDE2 MCAwMDAwMCBuDQowMDAwNDQ0MjM4IDAwMDAwIG4NCjAwMDA0NDQzMTYgMDAwMDAgbg0KMDAwMDQ0 NDM5NCAwMDAwMCBuDQowMDAwNDQ0NDcyIDAwMDAwIG4NCjAwMDA0NDQ1NTAgMDAwMDAgbg0KMDAw MDQ0NDYyMSAwMDAwMCBuDQowMDAwNDQ0Njk5IDAwMDAwIG4NCjAwMDA0NDQ3NzggMDAwMDAgbg0K MDAwMDQ0NDg1NyAwMDAwMCBuDQowMDAwNDQ0OTM2IDAwMDAwIG4NCjAwMDA0NDUwMTUgMDAwMDAg bg0KMDAwMDQ0NTA5NCAwMDAwMCBuDQowMDAwNDQ1MTczIDAwMDAwIG4NCjAwMDA0NDUyNTIgMDAw MDAgbg0KMDAwMDQ0NTMyMCAwMDAwMCBuDQowMDAwNDQ1Mzk5IDAwMDAwIG4NCjAwMDA0NDU0Nzgg MDAwMDAgbg0KMDAwMDQ0NTU1NyAwMDAwMCBuDQowMDAwNDQ1NjM2IDAwMDAwIG4NCjAwMDA0NDU3 MTUgMDAwMDAgbg0KMDAwMDQ0NTg1NSAwMDAwMCBuDQowMDAwNDQ1OTk1IDAwMDAwIG4NCjAwMDA0 NDYxMzUgMDAwMDAgbg0KMDAwMDQ0NjI3NSAwMDAwMCBuDQowMDAwNDQ2NDE1IDAwMDAwIG4NCjAw MDA0NDY1NTUgMDAwMDAgbg0KMDAwMDQ0NjY5NSAwMDAwMCBuDQowMDAwNDQ2ODM1IDAwMDAwIG4N CjAwMDA0NDY5NzUgMDAwMDAgbg0KMDAwMDQ0NzExNSAwMDAwMCBuDQowMDAwNDQ3MjU1IDAwMDAw IG4NCjAwMDA0NDczOTUgMDAwMDAgbg0KMDAwMDQ0NzUzNSAwMDAwMCBuDQowMDAwNDQ3Njc1IDAw MDAwIG4NCjAwMDA0NDc3NDEgMDAwMDAgbg0KMDAwMDQ0NzgwNyAwMDAwMCBuDQowMDAwNDQ3ODcz IDAwMDAwIG4NCjAwMDA0NDc5MzkgMDAwMDAgbg0KMDAwMDQ0ODA4MiAwMDAwMCBuDQowMDAwNDQ4 MTM1IDAwMDAwIG4NCjAwMDA0NDgxODUgMDAwMDAgbg0KMDAwMDQ0ODI1MyAwMDAwMCBuDQowMDAw NDQ4Mzk2IDAwMDAwIG4NCjAwMDA0NDg0NDkgMDAwMDAgbg0KMDAwMDQ0ODQ5OSAwMDAwMCBuDQow MDAwNDQ4NTY3IDAwMDAwIG4NCjAwMDA0NDg3MTAgMDAwMDAgbg0KMDAwMDQ0ODc2MyAwMDAwMCBu DQowMDAwNDQ4ODEzIDAwMDAwIG4NCjAwMDA0NDg4ODEgMDAwMDAgbg0KMDAwMDQ0OTAyNCAwMDAw MCBuDQowMDAwNDQ5MDc3IDAwMDAwIG4NCjAwMDA0NDkxMjcgMDAwMDAgbg0KMDAwMDQ0OTE5NSAw MDAwMCBuDQowMDAwNDQ5MzM3IDAwMDAwIG4NCjAwMDA0NDk0ODIgMDAwMDAgbg0KMDAwMDQ0OTYy MiAwMDAwMCBuDQowMDAwNDQ5NzYyIDAwMDAwIG4NCjAwMDA0NDk5MDIgMDAwMDAgbg0KMDAwMDQ1 MDA0MiAwMDAwMCBuDQowMDAwNDUwMTgyIDAwMDAwIG4NCjAwMDA0NTAzMjIgMDAwMDAgbg0KMDAw MDQ1MDM4OCAwMDAwMCBuDQowMDAwNDUwNDU0IDAwMDAwIG4NCjAwMDA0NTA1MjAgMDAwMDAgbg0K MDAwMDQ1MDU4NiAwMDAwMCBuDQowMDAwNDUwNjUyIDAwMDAwIG4NCjAwMDA0NTA3OTUgMDAwMDAg bg0KMDAwMDQ1MDg0OCAwMDAwMCBuDQowMDAwNDUwODk4IDAwMDAwIG4NCjAwMDA0NTA5NjYgMDAw MDAgbg0KMDAwMDQ1MTEwOSAwMDAwMCBuDQowMDAwNDUxMTYyIDAwMDAwIG4NCjAwMDA0NTEyMTIg MDAwMDAgbg0KMDAwMDQ1MTI4MCAwMDAwMCBuDQowMDAwNDUxNDIzIDAwMDAwIG4NCjAwMDA0NTE0 NzYgMDAwMDAgbg0KMDAwMDQ1MTUyNiAwMDAwMCBuDQowMDAwNDUxNTk0IDAwMDAwIG4NCjAwMDA0 NTE3MzcgMDAwMDAgbg0KMDAwMDQ1MTc5MCAwMDAwMCBuDQowMDAwNDUxODQwIDAwMDAwIG4NCjAw MDA0NTE5MDggMDAwMDAgbg0KMDAwMDQ1MjA1MSAwMDAwMCBuDQowMDAwNDUyMTA0IDAwMDAwIG4N CjAwMDA0NTIxNTQgMDAwMDAgbg0KMDAwMDQ1MjIyMiAwMDAwMCBuDQowMDAwNDUyMzYyIDAwMDAw IG4NCjAwMDA0NTI1MDQgMDAwMDAgbg0KMDAwMDQ1MjY0NCAwMDAwMCBuDQowMDAwNDUyNzg1IDAw MDAwIG4NCjAwMDA0NTI4NTEgMDAwMDAgbg0KMDAwMDQ1MjkxNyAwMDAwMCBuDQowMDAwNDUyOTgz IDAwMDAwIG4NCjAwMDA0NTMxMjYgMDAwMDAgbg0KMDAwMDQ1MzE3OSAwMDAwMCBuDQowMDAwNDUz MjI5IDAwMDAwIG4NCjAwMDA0NTMyOTcgMDAwMDAgbg0KMDAwMDQ1MzQ0MCAwMDAwMCBuDQowMDAw NDUzNDkzIDAwMDAwIG4NCjAwMDA0NTM1NDMgMDAwMDAgbg0KMDAwMDQ1MzYxMSAwMDAwMCBuDQow MDAwNDUzNzU0IDAwMDAwIG4NCjAwMDA0NTM4MDcgMDAwMDAgbg0KMDAwMDQ1Mzg1NyAwMDAwMCBu DQowMDAwNDUzOTI1IDAwMDAwIG4NCjAwMDA0NTQwNjcgMDAwMDAgbg0KMDAwMDQ1NDIwNyAwMDAw MCBuDQowMDAwNDU0MzQ3IDAwMDAwIG4NCjAwMDA0NTQ0MjUgMDAwMDAgbg0KMDAwMDQ1NDUwMyAw MDAwMCBuDQowMDAwNDU0NTgxIDAwMDAwIG4NCjAwMDA0NTQ2NTkgMDAwMDAgbg0KMDAwMDQ1NDcz NyAwMDAwMCBuDQowMDAwNDU0ODE1IDAwMDAwIG4NCjAwMDA0NTQ4OTMgMDAwMDAgbg0KMDAwMDQ1 NDk3MSAwMDAwMCBuDQowMDAwNDU1MDQ5IDAwMDAwIG4NCjAwMDA0NTUxMjcgMDAwMDAgbg0KMDAw MDQ1NTIwNSAwMDAwMCBuDQowMDAwNDU1MjgzIDAwMDAwIG4NCjAwMDA0NTUzNjEgMDAwMDAgbg0K MDAwMDQ1NTQzOSAwMDAwMCBuDQowMDAwNDU1NTE3IDAwMDAwIG4NCjAwMDA0NTU1OTUgMDAwMDAg bg0KMDAwMDQ1NTY3MyAwMDAwMCBuDQowMDAwNDU1NzUxIDAwMDAwIG4NCjAwMDA0NTU4MjkgMDAw MDAgbg0KMDAwMDQ1NTkwNyAwMDAwMCBuDQowMDAwNDU1OTg1IDAwMDAwIG4NCjAwMDA0NTYwNjMg MDAwMDAgbg0KMDAwMDQ1NjE0MSAwMDAwMCBuDQowMDAwNDU2MjE5IDAwMDAwIG4NCjAwMDA0NTYy OTcgMDAwMDAgbg0KMDAwMDQ1NjM3NSAwMDAwMCBuDQowMDAwNDU2NDUzIDAwMDAwIG4NCjAwMDA0 NTY1MzEgMDAwMDAgbg0KMDAwMDQ1NjYwOSAwMDAwMCBuDQowMDAwNDU2Njg3IDAwMDAwIG4NCjAw MDA0NTY3NjUgMDAwMDAgbg0KMDAwMDQ1Njg0MyAwMDAwMCBuDQowMDAwNDU2OTIxIDAwMDAwIG4N CjAwMDA0NTY5OTkgMDAwMDAgbg0KMDAwMDQ1NzA3NyAwMDAwMCBuDQowMDAwNDU3MTU1IDAwMDAw IG4NCjAwMDA0NTcyMzMgMDAwMDAgbg0KMDAwMDQ1NzMxMSAwMDAwMCBuDQowMDAwNDU3Mzg5IDAw MDAwIG4NCjAwMDA0NTc0NjcgMDAwMDAgbg0KMDAwMDQ1NzU0NSAwMDAwMCBuDQowMDAwNDU3NjIz IDAwMDAwIG4NCjAwMDA0NTc3MDEgMDAwMDAgbg0KMDAwMDQ1Nzc3OSAwMDAwMCBuDQowMDAwNDU3 ODU3IDAwMDAwIG4NCjAwMDA0NTc5MzUgMDAwMDAgbg0KMDAwMDQ1ODAxMyAwMDAwMCBuDQowMDAw NDU4MTUzIDAwMDAwIG4NCjAwMDA0NTgyOTMgMDAwMDAgbg0KMDAwMDQ1ODQzMyAwMDAwMCBuDQow MDAwNDU4NTczIDAwMDAwIG4NCjAwMDA0NTg3MTMgMDAwMDAgbg0KMDAwMDQ1ODg1MyAwMDAwMCBu DQowMDAwNDU4OTkzIDAwMDAwIG4NCjAwMDA0NTkxMzMgMDAwMDAgbg0KMDAwMDQ1OTI3MyAwMDAw MCBuDQowMDAwNDU5NDEzIDAwMDAwIG4NCjAwMDA0NTk1NTMgMDAwMDAgbg0KMDAwMDQ1OTY5MyAw MDAwMCBuDQowMDAwNDU5ODMzIDAwMDAwIG4NCjAwMDA0NTk5NzMgMDAwMDAgbg0KMDAwMDQ2MDEx MyAwMDAwMCBuDQowMDAwNDYwMjUzIDAwMDAwIG4NCjAwMDA0NjAzOTMgMDAwMDAgbg0KMDAwMDQ2 MDUzNSAwMDAwMCBuDQowMDAwNDYwNjc3IDAwMDAwIG4NCjAwMDA0NjA4MTkgMDAwMDAgbg0KMDAw MDQ2MDk2MSAwMDAwMCBuDQowMDAwNDYxMTAzIDAwMDAwIG4NCjAwMDA0NjEyNDUgMDAwMDAgbg0K MDAwMDQ2MTM4NyAwMDAwMCBuDQowMDAwNDYxNTI5IDAwMDAwIG4NCjAwMDA0NjE2NzEgMDAwMDAg bg0KMDAwMDQ2MTgxMyAwMDAwMCBuDQowMDAwNDYxOTU1IDAwMDAwIG4NCjAwMDA0NjIwOTcgMDAw MDAgbg0KMDAwMDQ2MjI0MSAwMDAwMCBuDQowMDAwNDYyMzgzIDAwMDAwIG4NCjAwMDA0NjI1MjUg MDAwMDAgbg0KMDAwMDQ2MjY2NyAwMDAwMCBuDQowMDAwNDYyODA5IDAwMDAwIG4NCjAwMDA0NjI5 NTEgMDAwMDAgbg0KMDAwMDQ2MzA5MyAwMDAwMCBuDQowMDAwNDYzMjM1IDAwMDAwIG4NCjAwMDA0 NjMzNzcgMDAwMDAgbg0KMDAwMDQ2MzUxOSAwMDAwMCBuDQowMDAwNDYzNjYxIDAwMDAwIG4NCjAw MDA0NjM4MDMgMDAwMDAgbg0KMDAwMDQ2Mzk0NSAwMDAwMCBuDQowMDAwNDY0MDg3IDAwMDAwIG4N CjAwMDA0NjQyMjkgMDAwMDAgbg0KMDAwMDQ2NDM3MSAwMDAwMCBuDQowMDAwNDY0NTEzIDAwMDAw IG4NCjAwMDA0NjQ2NTUgMDAwMDAgbg0KMDAwMDQ2NDczOSAwMDAwMCBuDQowMDAwNDY0ODE2IDAw MDAwIG4NCjAwMDA0NjQ4OTQgMDAwMDAgbg0KMDAwMDQ2NTAzNyAwMDAwMCBuDQowMDAwNDY1MTgw IDAwMDAwIG4NCjAwMDA0NjUzMjIgMDAwMDAgbg0KMDAwMDQ2NTQ2NCAwMDAwMCBuDQowMDAwNDY1 NjA0IDAwMDAwIG4NCjAwMDA0NjU4MDYgMDAwMDAgbg0KMDAwMDQ2NTg4MiAwMDAwMCBuDQowMDAw NDY1OTQ3IDAwMDAwIG4NCjAwMDA0NjYwMTIgMDAwMDAgbg0KMDAwMDQ2NjA3NyAwMDAwMCBuDQow MDAwNDY2MTQyIDAwMDAwIG4NCjAwMDA0NjYyMDcgMDAwMDAgbg0KMDAwMDQ2NjI3MiAwMDAwMCBu DQowMDAwNDY2MzM3IDAwMDAwIG4NCjAwMDA0NjY0MDIgMDAwMDAgbg0KMDAwMDQ2NjQ2NyAwMDAw MCBuDQowMDAwNDY2NTY4IDAwMDAwIG4NCjAwMDA0NjY2MzcgMDAwMDAgbg0KMDAwMDQ2NjY5OCAw MDAwMCBuDQowMDAwNDY2NzY3IDAwMDAwIG4NCjAwMDA0NjY4MjggMDAwMDAgbg0KMDAwMDQ2Njky OSAwMDAwMCBuDQowMDAwNDY2OTk4IDAwMDAwIG4NCjAwMDA0NjcwNTAgMDAwMDAgbg0KMDAwMDQ2 NzEyNyAwMDAwMCBuDQowMDAwNDY3MTc5IDAwMDAwIG4NCjAwMDA0NjcyNDkgMDAwMDAgbg0KMDAw MDQ2NzM5MSAwMDAwMCBuDQowMDAwNDY3NDU3IDAwMDAwIG4NCjAwMDA0Njc1MzIgMDAwMDAgbg0K MDAwMDQ2NzU5OCAwMDAwMCBuDQowMDAwNDY3NjY4IDAwMDAwIG4NCjAwMDA0Njc4MTAgMDAwMDAg bg0KMDAwMDQ2NzkzNSAwMDAwMCBuDQowMDAwNDY4MjQwIDAwMDAwIG4NCjAwMDA0NjgzMTYgMDAw MDAgbg0KMDAwMDQ2ODM5MiAwMDAwMCBuDQowMDAwNDY4NTM0IDAwMDAwIG4NCjAwMDA0Njg2NzYg MDAwMDAgbg0KMDAwMDQ2ODkzNyAwMDAwMCBuDQowMDAwNDY5MDE0IDAwMDAwIG4NCjAwMDA0Njkx NTYgMDAwMDAgbg0KMDAwMDQ2OTIxNyAwMDAwMCBuDQowMDAwNDY5MzU5IDAwMDAwIG4NCjAwMDA0 Njk2MjAgMDAwMDAgbg0KMDAwMDQ2OTY5OCAwMDAwMCBuDQowMDAwNDY5NzY0IDAwMDAwIG4NCjAw MDA0Njk4MzAgMDAwMDAgbg0KMDAwMDQ2OTg5NiAwMDAwMCBuDQowMDAwNDcwMDM4IDAwMDAwIG4N CjAwMDA0NzAxODAgMDAwMDAgbg0KMDAwMDQ3MDMyMiAwMDAwMCBuDQowMDAwNDcwMzg4IDAwMDAw IG4NCjAwMDA0NzA0NTQgMDAwMDAgbg0KMDAwMDQ3MDUyMCAwMDAwMCBuDQowMDAwNDcwNTg2IDAw MDAwIG4NCjAwMDA0NzA2NTIgMDAwMDAgbg0KMDAwMDQ3MDcxOCAwMDAwMCBuDQowMDAwNDcwNzg0 IDAwMDAwIG4NCjAwMDA0NzA5MjQgMDAwMDAgbg0KMDAwMDQ3MTA2NCAwMDAwMCBuDQowMDAwNDcx MjA0IDAwMDAwIG4NCjAwMDA0NzEzNDQgMDAwMDAgbg0KMDAwMDQ3MTQ4NCAwMDAwMCBuDQowMDAw NDcxNjI0IDAwMDAwIG4NCjAwMDA0NzE3NjQgMDAwMDAgbg0KMDAwMDQ3MTgzMCAwMDAwMCBuDQow MDAwNDcxODk2IDAwMDAwIG4NCjAwMDA0NzIwMzggMDAwMDAgbg0KMDAwMDQ3MjE4MCAwMDAwMCBu DQowMDAwNDcyMjQ2IDAwMDAwIG4NCjAwMDA0NzIzMTIgMDAwMDAgbg0KMDAwMDQ3MjM3OCAwMDAw MCBuDQowMDAwNDcyNTIwIDAwMDAwIG4NCjAwMDA0NzI2NjIgMDAwMDAgbg0KMDAwMDQ3MjgwNCAw MDAwMCBuDQowMDAwNDcyODcxIDAwMDAwIG4NCjAwMDA0NzI5MzcgMDAwMDAgbg0KMDAwMDQ3MzA3 OSAwMDAwMCBuDQowMDAwNDczMjE5IDAwMDAwIG4NCjAwMDA0NzMyODUgMDAwMDAgbg0KMDAwMDQ3 MzQxMiAwMDAwMCBuDQowMDAwNDczNDc4IDAwMDAwIG4NCjAwMDA0NzM2MzAgMDAwMDAgbg0KMDAw MDQ3MzY5NiAwMDAwMCBuDQowMDAwNDczNzYyIDAwMDAwIG4NCjAwMDA0NzM4MjggMDAwMDAgbg0K MDAwMDQ3Mzg5NCAwMDAwMCBuDQowMDAwNDczOTYwIDAwMDAwIG4NCjAwMDA0NzQwMjYgMDAwMDAg bg0KMDAwMDQ3NDA5MiAwMDAwMCBuDQowMDAwNDc0MTU4IDAwMDAwIG4NCjAwMDA0NzQyMjQgMDAw MDAgbg0KMDAwMDQ3NDI5MCAwMDAwMCBuDQowMDAwNDc0MzU2IDAwMDAwIG4NCjAwMDA0NzQ1MDEg MDAwMDAgbg0KMDAwMDQ3NDU1NCAwMDAwMCBuDQowMDAwNDc0NjA0IDAwMDAwIG4NCjAwMDA0NzQ2 NzAgMDAwMDAgbg0KMDAwMDQ3NDgxNSAwMDAwMCBuDQowMDAwNDc0ODY4IDAwMDAwIG4NCjAwMDA0 NzQ5MTggMDAwMDAgbg0KMDAwMDQ3NDk4NCAwMDAwMCBuDQowMDAwNDc1MTI5IDAwMDAwIG4NCjAw MDA0NzUxODIgMDAwMDAgbg0KMDAwMDQ3NTIzMiAwMDAwMCBuDQowMDAwNDc1Mjk4IDAwMDAwIG4N CjAwMDA0NzU0NDMgMDAwMDAgbg0KMDAwMDQ3NTQ5NiAwMDAwMCBuDQowMDAwNDc1NTQ2IDAwMDAw IG4NCjAwMDA0NzU2MTIgMDAwMDAgbg0KMDAwMDQ3NTc1NyAwMDAwMCBuDQowMDAwNDc1ODEwIDAw MDAwIG4NCjAwMDA0NzU4NjAgMDAwMDAgbg0KMDAwMDQ3NTkyNiAwMDAwMCBuDQowMDAwNDc2MDcx IDAwMDAwIG4NCjAwMDA0NzYxMjQgMDAwMDAgbg0KMDAwMDQ3NjE3NCAwMDAwMCBuDQowMDAwNDc2 MjQwIDAwMDAwIG4NCjAwMDA0NzYzODUgMDAwMDAgbg0KMDAwMDQ3NjQzOCAwMDAwMCBuDQowMDAw NDc2NDg4IDAwMDAwIG4NCjAwMDA0NzY1NTQgMDAwMDAgbg0KMDAwMDQ3NjY5OSAwMDAwMCBuDQow MDAwNDc2NzUyIDAwMDAwIG4NCjAwMDA0NzY4MDIgMDAwMDAgbg0KMDAwMDQ3Njg2OCAwMDAwMCBu DQowMDAwNDc3MDEzIDAwMDAwIG4NCjAwMDA0NzcwNjYgMDAwMDAgbg0KMDAwMDQ3NzExNiAwMDAw MCBuDQowMDAwNDc3MTgyIDAwMDAwIG4NCjAwMDA0NzczMjcgMDAwMDAgbg0KMDAwMDQ3NzM4MCAw MDAwMCBuDQowMDAwNDc3NDMwIDAwMDAwIG4NCjAwMDA0Nzc0OTYgMDAwMDAgbg0KMDAwMDQ3NzY0 MSAwMDAwMCBuDQowMDAwNDc3Njk0IDAwMDAwIG4NCjAwMDA0Nzc3NDQgMDAwMDAgbg0KMDAwMDQ3 NzgxMCAwMDAwMCBuDQowMDAwNDc3OTUyIDAwMDAwIG4NCjAwMDA0NzgwMTggMDAwMDAgbg0KMDAw MDQ3ODA4NCAwMDAwMCBuDQowMDAwNDc4MTUwIDAwMDAwIG4NCjAwMDA0NzgyMTYgMDAwMDAgbg0K MDAwMDQ3ODI4MiAwMDAwMCBuDQowMDAwNDc4MzQ4IDAwMDAwIG4NCjAwMDA0Nzg0MTQgMDAwMDAg bg0KMDAwMDQ3ODU1NSAwMDAwMCBuDQowMDAwNDc4Njk2IDAwMDAwIG4NCjAwMDA0Nzg4MzcgMDAw MDAgbg0KMDAwMDQ3ODk3OCAwMDAwMCBuDQowMDAwNDc5MTE5IDAwMDAwIG4NCjAwMDA0NzkyNjAg MDAwMDAgbg0KMDAwMDQ3OTQwMSAwMDAwMCBuDQowMDAwNDc5NTQzIDAwMDAwIG4NCjAwMDA0Nzk2 ODUgMDAwMDAgbg0KMDAwMDQ3OTgyNyAwMDAwMCBuDQowMDAwNDc5OTY5IDAwMDAwIG4NCjAwMDA0 ODAxMTEgMDAwMDAgbg0KMDAwMDQ4MDI1MyAwMDAwMCBuDQowMDAwNDgwMzk1IDAwMDAwIG4NCjAw MDA0ODA1MzcgMDAwMDAgbg0KMDAwMDQ4MDY3OSAwMDAwMCBuDQowMDAwNDgwODIxIDAwMDAwIG4N CjAwMDA0ODEwMzEgMDAwMDAgbg0KMDAwMDQ4MTExOCAwMDAwMCBuDQowMDAwNDgxMTg0IDAwMDAw IG4NCjAwMDA0ODEyNjUgMDAwMDAgbg0KMDAwMDQ4MTY0NiAwMDAwMCBuDQowMDAwNDgxOTA3IDAw MDAwIG4NCjAwMDA0ODE5NTkgMDAwMDAgbg0KMDAwMDQ4MjAxMSAwMDAwMCBuDQowMDAwNDgyMDYz IDAwMDAwIG4NCjAwMDA0ODIxMTUgMDAwMDAgbg0KMDAwMDQ4MjE2NyAwMDAwMCBuDQowMDAwNDgy MjE5IDAwMDAwIG4NCjAwMDA0ODIzODQgMDAwMDAgbg0KMDAwMDQ4MjQzNiAwMDAwMCBuDQowMDAw NDgyNDg4IDAwMDAwIG4NCjAwMDA0ODI1NDAgMDAwMDAgbg0KMDAwMDQ4MjU5MiAwMDAwMCBuDQow MDAwNDgyNjQ0IDAwMDAwIG4NCjAwMDA0ODI3MzcgMDAwMDAgbg0KMDAwMDQ4MjgwMSAwMDAwMCBu DQowMDAwNDgyODY1IDAwMDAwIG4NCjAwMDA0ODI5MzEgMDAwMDAgbg0KMDAwMDQ4MzA0MCAwMDAw MCBuDQowMDAwNDgzMTQ5IDAwMDAwIG4NCjAwMDA0ODMyNTYgMDAwMDAgbg0KMDAwMDQ4MzMyOCAw MDAwMCBuDQowMDAwNDgzMzk2IDAwMDAwIG4NCjAwMDA0ODM0NjQgMDAwMDAgbg0KMDAwMDQ4MzUz MiAwMDAwMCBuDQowMDAwNDgzNjAwIDAwMDAwIG4NCjAwMDA0ODM2NjcgMDAwMDAgbg0KMDAwMDQ4 MzgwOSAwMDAwMCBuDQowMDAwNDgzOTQ5IDAwMDAwIG4NCjAwMDA0ODQwODkgMDAwMDAgbg0KMDAw MDQ4NDIyOSAwMDAwMCBuDQowMDAwNDg0MzY5IDAwMDAwIG4NCjAwMDA0ODQ1MTEgMDAwMDAgbg0K MDAwMDQ4NDU4NyAwMDAwMCBuDQowMDAwNDg0NzI5IDAwMDAwIG4NCjAwMDA0ODQ4MzEgMDAwMDAg bg0KMDAwMDQ4NDkwOSAwMDAwMCBuDQowMDAwNDg0OTc2IDAwMDAwIG4NCjAwMDA0ODUxMTggMDAw MDAgbg0KMDAwMDQ4NTE4OSAwMDAwMCBuDQowMDAwNDg1MzMxIDAwMDAwIG4NCjAwMDA0ODU0MDIg MDAwMDAgbg0KMDAwMDQ4NTU0NCAwMDAwMCBuDQowMDAwNDg1NjE1IDAwMDAwIG4NCjAwMDA0ODU3 NTcgMDAwMDAgbg0KMDAwMDQ4NTgyNCAwMDAwMCBuDQowMDAwNDg1ODkxIDAwMDAwIG4NCjAwMDA0 ODU5NzggMDAwMDAgbg0KMDAwMDQ4NjA0NSAwMDAwMCBuDQowMDAwNDg2MTEzIDAwMDAwIG4NCjAw MDA0ODYxODEgMDAwMDAgbg0KMDAwMDQ4NjI0OSAwMDAwMCBuDQowMDAwNDg2MzE2IDAwMDAwIG4N CjAwMDA0ODYzODQgMDAwMDAgbg0KMDAwMDQ4NjQ1NiAwMDAwMCBuDQowMDAwNDg2NTI0IDAwMDAw IG4NCjAwMDA0ODY1OTIgMDAwMDAgbg0KMDAwMDQ4NjY1OSAwMDAwMCBuDQowMDAwNDg2NzI3IDAw MDAwIG4NCjAwMDA0ODY3OTUgMDAwMDAgbg0KMDAwMDQ4NjkzNSAwMDAwMCBuDQowMDAwNDg3MDc1 IDAwMDAwIG4NCjAwMDA0ODcyMTUgMDAwMDAgbg0KMDAwMDQ4NzM1NSAwMDAwMCBuDQowMDAwNDg3 NDk1IDAwMDAwIG4NCjAwMDA0ODc2MzUgMDAwMDAgbg0KMDAwMDQ4Nzc3NSAwMDAwMCBuDQowMDAw NDg3OTE1IDAwMDAwIG4NCjAwMDA0ODgwNTUgMDAwMDAgbg0KMDAwMDQ4ODE5NSAwMDAwMCBuDQow MDAwNDg4MzM1IDAwMDAwIG4NCjAwMDA0ODg0NzUgMDAwMDAgbg0KMDAwMDQ4ODU0MSAwMDAwMCBu DQowMDAwNDg4NjA3IDAwMDAwIG4NCjAwMDA0ODg2NzMgMDAwMDAgbg0KMDAwMDQ4ODczOSAwMDAw MCBuDQowMDAwNDg4ODA1IDAwMDAwIG4NCjAwMDA0ODg4NzEgMDAwMDAgbg0KMDAwMDQ4OTAxNCAw MDAwMCBuDQowMDAwNDg5MDY4IDAwMDAwIG4NCjAwMDA0ODkxMTggMDAwMDAgbg0KMDAwMDQ4OTE3 NSAwMDAwMCBuDQowMDAwNDg5MzE4IDAwMDAwIG4NCjAwMDA0ODkzNzIgMDAwMDAgbg0KMDAwMDQ4 OTQyMiAwMDAwMCBuDQowMDAwNDg5NDc5IDAwMDAwIG4NCjAwMDA0ODk2MjIgMDAwMDAgbg0KMDAw MDQ4OTY3NiAwMDAwMCBuDQowMDAwNDg5NzI2IDAwMDAwIG4NCjAwMDA0ODk3ODMgMDAwMDAgbg0K MDAwMDQ4OTkyNiAwMDAwMCBuDQowMDAwNDg5OTgwIDAwMDAwIG4NCjAwMDA0OTAwMzAgMDAwMDAg bg0KMDAwMDQ5MDA4NyAwMDAwMCBuDQowMDAwNDkwMjMwIDAwMDAwIG4NCjAwMDA0OTAyODQgMDAw MDAgbg0KMDAwMDQ5MDMzNCAwMDAwMCBuDQowMDAwNDkwMzkxIDAwMDAwIG4NCjAwMDA0OTA1MzQg MDAwMDAgbg0KMDAwMDQ5MDU4OCAwMDAwMCBuDQowMDAwNDkwNjM4IDAwMDAwIG4NCjAwMDA0OTA2 OTUgMDAwMDAgbg0KMDAwMDQ5MDgzNSAwMDAwMCBuDQowMDAwNDkwOTgwIDAwMDAwIG4NCjAwMDA0 OTEwNDcgMDAwMDAgbg0KMDAwMDQ5MTE4OSAwMDAwMCBuDQowMDAwNDkxMjU2IDAwMDAwIG4NCjAw MDA0OTEzOTYgMDAwMDAgbg0KMDAwMDQ5MTQ2MyAwMDAwMCBuDQowMDAwNDkxNjA1IDAwMDAwIG4N CjAwMDA0OTE2ODAgMDAwMDAgbg0KMDAwMDQ5MTgyMiAwMDAwMCBuDQowMDAwNDkxODkyIDAwMDAw IG4NCjAwMDA0OTIwMzQgMDAwMDAgbg0KMDAwMDQ5MjEwMCAwMDAwMCBuDQowMDAwNDkyMjQyIDAw MDAwIG4NCjAwMDA0OTIzMDkgMDAwMDAgbg0KMDAwMDQ5MjM3NSAwMDAwMCBuDQowMDAwNDkyNDM4 IDAwMDAwIG4NCjAwMDA0OTI1MDQgMDAwMDAgbg0KMDAwMDQ5MjU3MCAwMDAwMCBuDQowMDAwNDky NjM2IDAwMDAwIG4NCjAwMDA0OTI3MTUgMDAwMDAgbg0KMDAwMDQ5Mjc4MSAwMDAwMCBuDQowMDAw NDkyODQ3IDAwMDAwIG4NCjAwMDA0OTI5MTMgMDAwMDAgbg0KMDAwMDQ5Mjk3OSAwMDAwMCBuDQow MDAwNDkzMDQ1IDAwMDAwIG4NCjAwMDA0OTMxMTEgMDAwMDAgbg0KMDAwMDQ5MzE3NyAwMDAwMCBu DQowMDAwNDkzMjQzIDAwMDAwIG4NCjAwMDA0OTMzMTUgMDAwMDAgbg0KMDAwMDQ5MzM4NiAwMDAw MCBuDQowMDAwNDkzNDUyIDAwMDAwIG4NCjAwMDA0OTM1MTggMDAwMDAgbg0KMDAwMDQ5MzU4NSAw MDAwMCBuDQowMDAwNDkzNjUyIDAwMDAwIG4NCjAwMDA0OTM3MTkgMDAwMDAgbg0KMDAwMDQ5Mzc4 NiAwMDAwMCBuDQowMDAwNDkzODUzIDAwMDAwIG4NCjAwMDA0OTM5MjAgMDAwMDAgbg0KMDAwMDQ5 Mzk4NyAwMDAwMCBuDQowMDAwNDk0MDU0IDAwMDAwIG4NCjAwMDA0OTQxOTQgMDAwMDAgbg0KMDAw MDQ5NDMzNCAwMDAwMCBuDQowMDAwNDk0NDc0IDAwMDAwIG4NCjAwMDA0OTQ2MTQgMDAwMDAgbg0K MDAwMDQ5NDc1NCAwMDAwMCBuDQowMDAwNDk0ODk0IDAwMDAwIG4NCjAwMDA0OTUwMzQgMDAwMDAg bg0KMDAwMDQ5NTE3NCAwMDAwMCBuDQowMDAwNDk1MzE0IDAwMDAwIG4NCjAwMDA0OTU0NTQgMDAw MDAgbg0KMDAwMDQ5NTUyMCAwMDAwMCBuDQowMDAwNDk1NTg2IDAwMDAwIG4NCjAwMDA0OTU2NTIg MDAwMDAgbg0KMDAwMDQ5NTcxOCAwMDAwMCBuDQowMDAwNDk1ODYxIDAwMDAwIG4NCjAwMDA0OTU5 MTQgMDAwMDAgbg0KMDAwMDQ5NTk2NCAwMDAwMCBuDQowMDAwNDk2MDIwIDAwMDAwIG4NCjAwMDA0 OTYxNjMgMDAwMDAgbg0KMDAwMDQ5NjIxNiAwMDAwMCBuDQowMDAwNDk2MjY2IDAwMDAwIG4NCjAw MDA0OTYzMjIgMDAwMDAgbg0KMDAwMDQ5NjQ2NSAwMDAwMCBuDQowMDAwNDk2NTE4IDAwMDAwIG4N CjAwMDA0OTY1NjggMDAwMDAgbg0KMDAwMDQ5NjYyNCAwMDAwMCBuDQowMDAwNDk2NzY3IDAwMDAw IG4NCjAwMDA0OTY4MjAgMDAwMDAgbg0KMDAwMDQ5Njg3MCAwMDAwMCBuDQowMDAwNDk2OTI2IDAw MDAwIG4NCjAwMDA0OTcwNjYgMDAwMDAgbg0KMDAwMDQ5NzIwOCAwMDAwMCBuDQowMDAwNDk3MzUz IDAwMDAwIG4NCjAwMDA0OTc0OTMgMDAwMDAgbg0KMDAwMDQ5NzYzMyAwMDAwMCBuDQowMDAwNDk3 NzczIDAwMDAwIG4NCjAwMDA0OTc5MTMgMDAwMDAgbg0KMDAwMDQ5ODA1MyAwMDAwMCBuDQowMDAw NDk4MTkzIDAwMDAwIG4NCjAwMDA0OTgyNTkgMDAwMDAgbg0KMDAwMDQ5ODMyNSAwMDAwMCBuDQow MDAwNDk4MzkxIDAwMDAwIG4NCjAwMDA0OTg0NTcgMDAwMDAgbg0KMDAwMDQ5ODUyMyAwMDAwMCBu DQowMDAwNDk4NjY2IDAwMDAwIG4NCjAwMDA0OTg3MTkgMDAwMDAgbg0KMDAwMDQ5ODc2OSAwMDAw MCBuDQowMDAwNDk4ODI1IDAwMDAwIG4NCjAwMDA0OTg5NjggMDAwMDAgbg0KMDAwMDQ5OTAyMSAw MDAwMCBuDQowMDAwNDk5MDcxIDAwMDAwIG4NCjAwMDA0OTkxMjcgMDAwMDAgbg0KMDAwMDQ5OTI3 MCAwMDAwMCBuDQowMDAwNDk5MzIzIDAwMDAwIG4NCjAwMDA0OTkzNzMgMDAwMDAgbg0KMDAwMDQ5 OTQyOSAwMDAwMCBuDQowMDAwNDk5NTcyIDAwMDAwIG4NCjAwMDA0OTk2MjUgMDAwMDAgbg0KMDAw MDQ5OTY3NSAwMDAwMCBuDQowMDAwNDk5NzMxIDAwMDAwIG4NCjAwMDA0OTk4NzQgMDAwMDAgbg0K MDAwMDQ5OTkyNyAwMDAwMCBuDQowMDAwNDk5OTc3IDAwMDAwIG4NCjAwMDA1MDAwMzMgMDAwMDAg bg0KMDAwMDUwMDE3MyAwMDAwMCBuDQowMDAwNTAwMzE4IDAwMDAwIG4NCjAwMDA1MDA0NTggMDAw MDAgbg0KMDAwMDUwMDUyNCAwMDAwMCBuDQowMDAwNTAwNTkwIDAwMDAwIG4NCjAwMDA1MDA2NTYg MDAwMDAgbg0KMDAwMDUwMDc5OSAwMDAwMCBuDQowMDAwNTAwODUyIDAwMDAwIG4NCjAwMDA1MDA5 MDIgMDAwMDAgbg0KMDAwMDUwMDk1OCAwMDAwMCBuDQowMDAwNTAxMTAxIDAwMDAwIG4NCjAwMDA1 MDExNTQgMDAwMDAgbg0KMDAwMDUwMTIwNCAwMDAwMCBuDQowMDAwNTAxMjYwIDAwMDAwIG4NCjAw MDA1MDE0MDMgMDAwMDAgbg0KMDAwMDUwMTQ1NiAwMDAwMCBuDQowMDAwNTAxNTA2IDAwMDAwIG4N CjAwMDA1MDE1NjIgMDAwMDAgbg0KMDAwMDUwMTcwNCAwMDAwMCBuDQowMDAwNTAxODQ0IDAwMDAw IG4NCjAwMDA1MDE5MTEgMDAwMDAgbg0KMDAwMDUwMTk3OCAwMDAwMCBuDQowMDAwNTAyMDQ1IDAw MDAwIG4NCjAwMDA1MDIxMTIgMDAwMDAgbg0KMDAwMDUwMjE3OSAwMDAwMCBuDQowMDAwNTAyMjQ2 IDAwMDAwIG4NCjAwMDA1MDIzMTMgMDAwMDAgbg0KMDAwMDUwMjM4MCAwMDAwMCBuDQowMDAwNTAy NDQ3IDAwMDAwIG4NCjAwMDA1MDI1MTQgMDAwMDAgbg0KMDAwMDUwMjU4MSAwMDAwMCBuDQowMDAw NTAyNjQ4IDAwMDAwIG4NCjAwMDA1MDI3MTUgMDAwMDAgbg0KMDAwMDUwMjc4MiAwMDAwMCBuDQow MDAwNTAyODQ5IDAwMDAwIG4NCjAwMDA1MDI5MTYgMDAwMDAgbg0KMDAwMDUwMjk4MyAwMDAwMCBu DQowMDAwNTAzMDUwIDAwMDAwIG4NCjAwMDA1MDMxMTcgMDAwMDAgbg0KMDAwMDUwMzE4NCAwMDAw MCBuDQowMDAwNTAzMjUxIDAwMDAwIG4NCjAwMDA1MDMzMTggMDAwMDAgbg0KMDAwMDUwMzM4NSAw MDAwMCBuDQowMDAwNTAzNDUyIDAwMDAwIG4NCjAwMDA1MDM1MTggMDAwMDAgbg0KMDAwMDUwMzU4 NCAwMDAwMCBuDQowMDAwNTAzNjUwIDAwMDAwIG4NCjAwMDA1MDM3MTYgMDAwMDAgbg0KMDAwMDUw Mzc4MiAwMDAwMCBuDQowMDAwNTAzODQ4IDAwMDAwIG4NCjAwMDA1MDM5MTQgMDAwMDAgbg0KMDAw MDUwMzk4MCAwMDAwMCBuDQowMDAwNTA0MDQ2IDAwMDAwIG4NCjAwMDA1MDQxMTIgMDAwMDAgbg0K MDAwMDUwNDE3OCAwMDAwMCBuDQowMDAwNTA0MjQ0IDAwMDAwIG4NCjAwMDA1MDQzMTAgMDAwMDAg bg0KMDAwMDUwNDM3NiAwMDAwMCBuDQowMDAwNTA0NDQyIDAwMDAwIG4NCjAwMDA1MDQ1MDggMDAw MDAgbg0KMDAwMDUwNDU3NCAwMDAwMCBuDQowMDAwNTA0NjQwIDAwMDAwIG4NCjAwMDA1MDQ3ODAg MDAwMDAgbg0KMDAwMDUwNDkyMCAwMDAwMCBuDQowMDAwNTA1MDYwIDAwMDAwIG4NCjAwMDA1MDUy MDAgMDAwMDAgbg0KMDAwMDUwNTM0MCAwMDAwMCBuDQowMDAwNTA1NDgwIDAwMDAwIG4NCjAwMDA1 MDU2MjAgMDAwMDAgbg0KMDAwMDUwNTc2MCAwMDAwMCBuDQowMDAwNTA1OTAwIDAwMDAwIG4NCjAw MDA1MDYwNDAgMDAwMDAgbg0KMDAwMDUwNjE4MCAwMDAwMCBuDQowMDAwNTA2MzIwIDAwMDAwIG4N CjAwMDA1MDY0NjAgMDAwMDAgbg0KMDAwMDUwNjYwMCAwMDAwMCBuDQowMDAwNTA2NzQwIDAwMDAw IG4NCjAwMDA1MDY4ODAgMDAwMDAgbg0KMDAwMDUwNzAyMiAwMDAwMCBuDQowMDAwNTA3MTY0IDAw MDAwIG4NCjAwMDA1MDczMDcgMDAwMDAgbg0KMDAwMDUwNzQ1MCAwMDAwMCBuDQowMDAwNTA3NTkz IDAwMDAwIG4NCjAwMDA1MDc3MzYgMDAwMDAgbg0KMDAwMDUwNzg3OSAwMDAwMCBuDQowMDAwNTA4 MDIyIDAwMDAwIG4NCjAwMDA1MDgxNjUgMDAwMDAgbg0KMDAwMDUwODMwOCAwMDAwMCBuDQowMDAw NTA4NDUxIDAwMDAwIG4NCjAwMDA1MDg1OTYgMDAwMDAgbg0KMDAwMDUwODczOSAwMDAwMCBuDQow MDAwNTA4ODgyIDAwMDAwIG4NCjAwMDA1MDkwMjUgMDAwMDAgbg0KMDAwMDUwOTE2OCAwMDAwMCBu DQowMDAwNTA5MzExIDAwMDAwIG4NCjAwMDA1MDk0NTQgMDAwMDAgbg0KMDAwMDUwOTU5NyAwMDAw MCBuDQowMDAwNTA5NzQwIDAwMDAwIG4NCjAwMDA1MDk4ODMgMDAwMDAgbg0KMDAwMDUxMDAyNiAw MDAwMCBuDQowMDAwNTEwMTY5IDAwMDAwIG4NCjAwMDA1MTAzMTIgMDAwMDAgbg0KMDAwMDUxMDQ1 NSAwMDAwMCBuDQowMDAwNTEwNTk4IDAwMDAwIG4NCjAwMDA1MTA2NzIgMDAwMDAgbg0KMDAwMDUx MDczOSAwMDAwMCBuDQowMDAwNTEwODA3IDAwMDAwIG4NCjAwMDA1MTA4NzUgMDAwMDAgbg0KMDAw MDUxMTAxOSAwMDAwMCBuDQowMDAwNTExMTYzIDAwMDAwIG4NCjAwMDA1MTEzMDcgMDAwMDAgbg0K MDAwMDUxMTQ1MCAwMDAwMCBuDQowMDAwNTExNTkxIDAwMDAwIG4NCjAwMDA1MTE3MzIgMDAwMDAg bg0KMDAwMDUxMjAwMCAwMDAwMCBuDQowMDAwNTEyMTE4IDAwMDAwIG4NCjAwMDA1MTIxOTcgMDAw MDAgbg0KMDAwMDUxMjI4MCAwMDAwMCBuDQowMDAwNTEyNzMyIDAwMDAwIG4NCjAwMDA1MTMwNDkg MDAwMDAgbg0KMDAwMDUxMzEwNCAwMDAwMCBuDQowMDAwNTEzMTY5IDAwMDAwIG4NCjAwMDA1MTMy MjQgMDAwMDAgbg0KMDAwMDUxMzI3OSAwMDAwMCBuDQowMDAwNTEzMzM0IDAwMDAwIG4NCjAwMDA1 MTMzODkgMDAwMDAgbg0KMDAwMDUxMzQ0NCAwMDAwMCBuDQowMDAwNTEzNzUyIDAwMDAwIG4NCjAw MDA1MTM4MDcgMDAwMDAgbg0KMDAwMDUxMzg2MiAwMDAwMCBuDQowMDAwNTEzOTE3IDAwMDAwIG4N CjAwMDA1MTM5NzIgMDAwMDAgbg0KMDAwMDUxNDAyNyAwMDAwMCBuDQowMDAwNTE0MDgyIDAwMDAw IG4NCjAwMDA1MTQxMzcgMDAwMDAgbg0KMDAwMDUxNDI0NyAwMDAwMCBuDQowMDAwNTE0MzMwIDAw MDAwIG4NCjAwMDA1MTQzOTYgMDAwMDAgbg0KMDAwMDUxNDQ2MiAwMDAwMCBuDQowMDAwNTE0NTMw IDAwMDAwIG4NCjAwMDA1MTQ2NDAgMDAwMDAgbg0KMDAwMDUxNDc1MCAwMDAwMCBuDQowMDAwNTE0 ODU4IDAwMDAwIG4NCjAwMDA1MTQ5MzkgMDAwMDAgbg0KMDAwMDUxNTA1MiAwMDAwMCBuDQowMDAw NTE1MTIyIDAwMDAwIG4NCjAwMDA1MTUyMDMgMDAwMDAgbg0KMDAwMDUxNTM0NiAwMDAwMCBuDQow MDAwNTE1NDg3IDAwMDAwIG4NCjAwMDA1MTU1NTggMDAwMDAgbg0KMDAwMDUxNTYyOSAwMDAwMCBu DQowMDAwNTE1NzAwIDAwMDAwIG4NCjAwMDA1MTU3NzEgMDAwMDAgbg0KMDAwMDUxNTg0MiAwMDAw MCBuDQowMDAwNTE1OTEzIDAwMDAwIG4NCjAwMDA1MTU5ODQgMDAwMDAgbg0KMDAwMDUxNjA1NSAw MDAwMCBuDQowMDAwNTE2MTk5IDAwMDAwIG4NCjAwMDA1MTYyNTQgMDAwMDAgbg0KMDAwMDUxNjMw NyAwMDAwMCBuDQowMDAwNTE2Mzc3IDAwMDAwIG4NCjAwMDA1MTY1MjEgMDAwMDAgbg0KMDAwMDUx NjU3NiAwMDAwMCBuDQowMDAwNTE2NjI5IDAwMDAwIG4NCjAwMDA1MTY2OTkgMDAwMDAgbg0KMDAw MDUxNjg0MyAwMDAwMCBuDQowMDAwNTE2ODk3IDAwMDAwIG4NCjAwMDA1MTY5NTAgMDAwMDAgbg0K MDAwMDUxNzAyNCAwMDAwMCBuDQowMDAwNTE3MTY4IDAwMDAwIG4NCjAwMDA1MTcyMjMgMDAwMDAg bg0KMDAwMDUxNzI3NiAwMDAwMCBuDQowMDAwNTE3MzQ2IDAwMDAwIG4NCjAwMDA1MTc0OTAgMDAw MDAgbg0KMDAwMDUxNzU0NSAwMDAwMCBuDQowMDAwNTE3NTk4IDAwMDAwIG4NCjAwMDA1MTc2Njgg MDAwMDAgbg0KMDAwMDUxNzgxMiAwMDAwMCBuDQowMDAwNTE3ODY3IDAwMDAwIG4NCjAwMDA1MTc5 MjAgMDAwMDAgbg0KMDAwMDUxNzk5MCAwMDAwMCBuDQowMDAwNTE4MTM0IDAwMDAwIG4NCjAwMDA1 MTgxODkgMDAwMDAgbg0KMDAwMDUxODI0MiAwMDAwMCBuDQowMDAwNTE4MzEyIDAwMDAwIG4NCjAw MDA1MTg0NTYgMDAwMDAgbg0KMDAwMDUxODUxMSAwMDAwMCBuDQowMDAwNTE4NTY0IDAwMDAwIG4N CjAwMDA1MTg2MzQgMDAwMDAgbg0KMDAwMDUxODc3NyAwMDAwMCBuDQowMDAwNTE4ODU4IDAwMDAw IG4NCjAwMDA1MTg5MjggMDAwMDAgbg0KMDAwMDUxOTAwOSAwMDAwMCBuDQowMDAwNTE5MDkwIDAw MDAwIG4NCjAwMDA1MTkxNzEgMDAwMDAgbg0KMDAwMDUxOTI1MiAwMDAwMCBuDQowMDAwNTE5NDAy IDAwMDAwIG4NCjAwMDA1MTk1NDMgMDAwMDAgbg0KMDAwMDUxOTY4NCAwMDAwMCBuDQowMDAwNTE5 ODI1IDAwMDAwIG4NCjAwMDA1MTk5NjYgMDAwMDAgbg0KMDAwMDUyMDEwNyAwMDAwMCBuDQowMDAw NTIwMjQ4IDAwMDAwIG4NCjAwMDA1MjAzOTEgMDAwMDAgbg0KMDAwMDUyMDQ4MiAwMDAwMCBuDQow MDAwNTIwNjI1IDAwMDAwIG4NCjAwMDA1MjA3MjkgMDAwMDAgbg0KMDAwMDUyMDgwOCAwMDAwMCBu DQowMDAwNTIwODg5IDAwMDAwIG4NCjAwMDA1MjEwMzIgMDAwMDAgbg0KMDAwMDUyMTExMyAwMDAw MCBuDQowMDAwNTIxMjU2IDAwMDAwIG4NCjAwMDA1MjEzMzcgMDAwMDAgbg0KMDAwMDUyMTQ4MCAw MDAwMCBuDQowMDAwNTIxNTY1IDAwMDAwIG4NCjAwMDA1MjE3MDggMDAwMDAgbg0KMDAwMDUyMTc4 OSAwMDAwMCBuDQowMDAwNTIxOTMyIDAwMDAwIG4NCjAwMDA1MjIwMTcgMDAwMDAgbg0KMDAwMDUy MjE2MCAwMDAwMCBuDQowMDAwNTIyMjQxIDAwMDAwIG4NCjAwMDA1MjIzMjIgMDAwMDAgbg0KMDAw MDUyMjM5MCAwMDAwMCBuDQowMDAwNTIyNDcxIDAwMDAwIG4NCjAwMDA1MjI1NTIgMDAwMDAgbg0K MDAwMDUyMjYyMiAwMDAwMCBuDQowMDAwNTIyNzAzIDAwMDAwIG4NCjAwMDA1MjI3ODQgMDAwMDAg bg0KMDAwMDUyMjg1MiAwMDAwMCBuDQowMDAwNTIyOTIyIDAwMDAwIG4NCjAwMDA1MjI5OTIgMDAw MDAgbg0KMDAwMDUyMzA2MiAwMDAwMCBuDQowMDAwNTIzMTQzIDAwMDAwIG4NCjAwMDA1MjMyMTMg MDAwMDAgbg0KMDAwMDUyMzI4MyAwMDAwMCBuDQowMDAwNTIzMzY0IDAwMDAwIG4NCjAwMDA1MjM0 NTAgMDAwMDAgbg0KMDAwMDUyMzUzMSAwMDAwMCBuDQowMDAwNTIzNjEyIDAwMDAwIG4NCjAwMDA1 MjM2ODIgMDAwMDAgbg0KMDAwMDUyMzc1MiAwMDAwMCBuDQowMDAwNTIzODIyIDAwMDAwIG4NCjAw MDA1MjM4OTkgMDAwMDAgbg0KMDAwMDUyMzk2OSAwMDAwMCBuDQowMDAwNTI0MDUwIDAwMDAwIG4N CjAwMDA1MjQxMzEgMDAwMDAgbg0KMDAwMDUyNDIwMSAwMDAwMCBuDQowMDAwNTI0MjcxIDAwMDAw IG4NCjAwMDA1MjQzNTIgMDAwMDAgbg0KMDAwMDUyNDQ5NSAwMDAwMCBuDQowMDAwNTI0NjM4IDAw MDAwIG4NCjAwMDA1MjQ3ODEgMDAwMDAgbg0KMDAwMDUyNDkyMiAwMDAwMCBuDQowMDAwNTI1MDYz IDAwMDAwIG4NCjAwMDA1MjUyMDQgMDAwMDAgbg0KMDAwMDUyNTI3NSAwMDAwMCBuDQowMDAwNTI1 MzQ2IDAwMDAwIG4NCjAwMDA1MjU0MTcgMDAwMDAgbg0KMDAwMDUyNTQ4OCAwMDAwMCBuDQowMDAw NTI1NjMyIDAwMDAwIG4NCjAwMDA1MjU2ODcgMDAwMDAgbg0KMDAwMDUyNTc0MCAwMDAwMCBuDQow MDAwNTI1ODEwIDAwMDAwIG4NCjAwMDA1MjU5NTQgMDAwMDAgbg0KMDAwMDUyNjAwOSAwMDAwMCBu DQowMDAwNTI2MDYyIDAwMDAwIG4NCjAwMDA1MjYxMzIgMDAwMDAgbg0KMDAwMDUyNjI3NiAwMDAw MCBuDQowMDAwNTI2MzMxIDAwMDAwIG4NCjAwMDA1MjYzODQgMDAwMDAgbg0KMDAwMDUyNjQ1NCAw MDAwMCBuDQowMDAwNTI2NTk4IDAwMDAwIG4NCjAwMDA1MjY2NTMgMDAwMDAgbg0KMDAwMDUyNjcw NiAwMDAwMCBuDQowMDAwNTI2Nzc2IDAwMDAwIG4NCjAwMDA1MjY5MTcgMDAwMDAgbg0KMDAwMDUy NzA1OCAwMDAwMCBuDQowMDAwNTI3MTk5IDAwMDAwIG4NCjAwMDA1MjczNDAgMDAwMDAgbg0KMDAw MDUyNzQ4MSAwMDAwMCBuDQowMDAwNTI3NTUyIDAwMDAwIG4NCjAwMDA1Mjc2MjMgMDAwMDAgbg0K MDAwMDUyNzY5NCAwMDAwMCBuDQowMDAwNTI3NzY1IDAwMDAwIG4NCjAwMDA1Mjc4MzYgMDAwMDAg bg0KMDAwMDUyNzk4MCAwMDAwMCBuDQowMDAwNTI4MDM1IDAwMDAwIG4NCjAwMDA1MjgwODggMDAw MDAgbg0KMDAwMDUyODE1OCAwMDAwMCBuDQowMDAwNTI4MzAyIDAwMDAwIG4NCjAwMDA1MjgzNTcg MDAwMDAgbg0KMDAwMDUyODQxMCAwMDAwMCBuDQowMDAwNTI4NDgwIDAwMDAwIG4NCjAwMDA1Mjg2 MjQgMDAwMDAgbg0KMDAwMDUyODY3OSAwMDAwMCBuDQowMDAwNTI4NzMyIDAwMDAwIG4NCjAwMDA1 Mjg4MDIgMDAwMDAgbg0KMDAwMDUyODk0NiAwMDAwMCBuDQowMDAwNTI5MDAxIDAwMDAwIG4NCjAw MDA1MjkwNTQgMDAwMDAgbg0KMDAwMDUyOTEyNCAwMDAwMCBuDQowMDAwNTI5MjY4IDAwMDAwIG4N CjAwMDA1MjkzMjIgMDAwMDAgbg0KMDAwMDUyOTM3NSAwMDAwMCBuDQowMDAwNTI5NDQ5IDAwMDAw IG4NCjAwMDA1Mjk1OTAgMDAwMDAgbg0KMDAwMDUyOTczMSAwMDAwMCBuDQowMDAwNTI5ODc0IDAw MDAwIG4NCjAwMDA1MzAwMTUgMDAwMDAgbg0KMDAwMDUzMDE1NiAwMDAwMCBuDQowMDAwNTMwMjk3 IDAwMDAwIG4NCjAwMDA1MzA0MzggMDAwMDAgbg0KMDAwMDUzMDUwOSAwMDAwMCBuDQowMDAwNTMw NTgwIDAwMDAwIG4NCjAwMDA1MzA2NTEgMDAwMDAgbg0KMDAwMDUzMDc5NSAwMDAwMCBuDQowMDAw NTMwODUwIDAwMDAwIG4NCjAwMDA1MzA5MDMgMDAwMDAgbg0KMDAwMDUzMDk3MyAwMDAwMCBuDQow MDAwNTMxMTE3IDAwMDAwIG4NCjAwMDA1MzExNzIgMDAwMDAgbg0KMDAwMDUzMTIyNSAwMDAwMCBu DQowMDAwNTMxMjk1IDAwMDAwIG4NCjAwMDA1MzE0MzkgMDAwMDAgbg0KMDAwMDUzMTQ5NCAwMDAw MCBuDQowMDAwNTMxNTQ3IDAwMDAwIG4NCjAwMDA1MzE2MTcgMDAwMDAgbg0KMDAwMDUzMTc2MCAw MDAwMCBuDQowMDAwNTMxOTAzIDAwMDAwIG4NCjAwMDA1MzIwNDQgMDAwMDAgbg0KMDAwMDUzMjE4 NSAwMDAwMCBuDQowMDAwNTMyMzI2IDAwMDAwIG4NCjAwMDA1MzIzOTcgMDAwMDAgbg0KMDAwMDUz MjQ2OCAwMDAwMCBuDQowMDAwNTMyNTM5IDAwMDAwIG4NCjAwMDA1MzI2ODMgMDAwMDAgbg0KMDAw MDUzMjczOCAwMDAwMCBuDQowMDAwNTMyNzkxIDAwMDAwIG4NCjAwMDA1MzI4NjEgMDAwMDAgbg0K MDAwMDUzMzAwNSAwMDAwMCBuDQowMDAwNTMzMDYwIDAwMDAwIG4NCjAwMDA1MzMxMTMgMDAwMDAg bg0KMDAwMDUzMzE4MyAwMDAwMCBuDQowMDAwNTMzMzI3IDAwMDAwIG4NCjAwMDA1MzMzODIgMDAw MDAgbg0KMDAwMDUzMzQzNSAwMDAwMCBuDQowMDAwNTMzNTA1IDAwMDAwIG4NCjAwMDA1MzM2NDgg MDAwMDAgbg0KMDAwMDUzMzc4OSAwMDAwMCBuDQowMDAwNTMzODcwIDAwMDAwIG4NCjAwMDA1MzQw MTMgMDAwMDAgbg0KMDAwMDUzNDA5NCAwMDAwMCBuDQowMDAwNTM0MjM1IDAwMDAwIG4NCjAwMDA1 MzQzMjAgMDAwMDAgbg0KMDAwMDUzNDQ2MyAwMDAwMCBuDQowMDAwNTM0NTUyIDAwMDAwIG4NCjAw MDA1MzQ2OTUgMDAwMDAgbg0KMDAwMDUzNDc3OSAwMDAwMCBuDQowMDAwNTM0OTIyIDAwMDAwIG4N CjAwMDA1MzUwMDMgMDAwMDAgbg0KMDAwMDUzNTA4NCAwMDAwMCBuDQowMDAwNTM1MjI3IDAwMDAw IG4NCjAwMDA1MzUzNjggMDAwMDAgbg0KMDAwMDUzNTQ0OCAwMDAwMCBuDQowMDAwNTM1NTkxIDAw MDAwIG4NCjAwMDA1MzU2NzEgMDAwMDAgbg0KMDAwMDUzNTc1MSAwMDAwMCBuDQowMDAwNTM1ODIw IDAwMDAwIG4NCjAwMDA1MzU5MDAgMDAwMDAgbg0KMDAwMDUzNTk4MCAwMDAwMCBuDQowMDAwNTM2 MDYwIDAwMDAwIG4NCjAwMDA1MzYxNDAgMDAwMDAgbg0KMDAwMDUzNjIyMCAwMDAwMCBuDQowMDAw NTM2Mjg4IDAwMDAwIG4NCjAwMDA1MzYzNjggMDAwMDAgbg0KMDAwMDUzNjQ0OCAwMDAwMCBuDQow MDAwNTM2NTI4IDAwMDAwIG4NCjAwMDA1MzY2MDggMDAwMDAgbg0KMDAwMDUzNjY4OCAwMDAwMCBu DQowMDAwNTM2NzY4IDAwMDAwIG4NCjAwMDA1MzY4NDggMDAwMDAgbg0KMDAwMDUzNjkzNCAwMDAw MCBuDQowMDAwNTM3MDE0IDAwMDAwIG4NCjAwMDA1MzcwOTQgMDAwMDAgbg0KMDAwMDUzNzE3NCAw MDAwMCBuDQowMDAwNTM3MjU1IDAwMDAwIG4NCjAwMDA1MzczMzYgMDAwMDAgbg0KMDAwMDUzNzQx NyAwMDAwMCBuDQowMDAwNTM3NDk4IDAwMDAwIG4NCjAwMDA1Mzc1NjggMDAwMDAgbg0KMDAwMDUz NzY0OSAwMDAwMCBuDQowMDAwNTM3NzMwIDAwMDAwIG4NCjAwMDA1Mzc4MTEgMDAwMDAgbg0KMDAw MDUzNzg5MiAwMDAwMCBuDQowMDAwNTM3OTczIDAwMDAwIG4NCjAwMDA1MzgxMTQgMDAwMDAgbg0K MDAwMDUzODI1NSAwMDAwMCBuDQowMDAwNTM4Mzk2IDAwMDAwIG4NCjAwMDA1Mzg1MzcgMDAwMDAg bg0KMDAwMDUzODY3OCAwMDAwMCBuDQowMDAwNTM4ODIxIDAwMDAwIG4NCjAwMDA1Mzg5NjIgMDAw MDAgbg0KMDAwMDUzOTEwMyAwMDAwMCBuDQowMDAwNTM5MjQ0IDAwMDAwIG4NCjAwMDA1MzkzODUg MDAwMDAgbg0KMDAwMDUzOTUyNiAwMDAwMCBuDQowMDAwNTM5NjY3IDAwMDAwIG4NCjAwMDA1Mzk4 MDggMDAwMDAgbg0KMDAwMDUzOTg3OSAwMDAwMCBuDQowMDAwNTM5OTUwIDAwMDAwIG4NCjAwMDA1 NDAwMjEgMDAwMDAgbg0KMDAwMDU0MDA5MiAwMDAwMCBuDQowMDAwNTQwMTYzIDAwMDAwIG4NCjAw MDA1NDAzMDcgMDAwMDAgbg0KMDAwMDU0MDM2MSAwMDAwMCBuDQowMDAwNTQwNDE0IDAwMDAwIG4N CjAwMDA1NDA0ODMgMDAwMDAgbg0KMDAwMDU0MDYyNyAwMDAwMCBuDQowMDAwNTQwNjgxIDAwMDAw IG4NCjAwMDA1NDA3MzQgMDAwMDAgbg0KMDAwMDU0MDgwMyAwMDAwMCBuDQowMDAwNTQwOTQ3IDAw MDAwIG4NCjAwMDA1NDEwMDEgMDAwMDAgbg0KMDAwMDU0MTA1NCAwMDAwMCBuDQowMDAwNTQxMTIz IDAwMDAwIG4NCjAwMDA1NDEyNjcgMDAwMDAgbg0KMDAwMDU0MTMyMSAwMDAwMCBuDQowMDAwNTQx Mzc0IDAwMDAwIG4NCjAwMDA1NDE0NDMgMDAwMDAgbg0KMDAwMDU0MTU4NyAwMDAwMCBuDQowMDAw NTQxNjQxIDAwMDAwIG4NCjAwMDA1NDE2OTQgMDAwMDAgbg0KMDAwMDU0MTc2MyAwMDAwMCBuDQow MDAwNTQxOTA0IDAwMDAwIG4NCjAwMDA1NDIwNDUgMDAwMDAgbg0KMDAwMDU0MjE5MSAwMDAwMCBu DQowMDAwNTQyMzMyIDAwMDAwIG4NCjAwMDA1NDI0NzMgMDAwMDAgbg0KMDAwMDU0MjYxNCAwMDAw MCBuDQowMDAwNTQyNzU1IDAwMDAwIG4NCjAwMDA1NDI4MjYgMDAwMDAgbg0KMDAwMDU0Mjg5NyAw MDAwMCBuDQowMDAwNTQyOTY4IDAwMDAwIG4NCjAwMDA1NDMxMTIgMDAwMDAgbg0KMDAwMDU0MzE2 NiAwMDAwMCBuDQowMDAwNTQzMjE5IDAwMDAwIG4NCjAwMDA1NDMyODggMDAwMDAgbg0KMDAwMDU0 MzQzMiAwMDAwMCBuDQowMDAwNTQzNDg2IDAwMDAwIG4NCjAwMDA1NDM1MzkgMDAwMDAgbg0KMDAw MDU0MzYwOCAwMDAwMCBuDQowMDAwNTQzNzUyIDAwMDAwIG4NCjAwMDA1NDM4MDYgMDAwMDAgbg0K MDAwMDU0Mzg1OSAwMDAwMCBuDQowMDAwNTQzOTI4IDAwMDAwIG4NCjAwMDA1NDQwNjkgMDAwMDAg bg0KMDAwMDU0NDIxMiAwMDAwMCBuDQowMDAwNTQ0MzUzIDAwMDAwIG4NCjAwMDA1NDQ0OTQgMDAw MDAgbg0KMDAwMDU0NDYzNSAwMDAwMCBuDQowMDAwNTQ0Nzc2IDAwMDAwIG4NCjAwMDA1NDQ5MTkg MDAwMDAgbg0KMDAwMDU0NTA2MCAwMDAwMCBuDQowMDAwNTQ1MTQwIDAwMDAwIG4NCjAwMDA1NDUy MjAgMDAwMDAgbg0KMDAwMDU0NTMwMCAwMDAwMCBuDQowMDAwNTQ1MzgwIDAwMDAwIG4NCjAwMDA1 NDU0NjAgMDAwMDAgbg0KMDAwMDU0NTU0MCAwMDAwMCBuDQowMDAwNTQ1NjIwIDAwMDAwIG4NCjAw MDA1NDU3MDAgMDAwMDAgbg0KMDAwMDU0NTc4MCAwMDAwMCBuDQowMDAwNTQ1ODYwIDAwMDAwIG4N CjAwMDA1NDU5NDAgMDAwMDAgbg0KMDAwMDU0NjAyMCAwMDAwMCBuDQowMDAwNTQ2MTAwIDAwMDAw IG4NCjAwMDA1NDYxODAgMDAwMDAgbg0KMDAwMDU0NjI2MCAwMDAwMCBuDQowMDAwNTQ2MzQwIDAw MDAwIG4NCjAwMDA1NDY0MjAgMDAwMDAgbg0KMDAwMDU0NjUwMCAwMDAwMCBuDQowMDAwNTQ2NTgw IDAwMDAwIG4NCjAwMDA1NDY2NjAgMDAwMDAgbg0KMDAwMDU0Njc0MCAwMDAwMCBuDQowMDAwNTQ2 ODIwIDAwMDAwIG4NCjAwMDA1NDY5MDAgMDAwMDAgbg0KMDAwMDU0Njk4MCAwMDAwMCBuDQowMDAw NTQ3MDYwIDAwMDAwIG4NCjAwMDA1NDcxNDAgMDAwMDAgbg0KMDAwMDU0NzIyMCAwMDAwMCBuDQow MDAwNTQ3MzAwIDAwMDAwIG4NCjAwMDA1NDczODAgMDAwMDAgbg0KMDAwMDU0NzQ2MCAwMDAwMCBu DQowMDAwNTQ3NTQwIDAwMDAwIG4NCjAwMDA1NDc2MjAgMDAwMDAgbg0KMDAwMDU0NzcwMCAwMDAw MCBuDQowMDAwNTQ3NzgwIDAwMDAwIG4NCjAwMDA1NDc4NjAgMDAwMDAgbg0KMDAwMDU0Nzk0MCAw MDAwMCBuDQowMDAwNTQ4MDIwIDAwMDAwIG4NCjAwMDA1NDgxMDAgMDAwMDAgbg0KMDAwMDU0ODE4 MCAwMDAwMCBuDQowMDAwNTQ4MjYwIDAwMDAwIG4NCjAwMDA1NDgzNDAgMDAwMDAgbg0KMDAwMDU0 ODQyMCAwMDAwMCBuDQowMDAwNTQ4NTAwIDAwMDAwIG4NCjAwMDA1NDg1ODAgMDAwMDAgbg0KMDAw MDU0ODY2MCAwMDAwMCBuDQowMDAwNTQ4ODAxIDAwMDAwIG4NCjAwMDA1NDg5NDIgMDAwMDAgbg0K MDAwMDU0OTA4MyAwMDAwMCBuDQowMDAwNTQ5MjI0IDAwMDAwIG4NCjAwMDA1NDkzNjUgMDAwMDAg bg0KMDAwMDU0OTUwNiAwMDAwMCBuDQowMDAwNTQ5NjQ3IDAwMDAwIG4NCjAwMDA1NDk3ODggMDAw MDAgbg0KMDAwMDU0OTkyOSAwMDAwMCBuDQowMDAwNTUwMDcwIDAwMDAwIG4NCjAwMDA1NTAyMTEg MDAwMDAgbg0KMDAwMDU1MDM1MiAwMDAwMCBuDQowMDAwNTUwNDkzIDAwMDAwIG4NCjAwMDA1NTA2 MzQgMDAwMDAgbg0KMDAwMDU1MDc3NSAwMDAwMCBuDQowMDAwNTUwOTE2IDAwMDAwIG4NCjAwMDA1 NTEwNTcgMDAwMDAgbg0KMDAwMDU1MTE5OCAwMDAwMCBuDQowMDAwNTUxMzQxIDAwMDAwIG4NCjAw MDA1NTE0ODQgMDAwMDAgbg0KMDAwMDU1MTYyNyAwMDAwMCBuDQowMDAwNTUxNzcwIDAwMDAwIG4N CjAwMDA1NTE5MTMgMDAwMDAgbg0KMDAwMDU1MjA1NiAwMDAwMCBuDQowMDAwNTUyMTk5IDAwMDAw IG4NCjAwMDA1NTIzNDIgMDAwMDAgbg0KMDAwMDU1MjQ4NSAwMDAwMCBuDQowMDAwNTUyNjI4IDAw MDAwIG4NCjAwMDA1NTI3NzEgMDAwMDAgbg0KMDAwMDU1MjkxNCAwMDAwMCBuDQowMDAwNTUzMDU5 IDAwMDAwIG4NCjAwMDA1NTMyMDIgMDAwMDAgbg0KMDAwMDU1MzM0NSAwMDAwMCBuDQowMDAwNTUz NDg4IDAwMDAwIG4NCjAwMDA1NTM2MzEgMDAwMDAgbg0KMDAwMDU1Mzc3NCAwMDAwMCBuDQowMDAw NTUzOTE3IDAwMDAwIG4NCjAwMDA1NTQwNjAgMDAwMDAgbg0KMDAwMDU1NDIwMyAwMDAwMCBuDQow MDAwNTU0MzQ2IDAwMDAwIG4NCjAwMDA1NTQ0ODkgMDAwMDAgbg0KMDAwMDU1NDYzMiAwMDAwMCBu DQowMDAwNTU0Nzc1IDAwMDAwIG4NCjAwMDA1NTQ5MTggMDAwMDAgbg0KMDAwMDU1NTA2MSAwMDAw MCBuDQowMDAwNTU1MTQ3IDAwMDAwIG4NCjAwMDA1NTUyMjYgMDAwMDAgbg0KMDAwMDU1NTMwNiAw MDAwMCBuDQowMDAwNTU1Mzg2IDAwMDAwIG4NCjAwMDA1NTU1MzAgMDAwMDAgbg0KMDAwMDU1NTY3 NCAwMDAwMCBuDQowMDAwNTU1ODE4IDAwMDAwIG4NCjAwMDA1NTU5NjEgMDAwMDAgbg0KMDAwMDU1 NjEwMiAwMDAwMCBuDQowMDAwNTU2MjQzIDAwMDAwIG4NCjAwMDA1NTY0NjYgMDAwMDAgbg0KMDAw MDU1NjU0NSAwMDAwMCBuDQowMDAwNTU2NjE1IDAwMDAwIG4NCjAwMDA1NTY2ODUgMDAwMDAgbg0K MDAwMDU1Njc1NSAwMDAwMCBuDQowMDAwNTU2ODI1IDAwMDAwIG4NCjAwMDA1NTY4OTUgMDAwMDAg bg0KMDAwMDU1Njk2NSAwMDAwMCBuDQowMDAwNTU3MDM1IDAwMDAwIG4NCjAwMDA1NTcxMDUgMDAw MDAgbg0KMDAwMDU1NzE3NSAwMDAwMCBuDQowMDAwNTU3Mjg1IDAwMDAwIG4NCjAwMDA1NTczNjgg MDAwMDAgbg0KMDAwMDU1NzQzMyAwMDAwMCBuDQowMDAwNTU3NDk4IDAwMDAwIG4NCjAwMDA1NTc1 NjMgMDAwMDAgbg0KMDAwMDU1NzYyOCAwMDAwMCBuDQowMDAwNTU3NzIwIDAwMDAwIG4NCjAwMDA1 NTc3OTQgMDAwMDAgbg0KMDAwMDU1Nzg0OSAwMDAwMCBuDQowMDAwNTU3OTA0IDAwMDAwIG4NCjAw MDA1NTc5NzUgMDAwMDAgbg0KMDAwMDU1ODExOCAwMDAwMCBuDQowMDAwNTU4MTgzIDAwMDAwIG4N CjAwMDA1NTgzMjYgMDAwMDAgbg0KMDAwMDU1ODU5MiAwMDAwMCBuDQowMDAwNTU4NjcxIDAwMDAw IG4NCjAwMDA1NTg3NDIgMDAwMDAgbg0KMDAwMDU1ODgxMyAwMDAwMCBuDQowMDAwNTU4ODg0IDAw MDAwIG4NCjAwMDA1NTkwMjcgMDAwMDAgbg0KMDAwMDU1OTE3MCAwMDAwMCBuDQowMDAwNTU5MzEz IDAwMDAwIG4NCjAwMDA1NTkzODQgMDAwMDAgbg0KMDAwMDU1OTQ1NSAwMDAwMCBuDQowMDAwNTU5 NTI2IDAwMDAwIG4NCjAwMDA1NTk1OTcgMDAwMDAgbg0KMDAwMDU1OTY2OCAwMDAwMCBuDQowMDAw NTU5ODA5IDAwMDAwIG4NCjAwMDA1NTk5NTAgMDAwMDAgbg0KMDAwMDU2MDA5MSAwMDAwMCBuDQow MDAwNTYwMjMyIDAwMDAwIG4NCjAwMDA1NjAzNzMgMDAwMDAgbg0KMDAwMDU2MDQ0NCAwMDAwMCBu DQowMDAwNTYwNTE1IDAwMDAwIG4NCjAwMDA1NjA2NTggMDAwMDAgbg0KMDAwMDU2MDgwMSAwMDAw MCBuDQowMDAwNTYwODcyIDAwMDAwIG4NCjAwMDA1NjA5NDMgMDAwMDAgbg0KMDAwMDU2MTA4NiAw MDAwMCBuDQowMDAwNTYxMjI3IDAwMDAwIG4NCjAwMDA1NjEyOTkgMDAwMDAgbg0KMDAwMDU2MTM3 MCAwMDAwMCBuDQowMDAwNTYxNTEzIDAwMDAwIG4NCjAwMDA1NjE2NTQgMDAwMDAgbg0KMDAwMDU2 MTcyNSAwMDAwMCBuDQowMDAwNTYxODY1IDAwMDAwIG4NCjAwMDA1NjE5MzYgMDAwMDAgbg0KMDAw MDU2MjAwNyAwMDAwMCBuDQowMDAwNTYyMDc4IDAwMDAwIG4NCjAwMDA1NjIxNDkgMDAwMDAgbg0K MDAwMDU2MjIyMCAwMDAwMCBuDQowMDAwNTYyMjkxIDAwMDAwIG4NCjAwMDA1NjIzNjIgMDAwMDAg bg0KMDAwMDU2MjQzMyAwMDAwMCBuDQowMDAwNTYyNTA0IDAwMDAwIG4NCjAwMDA1NjI1NzUgMDAw MDAgbg0KMDAwMDU2MjY0NiAwMDAwMCBuDQowMDAwNTYyNzkyIDAwMDAwIG4NCjAwMDA1NjI4NDkg MDAwMDAgbg0KMDAwMDU2MjkwMiAwMDAwMCBuDQowMDAwNTYyOTYyIDAwMDAwIG4NCjAwMDA1NjMx MDggMDAwMDAgbg0KMDAwMDU2MzE2NSAwMDAwMCBuDQowMDAwNTYzMjE4IDAwMDAwIG4NCjAwMDA1 NjMyNzggMDAwMDAgbg0KMDAwMDU2MzQyNCAwMDAwMCBuDQowMDAwNTYzNDgxIDAwMDAwIG4NCjAw MDA1NjM1MzQgMDAwMDAgbg0KMDAwMDU2MzU5NCAwMDAwMCBuDQowMDAwNTYzNzQwIDAwMDAwIG4N CjAwMDA1NjM3OTcgMDAwMDAgbg0KMDAwMDU2Mzg1MCAwMDAwMCBuDQowMDAwNTYzOTEwIDAwMDAw IG4NCjAwMDA1NjQwNTYgMDAwMDAgbg0KMDAwMDU2NDExMyAwMDAwMCBuDQowMDAwNTY0MTY2IDAw MDAwIG4NCjAwMDA1NjQyMjYgMDAwMDAgbg0KMDAwMDU2NDM3MiAwMDAwMCBuDQowMDAwNTY0NDI5 IDAwMDAwIG4NCjAwMDA1NjQ0ODIgMDAwMDAgbg0KMDAwMDU2NDU0MiAwMDAwMCBuDQowMDAwNTY0 Njg4IDAwMDAwIG4NCjAwMDA1NjQ3NDUgMDAwMDAgbg0KMDAwMDU2NDc5OCAwMDAwMCBuDQowMDAw NTY0ODU4IDAwMDAwIG4NCjAwMDA1NjUwMDQgMDAwMDAgbg0KMDAwMDU2NTA2MSAwMDAwMCBuDQow MDAwNTY1MTE0IDAwMDAwIG4NCjAwMDA1NjUxNzQgMDAwMDAgbg0KMDAwMDU2NTMyMCAwMDAwMCBu DQowMDAwNTY1Mzc3IDAwMDAwIG4NCjAwMDA1NjU0MzAgMDAwMDAgbg0KMDAwMDU2NTQ5MCAwMDAw MCBuDQowMDAwNTY1NjM2IDAwMDAwIG4NCjAwMDA1NjU2OTMgMDAwMDAgbg0KMDAwMDU2NTc0NiAw MDAwMCBuDQowMDAwNTY1ODA2IDAwMDAwIG4NCjAwMDA1NjU5NTIgMDAwMDAgbg0KMDAwMDU2NjAw OSAwMDAwMCBuDQowMDAwNTY2MDYyIDAwMDAwIG4NCjAwMDA1NjYxMjIgMDAwMDAgbg0KMDAwMDU2 NjI2NSAwMDAwMCBuDQowMDAwNTY2MzM2IDAwMDAwIG4NCjAwMDA1NjY0MTcgMDAwMDAgbg0KMDAw MDU2NjQ4OCAwMDAwMCBuDQowMDAwNTY2NTYzIDAwMDAwIG4NCjAwMDA1NjY3MDYgMDAwMDAgbg0K MDAwMDU2NjgzNiAwMDAwMCBuDQowMDAwNTY3MTQ2IDAwMDAwIG4NCjAwMDA1NjcyMjMgMDAwMDAg bg0KMDAwMDU2NzMwMCAwMDAwMCBuDQowMDAwNTY3NDQzIDAwMDAwIG4NCjAwMDA1Njc1ODYgMDAw MDAgbg0KMDAwMDU2Nzg1MiAwMDAwMCBuDQowMDAwNTY3OTMwIDAwMDAwIG4NCjAwMDA1NjgwNzMg MDAwMDAgbg0KMDAwMDU2ODE0NCAwMDAwMCBuDQowMDAwNTY4MjE1IDAwMDAwIG4NCjAwMDA1Njgy ODYgMDAwMDAgbg0KMDAwMDU2ODM1NyAwMDAwMCBuDQowMDAwNTY4NDI4IDAwMDAwIG4NCjAwMDA1 Njg0OTkgMDAwMDAgbg0KMDAwMDU2ODU3MCAwMDAwMCBuDQowMDAwNTY4NzEyIDAwMDAwIG4NCjAw MDA1Njg4NTQgMDAwMDAgbg0KMDAwMDU2ODk5NiAwMDAwMCBuDQowMDAwNTY5MTM4IDAwMDAwIG4N CjAwMDA1NjkyODAgMDAwMDAgbg0KMDAwMDU2OTQyMiAwMDAwMCBuDQowMDAwNTY5NTY0IDAwMDAw IG4NCjAwMDA1Njk3MDcgMDAwMDAgbg0KMDAwMDU2OTg1MCAwMDAwMCBuDQowMDAwNTY5OTkzIDAw MDAwIG4NCjAwMDA1NzAxMzYgMDAwMDAgbg0KMDAwMDU3MDI3OSAwMDAwMCBuDQowMDAwNTcwNDIy IDAwMDAwIG4NCjAwMDA1NzA1NjUgMDAwMDAgbg0KMDAwMDU3MDcwOCAwMDAwMCBuDQowMDAwNTcw ODUxIDAwMDAwIG4NCjAwMDA1NzA5OTQgMDAwMDAgbg0KMDAwMDU3MTA4NCAwMDAwMCBuDQowMDAw NTcxMTYyIDAwMDAwIG4NCjAwMDA1NzEyMjkgMDAwMDAgbg0KMDAwMDU3MTMwMiAwMDAwMCBuDQow MDAwNTcxNzM1IDAwMDAwIG4NCjAwMDA1NzIwODcgMDAwMDAgbg0KMDAwMDU3MjE0MSAwMDAwMCBu DQowMDAwNTcyMjA1IDAwMDAwIG4NCjAwMDA1NzIyNTkgMDAwMDAgbg0KMDAwMDU3MjMxMyAwMDAw MCBuDQowMDAwNTcyMzY3IDAwMDAwIG4NCjAwMDA1NzI0MjEgMDAwMDAgbg0KMDAwMDU3MjQ3NSAw MDAwMCBuDQowMDAwNTcyNTI5IDAwMDAwIG4NCjAwMDA1NzI1ODMgMDAwMDAgbg0KMDAwMDU3MjYz NyAwMDAwMCBuDQowMDAwNTcyNjkxIDAwMDAwIG4NCjAwMDA1NzI3NDUgMDAwMDAgbg0KMDAwMDU3 Mjc5OSAwMDAwMCBuDQowMDAwNTcyODUzIDAwMDAwIG4NCjAwMDA1NzI5MzUgMDAwMDAgbg0KMDAw MDU3MzAyNiAwMDAwMCBuDQowMDAwNTczMDkyIDAwMDAwIG4NCjAwMDA1NzMxNTggMDAwMDAgbg0K MDAwMDU3MzIyNiAwMDAwMCBuDQowMDAwNTczMzM2IDAwMDAwIG4NCjAwMDA1NzM0NDYgMDAwMDAg bg0KMDAwMDU3MzU1NCAwMDAwMCBuDQowMDAwNTczNjI0IDAwMDAwIG4NCjAwMDA1NzM3NjQgMDAw MDAgbg0KMDAwMDU3MzgzNSAwMDAwMCBuDQowMDAwNTczOTA2IDAwMDAwIG4NCjAwMDA1NzM5NzYg MDAwMDAgbg0KMDAwMDU3NDExOSAwMDAwMCBuDQowMDAwNTc0MjYwIDAwMDAwIG4NCjAwMDA1NzQ0 MDEgMDAwMDAgbg0KMDAwMDU3NDQ3MiAwMDAwMCBuDQowMDAwNTc0NTQzIDAwMDAwIG4NCjAwMDA1 NzQ2MTQgMDAwMDAgbg0KMDAwMDU3NDY4NSAwMDAwMCBuDQowMDAwNTc0NzU2IDAwMDAwIG4NCjAw MDA1NzQ4MjcgMDAwMDAgbg0KMDAwMDU3NDg5OCAwMDAwMCBuDQowMDAwNTc0OTY5IDAwMDAwIG4N CjAwMDA1NzUwNDAgMDAwMDAgbg0KMDAwMDU3NTExMSAwMDAwMCBuDQowMDAwNTc1MTgyIDAwMDAw IG4NCjAwMDA1NzUzMjYgMDAwMDAgbg0KMDAwMDU3NTM4MiAwMDAwMCBuDQowMDAwNTc1NDM1IDAw MDAwIG4NCjAwMDA1NzU0OTQgMDAwMDAgbg0KMDAwMDU3NTYzOCAwMDAwMCBuDQowMDAwNTc1Njk0 IDAwMDAwIG4NCjAwMDA1NzU3NDcgMDAwMDAgbg0KMDAwMDU3NTgwNiAwMDAwMCBuDQowMDAwNTc1 OTUwIDAwMDAwIG4NCjAwMDA1NzYwMDYgMDAwMDAgbg0KMDAwMDU3NjA1OSAwMDAwMCBuDQowMDAw NTc2MTE4IDAwMDAwIG4NCjAwMDA1NzYyNjIgMDAwMDAgbg0KMDAwMDU3NjMxOCAwMDAwMCBuDQow MDAwNTc2MzcxIDAwMDAwIG4NCjAwMDA1NzY0MzAgMDAwMDAgbg0KMDAwMDU3NjU3NCAwMDAwMCBu DQowMDAwNTc2NjI5IDAwMDAwIG4NCjAwMDA1NzY2ODIgMDAwMDAgbg0KMDAwMDU3Njc0NSAwMDAw MCBuDQowMDAwNTc2ODg5IDAwMDAwIG4NCjAwMDA1NzY5NDUgMDAwMDAgbg0KMDAwMDU3Njk5OCAw MDAwMCBuDQowMDAwNTc3MDU3IDAwMDAwIG4NCjAwMDA1NzcyMDEgMDAwMDAgbg0KMDAwMDU3NzI1 NyAwMDAwMCBuDQowMDAwNTc3MzEwIDAwMDAwIG4NCjAwMDA1NzczNjkgMDAwMDAgbg0KMDAwMDU3 NzUxMyAwMDAwMCBuDQowMDAwNTc3NTY4IDAwMDAwIG4NCjAwMDA1Nzc2MjEgMDAwMDAgbg0KMDAw MDU3NzY4NCAwMDAwMCBuDQowMDAwNTc3ODI4IDAwMDAwIG4NCjAwMDA1Nzc4ODMgMDAwMDAgbg0K MDAwMDU3NzkzNiAwMDAwMCBuDQowMDAwNTc3OTk5IDAwMDAwIG4NCjAwMDA1NzgxNDMgMDAwMDAg bg0KMDAwMDU3ODE5OSAwMDAwMCBuDQowMDAwNTc4MjUyIDAwMDAwIG4NCjAwMDA1NzgzMTEgMDAw MDAgbg0KMDAwMDU3ODQ1NSAwMDAwMCBuDQowMDAwNTc4NTExIDAwMDAwIG4NCjAwMDA1Nzg1NjQg MDAwMDAgbg0KMDAwMDU3ODYyMyAwMDAwMCBuDQowMDAwNTc4NzY2IDAwMDAwIG4NCjAwMDA1Nzg4 MzYgMDAwMDAgbg0KMDAwMDU3ODkwNiAwMDAwMCBuDQowMDAwNTc5MDE5IDAwMDAwIG4NCjAwMDA1 NzkwODkgMDAwMDAgbg0KMDAwMDU3OTIzMiAwMDAwMCBuDQowMDAwNTc5MzAzIDAwMDAwIG4NCjAw MDA1NzkzNzQgMDAwMDAgbg0KMDAwMDU3OTQ0NSAwMDAwMCBuDQowMDAwNTc5NTE2IDAwMDAwIG4N CjAwMDA1Nzk1ODcgMDAwMDAgbg0KMDAwMDU3OTY1OCAwMDAwMCBuDQowMDAwNTc5NzI5IDAwMDAw IG4NCjAwMDA1Nzk4MDAgMDAwMDAgbg0KMDAwMDU3OTk0NCAwMDAwMCBuDQowMDAwNTgwMDAwIDAw MDAwIG4NCjAwMDA1ODAwNTMgMDAwMDAgbg0KMDAwMDU4MDExMiAwMDAwMCBuDQowMDAwNTgwMjU2 IDAwMDAwIG4NCjAwMDA1ODAzMTIgMDAwMDAgbg0KMDAwMDU4MDM2NSAwMDAwMCBuDQowMDAwNTgw NDI0IDAwMDAwIG4NCjAwMDA1ODA1NjggMDAwMDAgbg0KMDAwMDU4MDYyNCAwMDAwMCBuDQowMDAw NTgwNjc3IDAwMDAwIG4NCjAwMDA1ODA3MzYgMDAwMDAgbg0KMDAwMDU4MDg4MCAwMDAwMCBuDQow MDAwNTgwOTM2IDAwMDAwIG4NCjAwMDA1ODA5ODkgMDAwMDAgbg0KMDAwMDU4MTA0OCAwMDAwMCBu DQowMDAwNTgxMTkyIDAwMDAwIG4NCjAwMDA1ODEyNDggMDAwMDAgbg0KMDAwMDU4MTMwMSAwMDAw MCBuDQowMDAwNTgxMzYwIDAwMDAwIG4NCjAwMDA1ODE1MDQgMDAwMDAgbg0KMDAwMDU4MTU2MCAw MDAwMCBuDQowMDAwNTgxNjEzIDAwMDAwIG4NCjAwMDA1ODE2NzIgMDAwMDAgbg0KMDAwMDU4MTgx NiAwMDAwMCBuDQowMDAwNTgxODcyIDAwMDAwIG4NCjAwMDA1ODE5MjUgMDAwMDAgbg0KMDAwMDU4 MTk4NCAwMDAwMCBuDQowMDAwNTgyMTI4IDAwMDAwIG4NCjAwMDA1ODIxODQgMDAwMDAgbg0KMDAw MDU4MjIzNyAwMDAwMCBuDQowMDAwNTgyMjk2IDAwMDAwIG4NCjAwMDA1ODI0MzkgMDAwMDAgbg0K MDAwMDU4MjU4MiAwMDAwMCBuDQowMDAwNTgyNjYyIDAwMDAwIG4NCjAwMDA1ODI4MDUgMDAwMDAg bg0KMDAwMDU4MjkxMCAwMDAwMCBuDQowMDAwNTgyOTg5IDAwMDAwIG4NCjAwMDA1ODMwNTkgMDAw MDAgbg0KMDAwMDU4MzIwMiAwMDAwMCBuDQowMDAwNTgzMjcyIDAwMDAwIG4NCjAwMDA1ODM0MTUg MDAwMDAgbg0KMDAwMDU4MzQ4OSAwMDAwMCBuDQowMDAwNTgzNjMyIDAwMDAwIG4NCjAwMDA1ODM3 MDIgMDAwMDAgbg0KMDAwMDU4Mzg0NSAwMDAwMCBuDQowMDAwNTgzOTE5IDAwMDAwIG4NCjAwMDA1 ODQwNjIgMDAwMDAgbg0KMDAwMDU4NDEzNiAwMDAwMCBuDQowMDAwNTg0Mjc5IDAwMDAwIG4NCjAw MDA1ODQzNTMgMDAwMDAgbg0KMDAwMDU4NDQ5NiAwMDAwMCBuDQowMDAwNTg0NTY2IDAwMDAwIG4N CjAwMDA1ODQ3MDcgMDAwMDAgbg0KMDAwMDU4NDc3NyAwMDAwMCBuDQowMDAwNTg0OTIwIDAwMDAw IG4NCjAwMDA1ODQ5OTggMDAwMDAgbg0KMDAwMDU4NTE0MSAwMDAwMCBuDQowMDAwNTg1MjExIDAw MDAwIG4NCjAwMDA1ODUzNTQgMDAwMDAgbg0KMDAwMDU4NTQyNCAwMDAwMCBuDQowMDAwNTg1NDk0 IDAwMDAwIG4NCjAwMDA1ODU2MzcgMDAwMDAgbg0KMDAwMDU4NTc3OCAwMDAwMCBuDQowMDAwNTg1 ODQ3IDAwMDAwIG4NCjAwMDA1ODU5OTAgMDAwMDAgbg0KMDAwMDU4NjA1OSAwMDAwMCBuDQowMDAw NTg2MTI4IDAwMDAwIG4NCjAwMDA1ODYxOTggMDAwMDAgbg0KMDAwMDU4NjI2NyAwMDAwMCBuDQow MDAwNTg2MzM2IDAwMDAwIG4NCjAwMDA1ODY0MDUgMDAwMDAgbg0KMDAwMDU4NjQ3NCAwMDAwMCBu DQowMDAwNTg2NTQzIDAwMDAwIG4NCjAwMDA1ODY2MTIgMDAwMDAgbg0KMDAwMDU4NjY4MSAwMDAw MCBuDQowMDAwNTg2NzUwIDAwMDAwIG4NCjAwMDA1ODY4MTkgMDAwMDAgbg0KMDAwMDU4Njg4OCAw MDAwMCBuDQowMDAwNTg2OTU3IDAwMDAwIG4NCjAwMDA1ODcwMjYgMDAwMDAgbg0KMDAwMDU4NzA5 NSAwMDAwMCBuDQowMDAwNTg3MTY0IDAwMDAwIG4NCjAwMDA1ODcyMzMgMDAwMDAgbg0KMDAwMDU4 NzMwMiAwMDAwMCBuDQowMDAwNTg3MzcxIDAwMDAwIG4NCjAwMDA1ODc0NDAgMDAwMDAgbg0KMDAw MDU4NzUwOSAwMDAwMCBuDQowMDAwNTg3NTc4IDAwMDAwIG4NCjAwMDA1ODc2NDcgMDAwMDAgbg0K MDAwMDU4NzcxNiAwMDAwMCBuDQowMDAwNTg3Nzg1IDAwMDAwIG4NCjAwMDA1ODc4NTQgMDAwMDAg bg0KMDAwMDU4NzkyMyAwMDAwMCBuDQowMDAwNTg3OTkzIDAwMDAwIG4NCjAwMDA1ODgwNjIgMDAw MDAgbg0KMDAwMDU4ODEzMSAwMDAwMCBuDQowMDAwNTg4MjAwIDAwMDAwIG4NCjAwMDA1ODgyNjkg MDAwMDAgbg0KMDAwMDU4ODMzOCAwMDAwMCBuDQowMDAwNTg4NDc5IDAwMDAwIG4NCjAwMDA1ODg2 MjAgMDAwMDAgbg0KMDAwMDU4ODc2MSAwMDAwMCBuDQowMDAwNTg4OTAyIDAwMDAwIG4NCjAwMDA1 ODkwNDMgMDAwMDAgbg0KMDAwMDU4OTE4NCAwMDAwMCBuDQowMDAwNTg5MzI1IDAwMDAwIG4NCjAw MDA1ODk0NjYgMDAwMDAgbg0KMDAwMDU4OTYwNyAwMDAwMCBuDQowMDAwNTg5NzQ4IDAwMDAwIG4N CjAwMDA1ODk4ODkgMDAwMDAgbg0KMDAwMDU5MDAzMCAwMDAwMCBuDQowMDAwNTkwMTcxIDAwMDAw IG4NCjAwMDA1OTAzMTIgMDAwMDAgbg0KMDAwMDU5MDQ1MyAwMDAwMCBuDQowMDAwNTkwNTk0IDAw MDAwIG4NCjAwMDA1OTA3MzUgMDAwMDAgbg0KMDAwMDU5MDg3NiAwMDAwMCBuDQowMDAwNTkxMDE3 IDAwMDAwIG4NCjAwMDA1OTExNTggMDAwMDAgbg0KMDAwMDU5MTI5OSAwMDAwMCBuDQowMDAwNTkx NDQwIDAwMDAwIG4NCjAwMDA1OTE1ODEgMDAwMDAgbg0KMDAwMDU5MTcyMiAwMDAwMCBuDQowMDAw NTkxODY1IDAwMDAwIG4NCjAwMDA1OTIwMDggMDAwMDAgbg0KMDAwMDU5MjE1MSAwMDAwMCBuDQow MDAwNTkyMjk0IDAwMDAwIG4NCjAwMDA1OTI0MzcgMDAwMDAgbg0KMDAwMDU5MjU3OCAwMDAwMCBu DQowMDAwNTkyNzE5IDAwMDAwIG4NCjAwMDA1OTI4NjAgMDAwMDAgbg0KMDAwMDU5MzAwMyAwMDAw MCBuDQowMDAwNTkzMTQ0IDAwMDAwIG4NCjAwMDA1OTMyMTMgMDAwMDAgbg0KMDAwMDU5MzI4MiAw MDAwMCBuDQowMDAwNTkzMzUxIDAwMDAwIG4NCjAwMDA1OTM0MjAgMDAwMDAgbg0KMDAwMDU5MzQ4 OSAwMDAwMCBuDQowMDAwNTkzNTU4IDAwMDAwIG4NCjAwMDA1OTM2MjcgMDAwMDAgbg0KMDAwMDU5 MzY5NiAwMDAwMCBuDQowMDAwNTkzNzY1IDAwMDAwIG4NCjAwMDA1OTM4MzQgMDAwMDAgbg0KMDAw MDU5MzkwMyAwMDAwMCBuDQowMDAwNTkzOTcyIDAwMDAwIG4NCjAwMDA1OTQwNDEgMDAwMDAgbg0K MDAwMDU5NDExMCAwMDAwMCBuDQowMDAwNTk0MTc5IDAwMDAwIG4NCjAwMDA1OTQyNDggMDAwMDAg bg0KMDAwMDU5NDMxNyAwMDAwMCBuDQowMDAwNTk0Mzg2IDAwMDAwIG4NCjAwMDA1OTQ0NTUgMDAw MDAgbg0KMDAwMDU5NDUyNCAwMDAwMCBuDQowMDAwNTk0NTkzIDAwMDAwIG4NCjAwMDA1OTQ2NjIg MDAwMDAgbg0KMDAwMDU5NDczMSAwMDAwMCBuDQowMDAwNTk0ODAwIDAwMDAwIG4NCjAwMDA1OTQ4 NjkgMDAwMDAgbg0KMDAwMDU5NDkzOCAwMDAwMCBuDQowMDAwNTk1MDA3IDAwMDAwIG4NCjAwMDA1 OTUwNzYgMDAwMDAgbg0KMDAwMDU5NTE0NSAwMDAwMCBuDQowMDAwNTk1MjE0IDAwMDAwIG4NCjAw MDA1OTUyODMgMDAwMDAgbg0KMDAwMDU5NTM1MiAwMDAwMCBuDQowMDAwNTk1NDIxIDAwMDAwIG4N CjAwMDA1OTU0OTAgMDAwMDAgbg0KMDAwMDU5NTU1OSAwMDAwMCBuDQowMDAwNTk1NjI4IDAwMDAw IG4NCjAwMDA1OTU2OTcgMDAwMDAgbg0KMDAwMDU5NTc2NiAwMDAwMCBuDQowMDAwNTk1ODM1IDAw MDAwIG4NCjAwMDA1OTU5MDQgMDAwMDAgbg0KMDAwMDU5NTk3MyAwMDAwMCBuDQowMDAwNTk2MDQy IDAwMDAwIG4NCjAwMDA1OTYxMTEgMDAwMDAgbg0KMDAwMDU5NjI1MiAwMDAwMCBuDQowMDAwNTk2 MzkzIDAwMDAwIG4NCjAwMDA1OTY1MzQgMDAwMDAgbg0KMDAwMDU5NjY3NSAwMDAwMCBuDQowMDAw NTk2ODE2IDAwMDAwIG4NCjAwMDA1OTY5NTcgMDAwMDAgbg0KMDAwMDU5NzA5OCAwMDAwMCBuDQow MDAwNTk3MjM5IDAwMDAwIG4NCjAwMDA1OTczODAgMDAwMDAgbg0KMDAwMDU5NzUyMSAwMDAwMCBu DQowMDAwNTk3NjYyIDAwMDAwIG4NCjAwMDA1OTc4MDMgMDAwMDAgbg0KMDAwMDU5Nzk0NCAwMDAw MCBuDQowMDAwNTk4MDg1IDAwMDAwIG4NCjAwMDA1OTgyMjYgMDAwMDAgbg0KMDAwMDU5ODM2NyAw MDAwMCBuDQowMDAwNTk4NTA4IDAwMDAwIG4NCjAwMDA1OTg2NDkgMDAwMDAgbg0KMDAwMDU5ODc5 MiAwMDAwMCBuDQowMDAwNTk4OTM1IDAwMDAwIG4NCjAwMDA1OTkwNzggMDAwMDAgbg0KMDAwMDU5 OTIyMSAwMDAwMCBuDQowMDAwNTk5MzY0IDAwMDAwIG4NCjAwMDA1OTk1MDcgMDAwMDAgbg0KMDAw MDU5OTY1MCAwMDAwMCBuDQowMDAwNTk5NzkzIDAwMDAwIG4NCjAwMDA1OTk5MzYgMDAwMDAgbg0K MDAwMDYwMDA3OSAwMDAwMCBuDQowMDAwNjAwMjI0IDAwMDAwIG4NCjAwMDA2MDAzNjcgMDAwMDAg bg0KMDAwMDYwMDUxMCAwMDAwMCBuDQowMDAwNjAwNjUzIDAwMDAwIG4NCjAwMDA2MDA3OTYgMDAw MDAgbg0KMDAwMDYwMDkzOSAwMDAwMCBuDQowMDAwNjAxMDgyIDAwMDAwIG4NCjAwMDA2MDEyMjUg MDAwMDAgbg0KMDAwMDYwMTM2OCAwMDAwMCBuDQowMDAwNjAxNTExIDAwMDAwIG4NCjAwMDA2MDE2 NTQgMDAwMDAgbg0KMDAwMDYwMTc5NyAwMDAwMCBuDQowMDAwNjAxOTQwIDAwMDAwIG4NCjAwMDA2 MDIwODMgMDAwMDAgbg0KMDAwMDYwMjIyNiAwMDAwMCBuDQowMDAwNjAyMzAxIDAwMDAwIG4NCjAw MDA2MDIzNjkgMDAwMDAgbg0KMDAwMDYwMjQzOCAwMDAwMCBuDQowMDAwNjAyNTgyIDAwMDAwIG4N CjAwMDA2MDI3MjYgMDAwMDAgbg0KMDAwMDYwMjg2OSAwMDAwMCBuDQowMDAwNjAzMDEwIDAwMDAw IG4NCjAwMDA2MDMxNTMgMDAwMDAgbg0KMDAwMDYwMzI5NCAwMDAwMCBuDQowMDAwNjAzMzYzIDAw MDAwIG4NCjAwMDA2MDM0MzIgMDAwMDAgbg0KMDAwMDYwMzUwMSAwMDAwMCBuDQowMDAwNjAzNTcw IDAwMDAwIG4NCjAwMDA2MDM2MzkgMDAwMDAgbg0KMDAwMDYwMzcwOCAwMDAwMCBuDQowMDAwNjAz Nzc4IDAwMDAwIG4NCjAwMDA2MDM4NDggMDAwMDAgbg0KMDAwMDYwMzkxNyAwMDAwMCBuDQowMDAw NjAzOTg2IDAwMDAwIG4NCjAwMDA2MDQwNTUgMDAwMDAgbg0KMDAwMDYwNDEyNCAwMDAwMCBuDQow MDAwNjA0MTkzIDAwMDAwIG4NCjAwMDA2MDQyNjMgMDAwMDAgbg0KMDAwMDYwNDMzMiAwMDAwMCBu DQowMDAwNjA0NDAxIDAwMDAwIG4NCjAwMDA2MDQ0NzAgMDAwMDAgbg0KMDAwMDYwNDU0MCAwMDAw MCBuDQowMDAwNjA0NjEwIDAwMDAwIG4NCjAwMDA2MDQ2ODAgMDAwMDAgbg0KMDAwMDYwNDc0OSAw MDAwMCBuDQowMDAwNjA0ODE4IDAwMDAwIG4NCjAwMDA2MDQ4ODcgMDAwMDAgbg0KMDAwMDYwNDk1 NiAwMDAwMCBuDQowMDAwNjA1MDI1IDAwMDAwIG4NCjAwMDA2MDUwOTQgMDAwMDAgbg0KMDAwMDYw NTE2MyAwMDAwMCBuDQowMDAwNjA1MjMzIDAwMDAwIG4NCjAwMDA2MDUzMDMgMDAwMDAgbg0KMDAw MDYwNTM3MyAwMDAwMCBuDQowMDAwNjA1NDQzIDAwMDAwIG4NCjAwMDA2MDU1MTMgMDAwMDAgbg0K MDAwMDYwNTU4MyAwMDAwMCBuDQowMDAwNjA1NjUzIDAwMDAwIG4NCjAwMDA2MDU3MjMgMDAwMDAg bg0KMDAwMDYwNTc5MyAwMDAwMCBuDQowMDAwNjA1ODYyIDAwMDAwIG4NCjAwMDA2MDU5MzEgMDAw MDAgbg0KMDAwMDYwNjA3NCAwMDAwMCBuDQowMDAwNjA2MjE3IDAwMDAwIG4NCjAwMDA2MDYzNTgg MDAwMDAgbg0KMDAwMDYwNjQ5OSAwMDAwMCBuDQowMDAwNjA2NjQwIDAwMDAwIG4NCjAwMDA2MDY3 ODEgMDAwMDAgbg0KMDAwMDYwNjkyMiAwMDAwMCBuDQowMDAwNjA3MDYzIDAwMDAwIG4NCjAwMDA2 MDcyMDQgMDAwMDAgbg0KMDAwMDYwNzM0NSAwMDAwMCBuDQowMDAwNjA3NDg2IDAwMDAwIG4NCjAw MDA2MDc2MjcgMDAwMDAgbg0KMDAwMDYwNzc2OCAwMDAwMCBuDQowMDAwNjA3OTA5IDAwMDAwIG4N CjAwMDA2MDgwNTAgMDAwMDAgbg0KMDAwMDYwODE5MSAwMDAwMCBuDQowMDAwNjA4MzMyIDAwMDAw IG4NCjAwMDA2MDg0NzMgMDAwMDAgbg0KMDAwMDYwODYxNCAwMDAwMCBuDQowMDAwNjA4NzU1IDAw MDAwIG4NCjAwMDA2MDg4OTYgMDAwMDAgbg0KMDAwMDYwOTAzNyAwMDAwMCBuDQowMDAwNjA5MTc4 IDAwMDAwIG4NCjAwMDA2MDkzMTkgMDAwMDAgbg0KMDAwMDYwOTQ2MCAwMDAwMCBuDQowMDAwNjA5 NjAxIDAwMDAwIG4NCjAwMDA2MDk3NDIgMDAwMDAgbg0KMDAwMDYwOTg4MyAwMDAwMCBuDQowMDAw NjEwMDI5IDAwMDAwIG4NCjAwMDA2MTAxNzUgMDAwMDAgbg0KMDAwMDYxMDMxNiAwMDAwMCBuDQow MDAwNjEwNDU3IDAwMDAwIG4NCjAwMDA2MTA1OTggMDAwMDAgbg0KMDAwMDYxMDczOSAwMDAwMCBu DQowMDAwNjEwODgwIDAwMDAwIG4NCjAwMDA2MTEwMjQgMDAwMDAgbg0KMDAwMDYxMTE2NyAwMDAw MCBuDQowMDAwNjExMzA4IDAwMDAwIG4NCjAwMDA2MTE0MDYgMDAwMDAgbg0KMDAwMDYxNDk4NiAw MDAwMCBuDQp0cmFpbGVyDQo8PC9TaXplIDIwNDc+Pg0Kc3RhcnR4cmVmDQoxMTYNCiUlRU9GDQo= ------=_NextPart_000_004A_01CA03D9.306B10B0-- From olaf@sgi.com Mon Jul 13 04:32:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6D9WPBA038570 for ; Mon, 13 Jul 2009 04:32:26 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6D9X3QI333196; Mon, 13 Jul 2009 11:33:03 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6D9X363333290; Mon, 13 Jul 2009 11:33:03 +0200 (MEST) To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format References: <4A582070.9040907@sandeen.net> From: Olaf Weber Date: Mon, 13 Jul 2009 11:33:02 +0200 In-Reply-To: <4A582070.9040907@sandeen.net> (Eric Sandeen's message of "Sat, 11 Jul 2009 00:17:36 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: [...] > But questions remain... > 1) How'd it get into this state? ... but maybe more importantly... > 2) Should these really get cleared? It's possibly a sane extent list, > it's just that it -could- be in extents rather than btree format... > 3) By the same token, should the kernel really be choking on it? It is not clear to me yet how you could get into this state, but this is clearly an invariant the kernel actively maintains. If the kernel "just" missed the underflow and kept the extents in btree format, then I don't see an apriori reason why the extent list as such would be invalid (as opposed to inefficiently stored). If that's the primary model for getting into this state, then the file contents can be rescued and kernel-side the event should be survivable. But if the kernel tried to convert, failed, and didn't properly detect failure... Without having a good answer for (1) I find it hard to convince myself that to be more forgiving wrt to (2) and (3) is safe. Olaf > Signed-off-by: Eric Sandeen Acked-By: Olaf Weber > --- > diff --git a/repair/dinode.c b/repair/dinode.c > index 84e1d05..3fc6cac 100644 > --- a/repair/dinode.c > +++ b/repair/dinode.c > @@ -1280,6 +1280,14 @@ process_btinode( > last_key = cursor.level[level-1].first_key; > } > } > + if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { > + do_warn(_("extent count for ino %lld %s fork too low " > + "(%d) for file format\n"), > + lino, > + whichfork == XFS_DATA_FORK ? _("data") : _("attr"), > + *nex); > + return(1); > + } > /* > * Check that the last child block's forward sibling pointer > * is NULL. -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From julia@diku.dk Mon Jul 13 05:09:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6DA9WP5040312 for ; Mon, 13 Jul 2009 05:09:32 -0500 X-ASG-Debug-ID: 1247479808-2e26023b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mgw2.diku.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1BE1B35C7EF; Mon, 13 Jul 2009 03:10:09 -0700 (PDT) Received: from mgw2.diku.dk (mgw2.diku.dk [130.225.96.92]) by cuda.sgi.com with ESMTP id if5eyETfn3k8AdSi; Mon, 13 Jul 2009 03:10:09 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mgw2.diku.dk (Postfix) with ESMTP id E72DA19BD0D; Mon, 13 Jul 2009 12:10:07 +0200 (CEST) Received: from mgw2.diku.dk ([127.0.0.1]) by localhost (mgw2.diku.dk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 02345-03; Mon, 13 Jul 2009 12:10:05 +0200 (CEST) Received: from nhugin.diku.dk (nhugin.diku.dk [130.225.96.140]) by mgw2.diku.dk (Postfix) with ESMTP id E037219BD0A; Mon, 13 Jul 2009 12:10:05 +0200 (CEST) Received: from ask.diku.dk (ask.diku.dk [130.225.96.225]) by nhugin.diku.dk (Postfix) with ESMTP id 1DEBB6DF835; Mon, 13 Jul 2009 12:09:42 +0200 (CEST) Received: by ask.diku.dk (Postfix, from userid 3767) id C98B3154A55; Mon, 13 Jul 2009 12:10:05 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by ask.diku.dk (Postfix) with ESMTP id C438B1547DF; Mon, 13 Jul 2009 12:10:05 +0200 (CEST) Date: Mon, 13 Jul 2009 12:10:05 +0200 (CEST) From: Julia Lawall To: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org X-ASG-Orig-Subj: [PATCH 1/2] fs/xfs: Drop unnecessary NULL test Subject: [PATCH 1/2] fs/xfs: Drop unnecessary NULL test Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at diku.dk X-Barracuda-Connect: mgw2.diku.dk[130.225.96.92] X-Barracuda-Start-Time: 1247479810 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3280 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean From: Julia Lawall The result of container_of should not be NULL. In particular, in this case the argument to the enclosing function has passed though INIT_DELAYED_WORK, which dereferences it, implying that its container cannot be NULL. The semantic match that finds this problem is as follows: (http://www.emn.fr/x-info/coccinelle/) // @@ expression x,e; @@ x = container_of(...) ... when != x = e * x == NULL // Signed-off-by: Julia Lawall --- fs/xfs/xfs_mru_cache.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c index 4b0613d..0651ce7 100644 --- a/fs/xfs/xfs_mru_cache.c +++ b/fs/xfs/xfs_mru_cache.c @@ -280,8 +280,8 @@ _xfs_mru_cache_reap( xfs_mru_cache_t *mru = container_of(work, xfs_mru_cache_t, work.work); unsigned long now, next; - ASSERT(mru && mru->lists); - if (!mru || !mru->lists) + ASSERT(mru->lists); + if (!mru->lists) return; spin_lock(&mru->lock); From olaf@sgi.com Mon Jul 13 06:28:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6DBS8Fo044520 for ; Mon, 13 Jul 2009 06:28:09 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6DBSkhc333892; Mon, 13 Jul 2009 13:28:46 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6DBSjIK333904; Mon, 13 Jul 2009 13:28:45 +0200 (MEST) To: crow al Cc: Subject: Re: How to simulate journal corruption References: From: Olaf Weber Date: Mon, 13 Jul 2009 13:28:45 +0200 In-Reply-To: (crow al's message of "Mon, 13 Jul 2009 13:55:05 +0800") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean crow al writes: > Hi, there > I'm a QA engineer from Cisco. I'm working on a test case concerning > XFS journal playback failure, which needs to manually inject error > to XFS. > I did some google work but get no luck. Then I think maybe XFA-QA > could give me some advice. That why I come to here. > Is there anyone could tell me how to inject error into XFS or is > there any tool could be used? For clobbering a filesystem image in general you can use fsfuzz. http://people.redhat.com/sgrubb/files/fsfuzzer-0.7.tar.gz If log replay is of particular interest, you might want to modify that code to target the XFS log in particular. The XFS QA tests do not, IIRC, contain tests that deliberately trash the XFS log, but there are some tests that exercise log replay, and you may want to take a look at those to see ways to get an XFS filesystem image with a non-empty log to replay. Note that kernel-side, if log replay fails the expected/desired result is that kernel won't mount the filesystem. -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Mon Jul 13 09:33:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6DEXTQH053477 for ; Mon, 13 Jul 2009 09:33:29 -0500 X-ASG-Debug-ID: 1247496091-588a02e90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6B9DF10A1CBC for ; Mon, 13 Jul 2009 07:41:31 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id CMI6BbFpvm82E4Vn for ; Mon, 13 Jul 2009 07:41:31 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 47824A9BF34; Mon, 13 Jul 2009 09:34:05 -0500 (CDT) Message-ID: <4A5B45DC.5070408@sandeen.net> Date: Mon, 13 Jul 2009 09:34:04 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Olaf Weber CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Subject: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format References: <4A582070.9040907@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247496092 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3298 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Olaf Weber wrote: > Eric Sandeen writes: > > [...] > >> But questions remain... > >> 1) How'd it get into this state? ... but maybe more importantly... >> 2) Should these really get cleared? It's possibly a sane extent list, >> it's just that it -could- be in extents rather than btree format... >> 3) By the same token, should the kernel really be choking on it? > > It is not clear to me yet how you could get into this state, but this > is clearly an invariant the kernel actively maintains. > > If the kernel "just" missed the underflow and kept the extents in > btree format, then I don't see an apriori reason why the extent list > as such would be invalid (as opposed to inefficiently stored). If > that's the primary model for getting into this state, then the file > contents can be rescued and kernel-side the event should be > survivable. > > But if the kernel tried to convert, failed, and didn't properly detect > failure... Without having a good answer for (1) I find it hard to > convince myself that to be more forgiving wrt to (2) and (3) is safe. True. Though FWIW, in this case, the user edited out the kernel check, mounted, and successfully copied off the files before running xfs_repair and nuking it with this patch. So I guess bonus points would be teaching repair to fix up the problem if the list seems valid ... and maybe even the same kernelside.... Thanks, -Eric > Olaf > > >> Signed-off-by: Eric Sandeen > > Acked-By: Olaf Weber > >> --- > >> diff --git a/repair/dinode.c b/repair/dinode.c >> index 84e1d05..3fc6cac 100644 >> --- a/repair/dinode.c >> +++ b/repair/dinode.c >> @@ -1280,6 +1280,14 @@ process_btinode( >> last_key = cursor.level[level-1].first_key; >> } >> } >> + if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { >> + do_warn(_("extent count for ino %lld %s fork too low " >> + "(%d) for file format\n"), >> + lino, >> + whichfork == XFS_DATA_FORK ? _("data") : _("attr"), >> + *nex); >> + return(1); >> + } >> /* >> * Check that the last child block's forward sibling pointer >> * is NULL. > > From sandeen@sandeen.net Mon Jul 13 09:43:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6DEhQP2053842 for ; Mon, 13 Jul 2009 09:43:26 -0500 X-ASG-Debug-ID: 1247496689-029200330000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2ADD2A4B322 for ; Mon, 13 Jul 2009 07:51:29 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 8FHAC0Pxqe7YLsMm for ; Mon, 13 Jul 2009 07:51:29 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0EA01A9C9A6; Mon, 13 Jul 2009 09:44:04 -0500 (CDT) Message-ID: <4A5B4833.9070300@sandeen.net> Date: Mon, 13 Jul 2009 09:44:03 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: crow al CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: How to simulate journal corruption Subject: Re: How to simulate journal corruption References: In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247496690 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3298 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean crow al wrote: > Hi, there > > I'm a QA engineer from Cisco. I'm working on a test case concerning XFS > journal playback failure, which needs to manually inject error to XFS. > > I did some google work but get no luck. Then I think maybe XFA-QA could > give me some advice. That why I come to here. > > Is there anyone could tell me how to inject error into XFS or is there > any tool could be used? > > Wish for your response. > > Thanks & Regards. > Lv Wentao. test 044 in xfstests runs something called "loggen" which will generate log traffic to be replayed on mount, if I'm reading it right. Of course that's an uncorrupted log ... There is another tool called "fsfuzzer" which writes random junk over a filesystem. You could probably combine the two tools to create valid logs to replay, and then write varying degrees of junk on top with fsfuzzer, and try to replay the result. You could probably even use fsfuzzer "stock" and just restrict the fuzzing to the log portion of the filesystem. I'm not sure what kinds of errors you are trying to catch - oopses, hangs, improperly replaying a corrupted log, etc - but it sounds well worth doing. FWIW when I used fsfuzzer, it often ran into problems in the log, so I imagine you'll uncover some interesting things; if you do, please share. :) -Eric From sandeen@sandeen.net Mon Jul 13 09:59:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33, J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6DExDnC055195 for ; Mon, 13 Jul 2009 09:59:13 -0500 X-ASG-Debug-ID: 1247497191-409302960000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B1A4D135A8A2 for ; Mon, 13 Jul 2009 07:59:51 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id inOqeoSrgmenwX24 for ; Mon, 13 Jul 2009 07:59:51 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 43539A9C9A9; Mon, 13 Jul 2009 09:59:49 -0500 (CDT) Message-ID: <4A5B4BE4.9010702@sandeen.net> Date: Mon, 13 Jul 2009 09:59:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Lance Reed CC: xfs@oss.sgi.com, syseng X-ASG-Orig-Subj: Re: XFS internal error XFS_WANT_CORRUPTED_GOTO error Subject: Re: XFS internal error XFS_WANT_CORRUPTED_GOTO error References: <5770aa2a0907122312n18db5784x8b5c8f6743c75136@mail.gmail.com> In-Reply-To: <5770aa2a0907122312n18db5784x8b5c8f6743c75136@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247497191 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0006 1.0000 -2.0169 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.62 X-Barracuda-Spam-Status: No, SCORE=-1.62 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085b X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3299 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.40 BSF_SC0_SA085b Custom Rule SA085b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Lance Reed wrote: > Hello, > > We currently have a problem with a running XFS file system. > > Specifically the XFS internal error XFS_WANT_CORRUPTED_GOTO errors showed up. > > The Filesystem is 4.6 TB (LVM) and was originally created and mounted > on a 32 bit Linux system. > Do to problems with earlier versions of XFS, the HEAD node was > upgraded to a 64 bit system with the following attributes: > > CentOS release 5.3 (Final) > 2.6.18-128.1.10.el5 x86_64 Unfortunately this is pretty old xfs code. > XFS: > xfsdump-2.2.46-1.el5.centos > xfsprogs-2.9.4-1.el5.centos > kmod-xfs-0.4-2 > lvm2-2.02.40-6.el5 well, that is pretty old xfs code ;) xfsprogs isn't too bad. it'd be trivial to grab a newer xfsprogs src.rpm from fedora & rebuild it. ... > I am posting to see if there is any updated info on the process to > recover form the XFS_WANT_CORRUPTED_GOT. First I would suggest xfs_repair. > Similar posts seem to indicate that there is a possibility that every > file can wind up in lost+found if not careful when running a > xfs_repair. I would like to confirm if there are any XFS prog updates > or changes that might work better with the kernel version etc we are > running. This system is in use but is also a testing ground for a > production system so any updates on version issues etc. would be > greatly appreciated. > > We have the following error in logs. > > Jul 11 04:01:36 qanfs2 kernel: svc: unknown version (0 for prog 100003 nfsd) > Jul 11 04:04:12 qanfs2 kernel: XFS internal error > XFS_WANT_CORRUPTED_GOTO at line 872 of file > /home/buildsvn/rpmbuild/BUILD/xf > s-kmod-0.4/_kmod_build_/xfs_ialloc.c. Caller 0xffffffff88503944 ... > > The closest post I could find on the problem was: > http://www.opensubscriber.com/message/xfs@oss.sgi.com/8729803.html > > I don't think I am hitting the directory corruption in Linux 2.6.17 > since the kernel version is 2.6.18-128.1.10.el5, but maybe there is > something else? that should have been fixed by .18 IIRC > The course of action I plan to take with confirmation is from the above post: > >>>> To be on the safe side, either make an entire copy of your drive to >>>> another device, or run "xfs_metadump -o /dev/sda1" to capture >>>> a metadata (no file data) of your filesystem. >>>> >>>> Then run xfs_repair (mount/unmount maybe required if the log is dirty). > > I can't make a copy of the data since it is 4+TB. Can someone give > me an idea on the size of the file output from the xfs_metadump > command? it will be much much smaller. To test what repair would do, try this. Unmount the filesystem. # xfs_metadump -o /dev/blah filesystem.metadump # xfs_mdrestore filesytem.metadump filesystem.img # xfs_repair filesystem.img # mount -o loop filesystem.img /some/where see how it goes, both during repair, and what you see on the resulting filesystem (it'll be metadata only, any files you read from that image will be full of 0s) > Also, If everything does wind up in lost+found after running > xfs_repair, is there an efficient way to put the files back in there > correct locations if the Filesystem can repaired? Well, try the metadump trick first to see, we can worry about that later. > We did have a split brain problem earlier in the week with heartbeat, > however, mounting of the disk after restart did not show any problems > at the time. well if 2 nodes mounted the same fs, it could certainly cause problems. :) -Eric > Thanks very much in advance for any assistance to correct this problem. > > Thanks, > > Lance From sgi-linux-xfs@gmane.org Mon Jul 13 17:49:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6DMnWLg073516 for ; Mon, 13 Jul 2009 17:49:37 -0500 X-ASG-Debug-ID: 1247525853-544c032c0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ciao.gmane.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D08B2130AD0E for ; Mon, 13 Jul 2009 15:57:34 -0700 (PDT) Received: from ciao.gmane.org (main.gmane.org [80.91.229.2]) by cuda.sgi.com with ESMTP id IdElHVMz4emEGZdM for ; Mon, 13 Jul 2009 15:57:34 -0700 (PDT) Received: from root by ciao.gmane.org with local (Exim 4.43) id 1MQULS-0003LH-RF for linux-xfs@oss.sgi.com; Mon, 13 Jul 2009 22:50:02 +0000 Received: from adsl-75-61-228-198.dsl.chcgil.sbcglobal.net ([75.61.228.198]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 13 Jul 2009 22:50:02 +0000 Received: from kononov by adsl-75-61-228-198.dsl.chcgil.sbcglobal.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Mon, 13 Jul 2009 22:50:02 +0000 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Roman Kononov X-ASG-Orig-Subj: failed assertion related to realtime section Subject: failed assertion related to realtime section Date: Mon, 13 Jul 2009 17:42:43 -0500 Lines: 73 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000202060108050003020206" X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: adsl-75-61-228-198.dsl.chcgil.sbcglobal.net User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080227 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 Sender: news X-Barracuda-Connect: main.gmane.org[80.91.229.2] X-Barracuda-Start-Time: 1247525857 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3327 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. --------------000202060108050003020206 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, In 2.6.30.x Linux kernel, the XFS_RT configuration option does not say "This feature is unsupported at this time..." any more. Nevertheless, when enabled, the feature crashes the file system in my setup. Is it expected to be functional? The attached assertion log happens every time with a clean and empty file system. Thanks, Roman Kononov --------------000202060108050003020206 Content-Type: text/plain; name="rt-assertion.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rt-assertion.txt" QXNzZXJ0aW9uIGZhaWxlZDogeGZzX3RyYW5zX2dldF9ibG9ja19yZXModHApID4gMCwgZmls ZTogL2hvbWUvc3R1ZmYvYmFzZS9saW51eC0yLjYuMzAuMS9mcy94ZnMveGZzX2JtYXAuYywg bGluZTogNTYwMgotLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0Ka2VybmVs IEJVRyBhdCAvaG9tZS9zdHVmZi9iYXNlL2xpbnV4LTIuNi4zMC4xL2ZzL3hmcy9zdXBwb3J0 L2RlYnVnLmM6MTA5IQppbnZhbGlkIG9wY29kZTogMDAwMCBbIzFdIFNNUApsYXN0IHN5c2Zz IGZpbGU6IC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDEuMS9pMmMtYWRhcHRl ci9pMmMtMS8xLTAwMmUvdnJtCkNQVSAwCk1vZHVsZXMgbGlua2VkIGluOiBpYl9tdGhjYSBz YXRhX252ClBpZDogMTM5MiwgY29tbTogcHMgTm90IHRhaW50ZWQgMi42LjMwLjEgIzUKUklQ OiAwMDEwOls8ZmZmZmZmZmY4MDM5ZjlkYT5dICBbPGZmZmZmZmZmODAzOWY5ZGE+XSBhc3Nm YWlsKzB4MWEvMHgyMApSU1A6IDAwMTg6ZmZmZjg4MDBhMjA3YmJlOCAgRUZMQUdTOiAwMDAx MDI5MgpSQVg6IDAwMDAwMDAwMDAwMDAwN2EgUkJYOiAwMDAwMDAwMDAwMDAxZmZmIFJDWDog MDAwMDAwMDAwMDAwMDAwMApSRFg6IGZmZmY4ODAwMjgwMjIwMDAgUlNJOiAwMDAwMDAwMDAw MDAwMDQ2IFJESTogZmZmZmZmZmY4MDcxYTg1NApSQlA6IDAwMDAwMDAwMDAwMDAwMDEgUjA4 OiAwMDAwMDAwMDAwMDAwMDAwIFIwOTogMDAwMDAwMDAwMDAwMDAwMgpSMTA6IDAwMDAwMDAw MDAwMDAwMDAgUjExOiBmZmZmZmZmZjgwM2NmZGEwIFIxMjogZmZmZjg4MDBhYTI5NmYwMApS MTM6IGZmZmY4ODAwYWEyOTZmMzggUjE0OiBmZmZmODgwMGFhMjk2ZjU4IFIxNTogZmZmZjg4 MDEzYWMxZjAwMApGUzogIDAwMDA3Zjg2MzE4MzE2ZTAoMDAwMCkgR1M6ZmZmZjg4MDAyODAy MjAwMCgwMDAwKSBrbmxHUzowMDAwMDAwMDAwMDAwMDAwCkNTOiAgMDAxMCBEUzogMDAwMCBF UzogMDAwMCBDUjA6IDAwMDAwMDAwODAwNTAwMzMKQ1IyOiAwMDAwN2Y4NjJmODBmMDAwIENS MzogMDAwMDAwMDAwMDIwMTAwMCBDUjQ6IDAwMDAwMDAwMDAwMDA2ZTAKRFIwOiAwMDAwMDAw MDAwMDAwMDAwIERSMTogMDAwMDAwMDAwMDAwMDAwMCBEUjI6IDAwMDAwMDAwMDAwMDAwMDAK RFIzOiAwMDAwMDAwMDAwMDAwMDAwIERSNjogMDAwMDAwMDBmZmZmMGZmMCBEUjc6IDAwMDAw MDAwMDAwMDA0MDAKUHJvY2VzcyBwcyAocGlkOiAxMzkyLCB0aHJlYWRpbmZvIGZmZmY4ODAw YTIwN2EwMDAsIHRhc2sgZmZmZjg4MDA5ODhmYzAwMCkKU3RhY2s6CiAwMDA4MDAwMDAwMDAw MDAwIGZmZmZmZmZmODAzNDVlOWMgZmZmZjg4MDBhMjA3YmM0OCBmZmZmODgwMGEyMDdiY2M4 CiBmZmZmODgwMGFhMjk3MWIwIDAwMDAwMDAwMDAwMDAwMGUgMDAwMDAwMDAwMDAwMDAwMSAw MDAwMDAwMDAwMDAwMDI0CiAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDIgMDAw MDAwMDAwMDAwMDAwMSBmZmZmODgwMGEwNGVkMzUwCkNhbGwgVHJhY2U6CiBbPGZmZmZmZmZm ODAzNDVlOWM+XSA/IHhmc19idW5tYXBpKzB4YzVjLzB4MTFlMAogWzxmZmZmZmZmZjgwMzZk ZDUwPl0gPyB4ZnNfaXRydW5jYXRlX2ZpbmlzaCsweDJiMC8weDVkMAogWzxmZmZmZmZmZjgw MzhlYWUxPl0gPyB4ZnNfZnJlZV9lb2ZibG9ja3MrMHgyNzEvMHgyYzAKIFs8ZmZmZmZmZmY4 MDM5NmY1MD5dID8geGZzX2ZpbGVfcmVsZWFzZSsweDEwLzB4MjAKIFs8ZmZmZmZmZmY4MDI5 ZWQyMj5dID8gX19mcHV0KzB4YzIvMHgyMTAKIFs8ZmZmZmZmZmY4MDI5YjhkNj5dID8gZmls cF9jbG9zZSsweDU2LzB4OTAKIFs8ZmZmZmZmZmY4MDIzYTdmNj5dID8gcHV0X2ZpbGVzX3N0 cnVjdCsweDc2LzB4ZjAKIFs8ZmZmZmZmZmY4MDIzYzU2MD5dID8gZG9fZXhpdCsweDY3MC8w eDZlMAogWzxmZmZmZmZmZjgwMjllMzJlPl0gPyB2ZnNfd3JpdGUrMHgxMWUvMHgxNzAKIFs8 ZmZmZmZmZmY4MDIzYzYxNT5dID8gZG9fZ3JvdXBfZXhpdCsweDQ1LzB4YjAKIFs8ZmZmZmZm ZmY4MDIzYzY5Mj5dID8gc3lzX2V4aXRfZ3JvdXArMHgxMi8weDIwCiBbPGZmZmZmZmZmODAy MGJkZWI+XSA/IHN5c3RlbV9jYWxsX2Zhc3RwYXRoKzB4MTYvMHgxYgpDb2RlOiAwOCAwMSAw MCAwMCAwMCBlOCAyNyAxOSAwMyAwMCA0OCA4MyBjNCAxOCBjMyA2NiA5MCA4OSBkMSA0OCA4 MyBlYyAwOCA0OCA4OSBmMiAzMSBjMCA0OCA4OSBmZSA0OCBjNyBjNyBlOCBkOSA1ZSA4MCBl OCAwNiBjNyAxYSAwMCA8MGY+IDBiIGViIGZlIDY2IDkwIDQ4IDgzIGVjIDI4IDQ4IDg5IDFj IDI0IDRjIDg5IDZjIDI0IDE4IDg5IGZiClJJUCAgWzxmZmZmZmZmZjgwMzlmOWRhPl0gYXNz ZmFpbCsweDFhLzB4MjAKIFJTUCA8ZmZmZjg4MDBhMjA3YmJlOD4KLS0tWyBlbmQgdHJhY2Ug OTc1NjBjNTg0OGRlNTZhYiBdLS0tCkZpeGluZyByZWN1cnNpdmUgZmF1bHQgYnV0IHJlYm9v dCBpcyBuZWVkZWQhCg== --------------000202060108050003020206-- From info@titanengg.com.sg Mon Jul 13 20:42:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.0 required=5.0 tests=BAYES_50,HTML_MESSAGE, RCVD_IN_BRBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6E1gaTL081373 for ; Mon, 13 Jul 2009 20:42:37 -0500 X-ASG-Debug-ID: 1247536239-137200170000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from page.host-care.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7469DA52FCF for ; Mon, 13 Jul 2009 18:50:39 -0700 (PDT) Received: from page.host-care.com (ns1.host-care.com [72.29.68.169]) by cuda.sgi.com with ESMTP id HRSjSo20mOeyDlPC for ; Mon, 13 Jul 2009 18:50:39 -0700 (PDT) Received: from cm248.zeta164.maxonline.com.sg ([116.87.164.248] helo=Home) by page.host-care.com with esmtpa (Exim 4.69) (envelope-from ) id 1MQWfJ-0007Ez-IB; Mon, 13 Jul 2009 21:19:00 -0400 Message-ID: <6055A95DF38542888577D726C9508C3D@Home> From: "Info - Titan Engineering" To: X-ASG-Orig-Subj: Titanium Metal & Alloy Supplier. Subject: Titanium Metal & Alloy Supplier. Date: Tue, 14 Jul 2009 09:16:59 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_019A_01CA0463.D74B4C30" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.5512 Disposition-Notification-To: "Info - Titan Engineering" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - page.host-care.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - titanengg.com.sg X-Source: X-Source-Args: X-Source-Dir: X-Barracuda-Connect: ns1.host-care.com[72.29.68.169] X-Barracuda-Start-Time: 1247536241 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5000 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_TG035a, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3339 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.00 BSF_SC0_TG035a Message contains invalid style definition X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_019A_01CA0463.D74B4C30 Content-Type: multipart/alternative; boundary="----=_NextPart_001_019B_01CA0463.D74B4C30" ------=_NextPart_001_019B_01CA0463.D74B4C30 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello, Greetings from Titan Engineering, Singapore. I am writing in the hope of establishing business relationships with = you. Titan Engineering Pte Ltd is a Singapore based Supplier of Precision = engineering components, Titanium mill materials, Platinised Anodes and = Titanium MMO Anodes to the various industries like aerospace, marine, = medical component manufacturers, chemical processing factories and = cathodic protection companies Our Trading Division distributes Titanium Mill Materials. Our Range of = Titanium Metal & Alloy Products include: =20 =20 Titanium- Commercially pure(CP) grades Titanium Ti6AL4V=20 Titanium Bar / Rod Titanium Sheet, foil =20 Titanium Plate=20 Titanium tubes=20 Titanium Wire Titanium Fasteners We warmly welcome the opportunity of quoting on your needs, whether your = requirement is large or small. Best Regards! Ramesh Kumar Sales & Marketing Titan Engineering Pte Ltd Blk 20 Woodlands Link #08-36 Woodland East Industrial Estate Singapore 738733 Ph: (65)68537424 Fax: (65)68534970. http://www.titanengg.com.sg Email: info@titanengg.com.sg Note:=20 1. As our compliment, if you enquire by replying this mail, we will = absorb the FedEx charges to send your goods to your door, all over the = world. 2. If you do not wish to receive any promotional mails, please reply = with a "Remove" in subject line. ------=_NextPart_001_019B_01CA0463.D74B4C30 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hello,
 
Greetings from Titan Engineering, = Singapore.

I am writing in the hope of = establishing=20 business relationships with you.

Titan Engineering Pte Ltd is a = Singapore=20 based Supplier of Precision engineering components, Titanium mill = materials,=20 Platinised Anodes and Titanium MMO Anodes to the various industries = like=20 aerospace, marine, medical component manufacturers, chemical processing=20 factories and cathodic protection companies

Our Trading = Division distributes Titanium Mill Materials. Our Range of=20 Titanium Metal & Alloy Products = include:    =20
 
Titanium- Commercially pure(CP) grades
Titanium Ti6AL4V =
Titanium Bar / Rod
Titanium Sheet,=20 foil       
Titanium Plate =
Titanium=20 tubes
Titanium Wire
Titanium Fasteners


We warmly = welcome the=20 opportunity of quoting on your needs, whether your requirement is large = or=20 small.

Best Regards!

Ramesh Kumar
Sales &=20 Marketing

Titan=20 Engineering Pte Ltd
Blk 20 Woodlands Link = #08-36
Woodland=20 East Industrial Estate
Singapore 738733
Ph: (65)68537424 Fax:=20 (65)68534970.
http://www.titanengg.com.sg

Email: info@titanengg.com.sg



Note:
1. As our compliment, if you enquire = by=20 replying this mail, we will absorb the FedEx charges to send your = goods to=20 your door, all over the world.
2. If you do not wish to receive any=20 promotional mails, please reply with a "Remove" in=20 subject line.
------=_NextPart_001_019B_01CA0463.D74B4C30-- ------=_NextPart_000_019A_01CA0463.D74B4C30 Content-Type: application/pdf; name="Company Profile- Titan Engineering Pte Ltd.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Company Profile- Titan Engineering Pte Ltd.pdf" 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 qSwtL2w/wLtU+GnfwQ8x24Q1zt8hWkgoYmoYiFhR/k5fD+wzSAb3JIMgJvf1CO3Cjzy1aCyPyKzo sPkD68oPrRCO0Jh/XAgoUY3gZ2kNygLnQTMCN2ksj/j54P8+lWeRZW5kc3RyZWFtCmVuZG9iagoz NSAwIG9iago0Njk3CmVuZG9iago0IDAgb2JqCjw8L1R5cGUvUGFnZS9NZWRpYUJveCBbMCAwIDU5 NSA4NDJdCi9Sb3RhdGUgMC9QYXJlbnQgMyAwIFIKL1Jlc291cmNlczw8L1Byb2NTZXRbL1BERiAv SW1hZ2VDIC9UZXh0XQovRXh0R1N0YXRlIDIwIDAgUgovWE9iamVjdCAyMSAwIFIKL0ZvbnQgMjIg MCBSCj4+Ci9Db250ZW50cyA1IDAgUgo+PgplbmRvYmoKMjMgMCBvYmoKPDwvVHlwZS9QYWdlL01l ZGlhQm94IFswIDAgNTk1IDg0Ml0KL1JvdGF0ZSAwL1BhcmVudCAzIDAgUgovUmVzb3VyY2VzPDwv UHJvY1NldFsvUERGIC9JbWFnZUMgL1RleHRdCi9FeHRHU3RhdGUgMzAgMCBSCi9YT2JqZWN0IDMx IDAgUgovRm9udCAzMiAwIFIKPj4KL0NvbnRlbnRzIDI0IDAgUgo+PgplbmRvYmoKMzMgMCBvYmoK PDwvVHlwZS9QYWdlL01lZGlhQm94IFswIDAgNTk1IDg0Ml0KL1JvdGF0ZSAwL1BhcmVudCAzIDAg UgovUmVzb3VyY2VzPDwvUHJvY1NldFsvUERGIC9JbWFnZUMgL1RleHRdCi9FeHRHU3RhdGUgNDIg MCBSCi9YT2JqZWN0IDQzIDAgUgovRm9udCA0NCAwIFIKPj4KL0NvbnRlbnRzIDM0IDAgUgo+Pgpl bmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMgL0tpZHMgWwo0IDAgUgoyMyAwIFIKMzMgMCBS Cl0gL0NvdW50IDMKL1JvdGF0ZSAwPj4KZW5kb2JqCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZyAv UGFnZXMgMyAwIFIKPj4KZW5kb2JqCjcgMCBvYmoKPDwvVHlwZS9FeHRHU3RhdGUKL09QTSAxPj5l bmRvYmoKMjAgMCBvYmoKPDwvUjcKNyAwIFI+PgplbmRvYmoKMjEgMCBvYmoKPDwvUjE5CjE5IDAg Ui9SMTgKMTggMCBSL1IxNwoxNyAwIFIvUjE2CjE2IDAgUi9SMTUKMTUgMCBSL1IxNAoxNCAwIFIv UjEzCjEzIDAgUi9SMTIKMTIgMCBSPj4KZW5kb2JqCjE5IDAgb2JqCjw8L1N1YnR5cGUvSW1hZ2UK L0NvbG9yU3BhY2UvRGV2aWNlUkdCCi9XaWR0aCAxNjAKL0hlaWdodCAxMDcKL0JpdHNQZXJDb21w b25lbnQgOAovRmlsdGVyL0RDVERlY29kZS9MZW5ndGggNDU4MT4+c3RyZWFtCv/Y/+4ADkFkb2Jl AGQAAAAAAf/bAEMAAgICAgICAgICAgMDAgMEBgQEAwMEBwUGBAYJCAkJCQgICAoLDgwKCg0KCAgM EAwNDg8PEA8JDBESEQ8SDg8PD//bAEMBAwMDBAMEBwQEBw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD//AABEIAGsAoAMBEQACEQEDEQH/xAAfAAAB BQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiEx QQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6 wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAA AAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgU QpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZn aGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS 09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP38oAKACgAoAKACgAoAKACg AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgCha6hY34lNldw3HlvscwuH2NSugL9MAoAK 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 GFABQAUAFABQAUAFABQAUAFABQAUAFAHlOu+BvDGratFd32nyPcyz5eRLqaMsdsY52uOyL+Vc8oq 57NHE1I09Hsuy8zkvEXgzw9Hfab5dpOnnXqJJsvJ13L5K8HD/wCwv5UpRSO+hi6so3b6dl3fkbFt 8PPCcd7fItjclTEAQ2oXTfzkojFNsy/tHEximpdey/yM3QvA3he+0bRr280+SW8t7omKd7qYumJ5 cYbfnuaLK1wrZhiOeUebT0Xl5HZ+G/DWi6Z4nvb6ztXW7a18syyTySHbvXj5mP8AcX8q0jueXipN xT7npVaI4D//2QplbmRzdHJlYW0KZW5kb2JqCjE4IDAgb2JqCjw8L1N1YnR5cGUvSW1hZ2UKL0Nv bG9yU3BhY2UvRGV2aWNlUkdCCi9XaWR0aCAxNjAKL0hlaWdodCAxMjQKL0JpdHNQZXJDb21wb25l bnQgOAovRmlsdGVyL0RDVERlY29kZS9MZW5ndGggODIwMj4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQA AAAAAf/bAEMAAgICAgICAgICAgMDAgMEBgQEAwMEBwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwN Dg8PEA8JDBESEQ8SDg8PD//bAEMBAwMDBAMEBwQEBw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD//AABEIAHwAoAMBEQACEQEDEQH/xAAfAAABBQEB AQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYT UWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZX WFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAA AQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGh scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq 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 qnwU8E6lGQ+mxB8YyUFRKKGmzwXxf+yV4fv1eXS40ViD8m0YNF0tginbU+ZvEf7JtzbyFRp2evKJ 1pPmWqCLTdmQ+F/2fNVsNe0qJNNn8mFwTlOMCt6c3YznFNnU/HH4D+KfFWlpbWdoT5ZBw6VSqO5T gkj89te/Zr1nTp5Ev9Gkikz1QGPP4iq+sT7mbowXQ5AfBO+sXV2gumQE8O5Ipxxc3oJ4anvY9l+F Ph+80bxV4fRdOaFFnXJ2YPWs5YictGVCjTjrY/e3wExbw9Z5P8IqW1a7NL32O1pDCgAoAKACgAoA KACgAoAKACgAoAKAIpIYpRiSNWHuKAIo7K0ibfHbxq3qBQBLJBDMMSxKw9xQBy2q+BvDWsKy3umR MT32igDyrVv2fPCt67PBAiA/w0AZ+k/s5+GNP1CC+eHc0bbxz3oA+hrCwg062S2t1xGtAF2gAoAK ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD//2QplbmRzdHJlYW0KZW5kb2JqCjE3 IDAgb2JqCjw8L1N1YnR5cGUvSW1hZ2UKL0NvbG9yU3BhY2UvRGV2aWNlUkdCCi9XaWR0aCAxNjAK L0hlaWdodCAxMTEKL0JpdHNQZXJDb21wb25lbnQgOAovRmlsdGVyL0RDVERlY29kZS9MZW5ndGgg ODQ2Mz4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQAAAAAAf/bAEMAAgICAgICAgICAgMDAgMEBgQEAwME BwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwNDg8PEA8JDBESEQ8SDg8PD//bAEMBAwMDBAMEBwQE Bw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD//A ABEIAG8AoAMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAAC AQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZ GiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOU lZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T1 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 dGggNzY5Nj4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQAAAAAAf/bAEMAAgICAgICAgICAgMDAgMEBgQE AwMEBwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwNDg8PEA8JDBESEQ8SDg8PD//bAEMBAwMDBAME BwQEBw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P D//AABEIAKAAoAMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1 EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoW FxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy 8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUE BAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkq NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAM AwEAAhEDEQA/AP38oAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAEwKnmQC07gZ17qFnptvJeahcxW9nGu555n CIn51ViL3PlHxt+3Z+yn4DmnttX+MWkXd8g/1Ghxz6r8/wDc32yOmf8AgdAWueO3P/BTf4EBEfSf DnjO+jkTfHP9iggjf/vuff8A+OUvZl8x5T4j/wCCtPgXR7uS0s/hFr1yyd5dRgg/9kej2Ycx3M3/ AAUz8D6fpialrPwv8Qw2+ze/2S5gnx/33sq/Zke1ub3gz/gpx+zx4sMdve2fi7Q5XbYJNS02ORP/ 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 sLmuM3H0/WqshXqdg3H0/WjlQXqdg3t3ApcqEvadgyD1H607F+/1Q8H2qdCbtjjjvRcdxaBhQAUA FABQAUAFABQAUAFABQAHoaAGdqG7BLU4DxN4m1DRpTDY6Be3x2riSFJPLTIkPOxHPHk9kb76f365 ZSdzpw9CM93Y5LQPipq+sad9t1H4eeIdFzLDD9nvbSRpvn34fZGj/J8v/AP49lNVTvlltBbVvw9P PzEt/ih4guU8RqPhrryajpHzfZZF2fbl+f8A1D/6t+n9/wD9k3r2pTyzD3T9vp6Gbpfxf8Uail+3 /Cm/Flp9ki8/ZerAjT/Ps2R/vPmf+P6I/wDsb37VjeV4df8AL9fca6/EDxdPBbT2Hw9v5gbhILlZ pxbvbo0Dyb/nHz7X8lDs3/67++joEqplLLaClb239f1+RnyfFPxCkGmOvw71h2u5ZoPLWKbh1uII 9w/d/JGUknk3z+T/AKnHRw9bq9h/UYJ/Ev6R6V4W1XUNa0S11bUbD7FczGQi0ZpOI95EbEOiOhdA j7HQOm8oelJs83E0/Zux/9kKZW5kc3RyZWFtCmVuZG9iagoxNSAwIG9iago8PC9TdWJ0eXBlL0lt YWdlCi9Db2xvclNwYWNlL0RldmljZVJHQgovV2lkdGggMTYwCi9IZWlnaHQgMTI5Ci9CaXRzUGVy Q29tcG9uZW50IDgKL0ZpbHRlci9EQ1REZWNvZGUvTGVuZ3RoIDgwMTM+PnN0cmVhbQr/2P/uAA5B ZG9iZQBkAAAAAAH/2wBDAAICAgICAgICAgIDAwIDBAYEBAMDBAcFBgQGCQgJCQkICAgKCw4MCgoN CggIDBAMDQ4PDxAPCQwREhEPEg4PDw//2wBDAQMDAwQDBAcEBAcPCggKDw8PDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw//wAARCACBAKADAREAAhEBAxEB/8QA HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 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 658Rokn/AAjOs6tLPqTn5PkN3A+xN+/+5XkYnM8XjNVI6cDkODwUuWUbnf8AhL/X63/wD/0CvIPo mX/FH/IBk/6+f/ZKTEcna/8AHgazRTOk0H/lh/v1sjNnQTf8fn/bb/2SiYHy/wDED/kcrj/c/wDZ 68+pub09j5f+N/8AqvCn/Xaf/wBASu3BmFY8suf9TH/uJXoVNjkjuX5vueH/APr5jrCfwHTS3Pox P+QNYf8AA/8A0Ovnp/xGexROP8Sf8vn/AG0rSluVV2PEPEP+tk/4BXWcZ8W/tV/8gGz/AN+vWwZx V/4jPsn9iH/khNt/12evv8k2Pxrib/ffmfoxZ/8AHvp/+5HXBjN2fV5d/u6MjXv+Ql4f/wCwxa14 kz7nAf7uW/DH/JUNC/4HXDI7l8Rk/tQf8i1Z/wDY0j/0SlcNU7n8PyRXl/5OL8e/9itbf+gWtc9T cn7B9peCf+RS0P8A64v/AOh10UDx63xM/9kKZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago8PC9T dWJ0eXBlL0ltYWdlCi9Db2xvclNwYWNlL0RldmljZVJHQgovV2lkdGggMTYwCi9IZWlnaHQgMTYw Ci9CaXRzUGVyQ29tcG9uZW50IDgKL0ZpbHRlci9EQ1REZWNvZGUvTGVuZ3RoIDExMDc0Pj5zdHJl YW0K/9j/7gAOQWRvYmUAZAAAAAAB/9sAQwACAgICAgICAgICAwMCAwQGBAQDAwQHBQYEBgkICQkJ CAgICgsODAoKDQoICAwQDA0ODw8QDwkMERIRDxIODw8P/9sAQwEDAwMEAwQHBAQHDwoICg8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P/8AAEQgAoACgAwER AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2 Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Sl pqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8B 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 uVdyLM9o8N+DINNijjSBE/4BRcLHplvpuxK0A2EhoAsJDVFXDZ70AFAEdAHUVkakmz3oAKAD+CgC OgsKAK7/AH6ADZ70ASbPkqDH2siu9tG6UBzTZX+w0F8lvtEn2ON0+dKB8l/tFOawR/4K1uhNy7ld LbZ/yzoujJuX8xY+zJsouHNL+Yk8mi4c0u4bNlF7md6JXftRa4/bUIkb9q2DmI6A5jqK5zoDf8kd ABQAUAFBYb99ABtSgCOgA/gqBRqwuT3ml+PriGW68NG2e3NihtYp1g2G686Z5N+9N/3EgT7/APy0 f+5TOiE6d/eHaTD8WpL+xTUfD2gQ6QkzpLPcKjXMkSSJh/kfZvkTz3/2Hp+pvWhlvK2pa/Pf+vwM X7P8adOtr++ez0y8i+13sn2W602CSZIPn8hIPJm+fZ9z5/nfzE+5sfeDowyxvWT/AK/r+tCVV+N0 +mxapa+GvDj3rpJMLG7tzG/z2wdE37/kfzw6P/vp/dOZuayeU7czHaKnxwuHuLfxH4Y8IWluYo1j uLA73887Nz7H/ub5H/4BRcyk8pX2mTaQ/wAXj4i0iw13wjoK2MtsJry4s4CY4/3L74d7yY3+f5Gz 7/7vf9ymn3RMv7LUdJO5Qt9C+OGj32hRSSaL4itZ5LI3091awWiwRt/x8mPZ87unl70/67vn7iUb BzZXJPW29v0NnUYPivE7vpnhqxcw3F5vEyWv+kQ+en2by/nT/lh5n39nz0RdyYPBW1/X+vxPV/D2 hyW+jaRBr0dldazFbol3dJbIiTzbRvfZ7vmuuMVbQ8rFVMPGbsdL/Y2j/wDQJs/+/CUjFMztW0nS 00nVHTTrZJEtpPn8lP7lA7n/2QplbmRzdHJlYW0KZW5kb2JqCjEzIDAgb2JqCjw8L1N1YnR5cGUv SW1hZ2UKL0NvbG9yU3BhY2UvRGV2aWNlUkdCCi9XaWR0aCAxNjAKL0hlaWdodCAxMjAKL0JpdHNQ ZXJDb21wb25lbnQgOAovRmlsdGVyL0RDVERlY29kZS9MZW5ndGggNzU2Mj4+c3RyZWFtCv/Y/+4A DkFkb2JlAGQAAAAAAf/bAEMAAgICAgICAgICAgMDAgMEBgQEAwMEBwUGBAYJCAkJCQgICAoLDgwK Cg0KCAgMEAwNDg8PEA8JDBESEQ8SDg8PD//bAEMBAwMDBAMEBwQEBw8KCAoPDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD//AABEIAHgAoAMBEQACEQEDEQH/ xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMA BBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVG R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0 tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEB AQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2Fx EyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TF xsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP1E0HRLWG8ku9n7 zZ8/mV+LQ0gfcbFPxbfwaJoOsalH8kcds7vHJ9ynhI81QHLQ/If43W0Fz8BfEifufMnfz38v+/8A O9fbYVt2PBrQ5T47+HusakmiW8/2R0t3T/WSf8tK9ZUbmMa6joSXNhBf6lHfXW//ALZ1vBWOKUrs 0E03Q7N45/7Ntpv78cjyV2RlZGElcz7nStGv/Mk8h4bf+DyHkq7kcpw+seDPtkUn9lXT+Z/zznou HKeZ2H9seG9Zk8xJrDVIH86GT/VvG/8Afjq27gfaHgD9rS+8q3sfiNBeX+z/AJi1pN8//bSP/wCI rFoD6o8PfEXwd4w+z/2V4nsHk/54T3MkD/8Aj9dKJPTIdNurz93sSaP/AKZ3P/tSgDQ+zQaVbyPd T21t/H5k83l+X/4/UcoHkfjz9of4e+BrW48vVbbWNYRPksNN8ufzH/6aP9xKOUD8q/iF481j4l+M tU8Va5s+0T/uIYIPuQIn3EjoaKTMfR/E+uaDeeZpV88O/wC/H/BJWLjc2jK2p7Anxad4v+JzpVs8 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 zJYibUXnRN+z+zZ/3f8A45V+3QPKJ9CST4qeGYo0vUg1OazDvDLcQafOVgdNn+s44+/R7dbkvKp7 dfUZq83w8+Ilw/gvxF4Zg1qB1k3wanp/nQ/Idj/M4x7Vop85g8HKlBt7H5yftH/8EuvBnjW3vtf+ Buqx+Fdf2u39hX2+ewuv9x/vw/8Aj6c9K0SsefFWmf/ZCmVuZHN0cmVhbQplbmRvYmoKMTIgMCBv YmoKPDwvU3VidHlwZS9JbWFnZQovQ29sb3JTcGFjZS9EZXZpY2VSR0IKL1dpZHRoIDE2MAovSGVp Z2h0IDExNwovQml0c1BlckNvbXBvbmVudCA4Ci9GaWx0ZXIvRENURGVjb2RlL0xlbmd0aCA3OTM2 Pj5zdHJlYW0K/9j/7gAOQWRvYmUAZAAAAAAB/9sAQwACAgICAgICAgICAwMCAwQGBAQDAwQHBQYE BgkICQkJCAgICgsODAoKDQoICAwQDA0ODw8QDwkMERIRDxIODw8P/9sAQwEDAwMEAwQHBAQHDwoI Cg8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P/8AAEQgA dQCgAwERAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5 +v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR 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 5Onebc6jcndNf3Z3yyfU1k5Nmtj/2QplbmRzdHJlYW0KZW5kb2JqCjIyIDAgb2JqCjw8L1IxMQox MSAwIFIvUjkKOSAwIFI+PgplbmRvYmoKMzAgMCBvYmoKPDwvUjcKNyAwIFI+PgplbmRvYmoKMzEg MCBvYmoKPDwvUjI5CjI5IDAgUi9SMjgKMjggMCBSL1IyNwoyNyAwIFIvUjI2CjI2IDAgUj4+CmVu ZG9iagoyOSAwIG9iago8PC9TdWJ0eXBlL0ltYWdlCi9Db2xvclNwYWNlL0RldmljZVJHQgovV2lk dGggMTYwCi9IZWlnaHQgNzQKL0JpdHNQZXJDb21wb25lbnQgOAovRmlsdGVyL0RDVERlY29kZS9M ZW5ndGggNTM5ND4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQAAAAAAf/bAEMAAgICAgICAgICAgMDAgME BgQEAwMEBwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwNDg8PEA8JDBESEQ8SDg8PD//bAEMBAwMD BAMEBwQEBw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P Dw8PD//AABEIAEoAoAMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/ xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKC CQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaH iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp 6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAME BwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYn KCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeY mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/ 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 wXxHw/pU8/lwfvn5j5+Y88V0Utj3Z/GbNxzPtPIx0/Gs6m520fiJpVAguMAD5e1ccj0InBXDMZWy x+8e9CKkVAzc/Meh71LKiTlmMnLE8dz9KzZoNu44wZCEUEnqB7U2UQx/e2/w8cdu9SA+2JyOegP/ AKEakDQgZllj2sR8y9Dj+MVAGta3Fxui/fydT/EfagTOht5JGluCzsTufqc1nMRplm84fMeXXv7r SiSzo4Pl2beMhenHrW6OeZt6bc3JsljNxIY2dcqXOD9RXSjjqG/YM32+Q7jnax6+9dEThqn/2Qpl bmRzdHJlYW0KZW5kb2JqCjI4IDAgb2JqCjw8L1N1YnR5cGUvSW1hZ2UKL0NvbG9yU3BhY2UvRGV2 aWNlUkdCCi9XaWR0aCAxNjAKL0hlaWdodCAxMDgKL0JpdHNQZXJDb21wb25lbnQgOAovRmlsdGVy L0RDVERlY29kZS9MZW5ndGggNjMxMz4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQAAAAAAf/bAEMAAgIC AgICAgICAgMDAgMEBgQEAwMEBwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwNDg8PEA8JDBESEQ8S Dg8PD//bAEMBAwMDBAMEBwQEBw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PD//AABEIAGwAoAMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAA AQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgj QrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz dHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/ xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEK FiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SF 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 tAyr9sm/2fyoAPtk3+z+VAB9sm/2fyoAPtk3+z+VAB9sm/2fyoAPtk3+z+VAB9sm/wBn8qAD7ZN/ s/lQAfbJv9n8qAD7ZN/s/lQAfbJv9n8qAD7ZN/s/lQAfbJv9n8qAGtdzEHp+VOWh0UoJnnVz4Rjf U1uIfEGu2wkeVnhtr5kRiZGY5GPUmsXHW1z1ISSg7xTtb8ihd+D2j1K2SHxX4ijgk82R4UvQEZix bONvqxrO2trmtGcXTlNwV1boEXhF47e5P/CXeJWaRshm1FiY/wDd44pyTtuEpRcrci+4Wz8JJJba Rqr+I/EBv/sqB5P7RkxN+62fOn3Tz8/T73PtSgtL3Jc0puHKrJnaeGNEXS5b+capqN19pCHy724M qw9eIx/COTW6VjgxbTex/9kKZW5kc3RyZWFtCmVuZG9iagoyNyAwIG9iago8PC9TdWJ0eXBlL0lt YWdlCi9Db2xvclNwYWNlL0RldmljZVJHQgovV2lkdGggMTYwCi9IZWlnaHQgMTUwCi9CaXRzUGVy Q29tcG9uZW50IDgKL0ZpbHRlci9EQ1REZWNvZGUvTGVuZ3RoIDk4NTI+PnN0cmVhbQr/2P/uAA5B ZG9iZQBkAAAAAAH/2wBDAAICAgICAgICAgIDAwIDBAYEBAMDBAcFBgQGCQgJCQkICAgKCw4MCgoN CggIDBAMDQ4PDxAPCQwREhEPEg4PDw//2wBDAQMDAwQDBAcEBAcPCggKDw8PDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw//wAARCACWAKADAREAAhEBAxEB/8QA HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEB AQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMi 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 sHM+4v8Awj3h/f8A8i/p3/gLHRyrsHM+5I/h7w//ANAPTv8AwFjo5V2DmfcP+Ee0P/oB6d5X/XrH RyrsHM+4f8I94f3/APID07/wFjo5V2Dmfci/sHQv+gHp/wD4Cx0WQcz7nQbNj0xFF/v0AWYfnSgB X8t6AIaALX8NAEb/APPSgCGbpQAqP8/l0ASfc/d0ADpsSgAT7tAC/wANACP92gCvC+x6ALP3KAG0 ALD0NAEv7ugCJ/u0ARea/rQBLMn+qoAiSgBYUoAiegC0jFKAIfNf1oAUIJFw1AAn3jQAffbZQAP9 4UACNQBK7UAJGok+9QBGh2UAD/eFAA/yUACP8tAEu72oARE3tQB//9kKZW5kc3RyZWFtCmVuZG9i agoyNiAwIG9iago8PC9TdWJ0eXBlL0ltYWdlCi9Db2xvclNwYWNlL0RldmljZVJHQgovV2lkdGgg MTYwCi9IZWlnaHQgMTIwCi9CaXRzUGVyQ29tcG9uZW50IDgKL0ZpbHRlci9EQ1REZWNvZGUvTGVu Z3RoIDg4MzA+PnN0cmVhbQr/2P/uAA5BZG9iZQBkAAAAAAH/2wBDAAICAgICAgICAgIDAwIDBAYE BAMDBAcFBgQGCQgJCQkICAgKCw4MCgoNCggIDBAMDQ4PDxAPCQwREhEPEg4PDw//2wBDAQMDAwQD BAcEBAcPCggKDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P Dw//wAARCAB4AKADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJ ipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcF BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygp KjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJma oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oA DAMBAAIRAxEAPwDxuzto4YPuff8Auf368Q7TpESNHjTy/wB46f8ALP8A5aUAbiW3/HvBsSH/AKZ7 PkjSpEzc+zb7j+DzP9ygxZuJbJ+8d0/eb9nmR1qIsJbRou+NNkf/AEz+5HQAeTsl2eWnlpTRJcdJ E8xPI37PvyR1pEDQsLCxvIvtc/ifRLa3+55k95Hv37P+eafPWnITzsx9Sfw/YXEkaeILO53/AHJI 4ZI//Q0o5A5yOawjhuryx8+2m8jY80lpNHInz/7aVnIpFfZGnl+X8mz/AJZxp/6LrNmyMO/gkm+z +Zs8zZ/c8z5KRDMP+wbTzY5P+WlAgeGTZ/q5vkf5615IF8qMu8hRFkT+/wDckp8sA5UcnqVnvi/c f6x0pOpfQg8/1KGf/ng9ZuHMNHn+pQ72k/2/n/eVVzdHm+pabB+8Ty08ujmA+9IbaObzH+/sRP3k f/LSsQNi2hRPvwP5bv8AP8/meXQBsbJ5m/dyeT8+xPkqRM3Ibb91byJGjyb/APWb/wDWUGLNS2h/ 1ab/AN5/HWoiwltsS8jfY+z/AJabKALEyIkUbxp/tp5lCJOP1W8vr/V4/D9jshkeHz7mT/nmn/xd aoDpLPSrHR0j+yWMPyIn+r+//wDZ1PtSvZFi5T7SkiSeclun3PMT/Wf/AGFP2oeyPO9b0r/hG723 8R6N/o1vA6JeWn8EkDvTbJW52DpvWSRPnk3/ACVmzZGfsn/do+x9n/LST+5SIZnu8jr9xHp2uK5T uU+SPzHhh8v/AJaTzRx/PWv1WTMPas5+Z7W5SSOO+sJpP+mdzHJR9VkHtTPms3eLzNjpv+d5I/uR 0Om4m5xeq6bsfz44ET+/5j/6usnJxBHB6rpSb/L8hP8ArpHWfMdCPL7/AE1ElkjRN8n/AEzo5gPu SzSN4vtafx/On/LT+OpA3LZI9kkccCeYnyfvPv8A9ygCx5Lw/v8Ay/4/9XG/mfJVGTNiwR5oo9kH +j/wUAXLa2e8uv8AVokaffkjoILiQzv+7f5P4/3af6ygCTfHuj8uTfJAn+o/j/791KA4Pw3NaP48 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 eH/TStKtEKeFmyn/AMMr+NL+WOOfxV4Je8gfz3RNSn3/ACf89P3FZRohPCzizn9S/ZI+I32COSPx P4P8t3dPP+33ciRv/tv5HyffjojR1KoUZ+1kZWp/sTfGS+OqWS6t4Mm1NIZrn7Imqzv8kO/+PyP9 iuuNA55c0KE2z//ZCmVuZHN0cmVhbQplbmRvYmoKMzIgMCBvYmoKPDwvUjExCjExIDAgUi9SOQo5 IDAgUj4+CmVuZG9iago0MiAwIG9iago8PC9SNwo3IDAgUj4+CmVuZG9iago0MyAwIG9iago8PC9S NDEKNDEgMCBSL1I0MAo0MCAwIFIvUjM5CjM5IDAgUi9SMzgKMzggMCBSPj4KZW5kb2JqCjQxIDAg b2JqCjw8L1N1YnR5cGUvSW1hZ2UKL0NvbG9yU3BhY2UvRGV2aWNlUkdCCi9XaWR0aCAzMDAKL0hl aWdodCAyMjUKL0JpdHNQZXJDb21wb25lbnQgOAovRmlsdGVyL0RDVERlY29kZS9MZW5ndGggMTM0 Nzc+PnN0cmVhbQr/2P/uAA5BZG9iZQBkAAAAAAH/2wBDAAICAgICAgICAgIDAwIDBAYEBAMDBAcF BgQGCQgJCQkICAgKCw4MCgoNCggIDBAMDQ4PDxAPCQwREhEPEg4PDw//2wBDAQMDAwQDBAcEBAcP CggKDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw//wAAR CADhASwDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 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 APCr00f+1q63NM8CU/ZPlq1NfQ/jpqTpQUFoKBIKDKoFBSHp9+gBX7UACd6AI6ACgCRPuUAR/wDL agBH+/QBKn3KAJKAK9AA/wBygAoBj0+/UrcuH8Ajf79ay2Cl/DYtKRhR3kFEDeewUIVH4WFKPxGF LdkT/frOfxDfwyFf7lEPiY1/BgIn36EaT+yRv9+tDGPUWpj0Nnugoj0KqfBEKUtyp/EV6Ujnj/EY 9P8AVVSKW4yhhLoFT3NHtP5BUPoZL+IwrWAVdgrQwrfGf//ZCmVuZHN0cmVhbQplbmRvYmoKNDAg MCBvYmoKPDwvU3VidHlwZS9JbWFnZQovQ29sb3JTcGFjZS9EZXZpY2VSR0IKL1dpZHRoIDI4Ngov SGVpZ2h0IDIxNQovQml0c1BlckNvbXBvbmVudCA4Ci9GaWx0ZXIvRENURGVjb2RlL0xlbmd0aCAx NDk0MT4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQAAAAAAf/bAEMAAgICAgICAgICAgMDAgMEBgQEAwME BwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwNDg8PEA8JDBESEQ8SDg8PD//bAEMBAwMDBAMEBwQE Bw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD//A ABEIANcBHgMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAAC AQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZ GiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOU lZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T1 9vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAAB AncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Sl 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 tY4NW8//AEt7q1itJXaENFHshuvJh2O+z77unTRnJY+NJXS5V33tr0f+R6tbF5di8VLE4zlnUcpc y9yzja0LNyitnuryurPax9Z/Gm/aHx78El1XR9dufCem3l3reoXOj6Ne6mqTxQeTbpIttE5/1k5c f9cazlUlLMvZxTsfH5HToQy/MHGSVeSiqabSvd+9u10PKfigNY8RfFCy8beCdE8UtrWl+CL5vDks tjqdtbT6m7OyJMj7I4GRYPnS52ed50P3vLQDLHRrwp1nFPm05Pv1/Duerklf6vlbweLcP3lSPPrF +6u27tfrHbXVa2z/AIe+Ao/FvxGebU5PG9z4H0Hw5FbpJ46h1GNr3VLmVXnmhN2A4wlrHuRf3YLj aqcl/Yy5/v6kpRvTtG1+9tdztq5zPLcJfBuCqTm2+TluoLSKdl5/1qfyyVsflJJQBJQAmW9aAFoA koAKCySgAoAKADZ71AEez3oANnvVgFAElAElABQAUAf3L7VPYVA7sTYvHyj8qLBdhsQdEX8qVkF3 3FwBkgDNMT1IwiLlgig+wpp3Ccnbcwtb0LSPEWnXuj65pVpqWmXKeXPYX0CTxTIezo/ytWFWnzvU 3oYiVN3i7MyPDHgzwl4KspNO8J+G9L0bTGkM72ulWkdrEX/v7EUDdhVrodrWtYeIzWtjH78nJrS7 beh2uAPc1OhyxTW7HbE67Bk+1KyLu+4bFAwFA/CmF2JjjBH4UKwpX3Rwvir4f+CfGqWkPjHwpo+t Q27+ZBFqtjDdrC3qgdTtPvWE6HO9rnTRzWthNIScW+zZ0Ol6bp+kWFnYabaw22m20aQQW9ugjjiV flVEQDCqMYwK32Via1eVaTnJ3bNnAHWjS1rHKo63F2JjGxcfSi2t+ppd9wKqeCoI9xSsr3C7DYn9 xfypvXcOZ9w2J/cX8qNg5n3P/9kKZW5kc3RyZWFtCmVuZG9iagozOSAwIG9iago8PC9TdWJ0eXBl L0ltYWdlCi9Db2xvclNwYWNlL0RldmljZVJHQgovV2lkdGggMzE2Ci9IZWlnaHQgMzUwCi9CaXRz UGVyQ29tcG9uZW50IDgKL0ZpbHRlci9EQ1REZWNvZGUvTGVuZ3RoIDIzODM1Pj5zdHJlYW0K/9j/ 7gAOQWRvYmUAZAAAAAAB/9sAQwACAgICAgICAgICAwMCAwQGBAQDAwQHBQYEBgkICQkJCAgICgsO DAoKDQoICAwQDA0ODw8QDwkMERIRDxIODw8P/9sAQwEDAwMEAwQHBAQHDwoICg8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P/8AAEQgBXgE8AwERAAIRAQMR Af/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQEC AwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqy s7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEB AQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEH YXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZX WFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLD xMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fSoAKACgAoA KACgAoAKACgAoAKACgAoAKACjlAKOUAqvZxC8go9nEOaQU7RFzSCi0Q5pBU8sSeaQUcsQ5pCAY70 uU3uhaOUzlqFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFA BTAKQA9apCuiJ5o4k3zSIkf/AE0+Sjlb2QOSXUxpfEmjRfJJqFv5n9xH31awsmcjx0EVP+Et0v8A 5Zpczf8AXOGn9TkH9oQKb+OdLR/Ikt7hJP7jmNP/AGetFgJdzN5jEiTx5prtxFcf99J/jT+oPuH9 ox7B/wAJ3pH8aXKf9dE/+zqPqEu5X1+JoQeM9BlOPtux/wC5Iuyk8DND+vxNa21WxvP+PW7tn/3H rPka6G0aifU1KVjZST6hWYwpAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFA 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 9fNkkgjQx5jViM4JUcVEKcrtuRzVcROhaCe5JF8igHGe+BjNUo2VkOnUlNKE3d9x3mYA4rkk9S6k 1GVrH//ZCmVuZHN0cmVhbQplbmRvYmoKMzggMCBvYmoKPDwvU3VidHlwZS9JbWFnZQovQ29sb3JT cGFjZS9EZXZpY2VSR0IKL1dpZHRoIDMzNgovSGVpZ2h0IDM2MgovQml0c1BlckNvbXBvbmVudCA4 Ci9GaWx0ZXIvRENURGVjb2RlL0xlbmd0aCAxOTIwMT4+c3RyZWFtCv/Y/+4ADkFkb2JlAGQAAAAA Af/bAEMAAgICAgICAgICAgMDAgMEBgQEAwMEBwUGBAYJCAkJCQgICAoLDgwKCg0KCAgMEAwNDg8P EA8JDBESEQ8SDg8PD//bAEMBAwMDBAMEBwQEBw8KCAoPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8P Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD//AABEIAWoBUAMBEQACEQEDEQH/xAAfAAABBQEBAQEB AQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEH InEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFla Y2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbH yMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQID BAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJ IzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APzPftQAUAVn+/VgMftQBHWoBQAUAIn3 6ALtABQBJDQJljZ70MzkSInyVn1AsbNi1qgLkKb1rQDQ2fJQBcRKsC4iUITNCFK6EZsuIj0CLiQy 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 yiEbO2uu+u51VPEOrKti5SotQqqGkZuLXJbZro9bprro1Yn139kPQb+90G70u88P26WekppF0NV8 JWN6CiTPKJbOEbIbeXfNOT+5dG3p8nyfNSyqC6K+2yfnp2MsNx5ONCrQnSlaUubSpJPa1pO7clon umn5Ox3ln8Axpel/GOx0fxHHZ3vje1gsLW7g05VXR7aG0FrCiQq6owT53wuxfn+767VssjUp1YL7 dvwPPxPGKlPAXoe7h3J25n7zlLmu203a9u7t16lG2/Z0XTbvULrSvFYtpR4Kh8G6YHsfMOmKnmf6 R/rBv3MYyU+T/V/e54VXAKVWpUX2oxX3FV+K7wUXS19p7Ru+76Lboup89+NPA+t/C3VLvRPh8/iu PxBaeB7bw1beV4UbULTxC2H8mWG9iYpZzRyF9/2nCfvA+x/v1yYyhKv7RwjraK2/HQ+nyrOaebyU 8dCLXtPaczqKLjbo003Jdktel0j6osvhNew/s92nwctteGmXv/CPJox1VLczeQ3lbGkEYdc/xcbx 1r0sZh3V50u0V9258hXztPP3mjp88eZu17X7dOh1t74At5fhZN8M9M1B7CJtFOkW9/DEN9uvleSr BfYVpi8LGrTlFdUl9x5v9sOGb/WnC65ua1/O5883/wCyRp+rf8Iq0mteG3v9N0SHQbmXU/CsWop9 mic+VJZLcTP9mmCvIhZ/OR+Mp8tcn9nxdRz02S2vt6n0z44q0q0koNRlJyspuLu1qm42ur620fmz 2T4o/B8/EX4T3nws0vW49CsJktIUkWx8yKKGGRH8ryo3i+QhAmFKYFXj6PtppHk5FxH/AGRmUczl Q5pLm0b6tWvfV/fcwvGHwq+IHxA+H3ijwF4p+IGhNDqEcCRTaT4cntfL8uVHdJEe/cujhNmEdDz9 6pzDBPE07NF5Xn9LJsdTzOFBuUebRyXVNbpb69fuOK8Yfs2eL/Ea/FK10n4mWumab8QLe0XVoJNA EzxzQwpAz27i5TYjxxpuRxIf7rioWE5fK+//AAD1cv42w9BYObwt3h/aWvJ68+3NpvHo0fU09rBp +i/ZIUxDAixgdPlGBXp0FyaHwOIxM8bOb6ydz8Yk719KeeWKACgAoAsJ3oAH7UASfwUACffoAkoA IaALlABQAUASQ0AWE+/QWbkP3DQBuWf3DQQdBb/coA1LOgg1LXvQwLid6dI5sQ37RH1D8GP+RV1D /r+f/wBAjryMb/EPZq/wInsR6iuEuOwh+8frT6GH2iopPmDk0TWj+R3tKxISfMPPalP4WSvhGRcv Hn3q+jHP4WSuSHXBoWx5U21NWZVmAVZdox8w6VNPVq5vmEn7Falok+dGM8YNUvhZi2/bQ1JT1/Kp OmfwxHN/Skil8SKTEiNuT1H8606o6re8h2T5s/PpUr4Y/MX2YkqqrAblBxjqM1wT0crGd2pOxFdE hRg44PT8K9GGpyYhtYeo/T8yweo+hrJmv20OH+rNETV/GMHSOm/iMqvxDU+5+P8AWre5dfb7ihAz GaPJPU1rUS5Gdk0uViaz/wAg24/4B/6GK54bnF9s/9kKZW5kc3RyZWFtCmVuZG9iago0NCAwIG9i ago8PC9SMzcKMzcgMCBSL1IxMQoxMSAwIFIvUjkKOSAwIFI+PgplbmRvYmoKNDUgMCBvYmoKPDwv U3VidHlwZS9UeXBlMUMvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0NiAwIFI+PnN0cmVhbQp4 nFVWC1RTxxa9MeTeq0VQbiMCmkTBD0oFESrKR+UjYAFRBAW/CBEoSaD8saAitlYGamu1paj8FEQq giJqEQVErVoQqGiJGlA+mlb7altfz82b8N6bYF/fcq27smbm3jnZs88++4yAMhpDCQSCcX5yRZo8 JS4q0jCz460E/JQx/FRhLlb9y1mXKZpKBRx5Oh4ZC5GxUfkUY1MzeDYRik0hYwIlFAgyCoq8EhIz k+JiYlNks0NXr7WdO9fu/yvzFy1aJNua+b83Mm95clyMSjaTDNLkioREpVyV4irzIl8rFHFRshhF ZmJssiwyOloebdgWFqmQx8uWxyniEhMT0mSzvWxljg4O898hP45BccqtqcmykEhVsixAtloek6qI THpjkaIom4BlmaqoQM+EaK9Eufe2YJ+kmOXJsatT4kJS18QrIpVb18rsZ1LUO9R0KoJaSXlT8yhr KpjyoWyoVdRyagblS82nZlIhlB81i1pD+VMLqFBqBeVEhVHOVAAVSHlSQZQX5UIJqAkUQ80gjFJG lIR8eph6KJgl2CD4ZYzjmM/HgHC18IzwVyNbI5XRl0Y/iuJEBSKedqFP0I8ZislnvmOGWQvWnr05 1nrs9rH1Y8+P7RqngmoTvgVpdEyJ4KFWCMt0SvG8ESUfrsF62kRnj0ohQs07lAh4FSSI7+ME0R80 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 yA3eyHW909Y4jNjb3QGue0JClkXIEpnPI9sSzylYSb0lsvak16ztcu8Dmvjy1lBpYHeEIQKxcpVG 8dY7wd/ARuKxaVh0IbkvskMWa0qsCKhlJSN3uuvO3Jz1xO3yQqetxxZ4jMdWD1PBil9N6m2EhcLr rBKOd9nIuG8mertxz8oDyxywGHKJL1kIC4ixYbD/DCynQQ5DwovAdHDil4NEBEv4CxxY6D6QiPEj +hX8b08zejP7Uxy+VI4cQnvYwz4+h6NVFWcDpL6tEZVRiA2OUoccuRHyJTjDCz/AvOf7PsEii0xe Hl7gXMiOPxdfDXNFfJRgttfQPlgtNtN1d0z1V4klCKDxibFz4qe07W/Jn8EmWD/xZ0Wmtv8B0fBk xv/pGLnr6JJmURMsI8RdZWXRcuBofN/8p5s/Pb7yKwIJC2+uBDF2xNNXO+G5ePKHG0HU1VRY1Sz1 xcs2vIEXRLJggfe509rTWTmnMrLis5PJQBt9E1YDW3H2krlGF10uq1aWuaAdSHUqLOekYOy05NEX wybR//Lo96y95fKTx88FXRzs6iLHushjxhl5PyN4Gum2yeA4pa3NxgYcG21epKj/BC/9y3YKZW5k c3RyZWFtCmVuZG9iago1MCAwIG9iago1NDQ2CmVuZG9iagozNyAwIG9iago8PC9CYXNlRm9udC9Y QVJZQ1orSGVsdmV0aWNhL0ZvbnREZXNjcmlwdG9yIDM2IDAgUi9UeXBlL0ZvbnQKL0ZpcnN0Q2hh ciAzMi9MYXN0Q2hhciAxMjEvV2lkdGhzWwoyNzggMCAwIDAgMCAwIDY2NyAwIDAgMCAwIDAgMCAw IDAgMjc4CjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCA2NjcgNjY3IDcyMiA3MjIg NjY3IDYxMSAwIDAgMCAwIDAgNTU2IDgzMyAwIDAKNjY3IDAgNzIyIDY2NyA2MTEgMCAwIDk0NCAw IDAgMCAwIDAgMCAwIDAKMCA1NTYgNTU2IDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAwIDUw MCAyMjIgODMzIDU1NiA1NTYKNTU2IDAgMzMzIDUwMCAyNzggNTU2IDAgMCAwIDUwMF0KL0VuY29k aW5nL1dpbkFuc2lFbmNvZGluZy9TdWJ0eXBlL1R5cGUxPj4KZW5kb2JqCjExIDAgb2JqCjw8L0Jh c2VGb250L0lTQURYQytUaW1lcy1Sb21hbi9Gb250RGVzY3JpcHRvciAxMCAwIFIvVHlwZS9Gb250 Ci9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTIyL1dpZHRoc1sKMjUwIDAgMCA1MDAgMCAwIDc3OCAw IDMzMyAzMzMgMCAwIDI1MCAzMzMgMjUwIDI3OAo1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAg NTAwIDUwMCA1MDAgMjc4IDI3OCAwIDAgMCAwCjkyMSA3MjIgNjY3IDY2NyA3MjIgNjExIDU1NiA3 MjIgNzIyIDMzMyAzODkgMCA2MTEgODg5IDcyMiA3MjIKNTU2IDAgNjY3IDU1NiA2MTEgNzIyIDcy MiA5NDQgMCAwIDAgMCAwIDAgMCAwCjAgNDQ0IDUwMCA0NDQgNTAwIDQ0NCAzMzMgNTAwIDUwMCAy NzggMjc4IDUwMCAyNzggNzc4IDUwMCA1MDAKNTAwIDUwMCAzMzMgMzg5IDI3OCA1MDAgNTAwIDcy MiA1MDAgNTAwIDQ0NF0KL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9TdWJ0eXBlL1R5cGUxPj4K ZW5kb2JqCjkgMCBvYmoKPDwvQmFzZUZvbnQvR1BERVdLK1RpbWVzLUJvbGQvRm9udERlc2NyaXB0 b3IgOCAwIFIvVHlwZS9Gb250Ci9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTMzL1dpZHRoc1sKMjUw IDAgMCAwIDAgMCA4MzMgMCAwIDAgMCAwIDI1MCAzMzMgMjUwIDAKMCA1MDAgNTAwIDUwMCA1MDAg NTAwIDAgNTAwIDAgNTAwIDMzMyAwIDAgMCAwIDAKMCA3MjIgNjY3IDcyMiA3MjIgNjY3IDYxMSA3 NzggNzc4IDM4OSAwIDAgNjY3IDk0NCA3MjIgNzc4CjYxMSAwIDcyMiA1NTYgNjY3IDAgNzIyIDAg MCAwIDY2NyAwIDAgMCAwIDAKMCA1MDAgNTU2IDQ0NCA1NTYgNDQ0IDMzMyA1MDAgNTU2IDI3OCAw IDU1NiAyNzggODMzIDU1NiA1MDAKNTU2IDU1NiA0NDQgMzg5IDMzMyA1NTYgNTAwIDcyMiAwIDUw MCA0NDQgMCAwIDAgMCAwCjAgMCAwIDAgMCAxMDAwXQovRW5jb2RpbmcvV2luQW5zaUVuY29kaW5n L1N1YnR5cGUvVHlwZTE+PgplbmRvYmoKMzYgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9G b250TmFtZS9YQVJZQ1orSGVsdmV0aWNhL0ZvbnRCQm94Wy04IC0yMTggOTI5IDc0MV0vRmxhZ3Mg NAovQXNjZW50IDc0MQovQ2FwSGVpZ2h0IDc0MQovRGVzY2VudCAtMjE4Ci9JdGFsaWNBbmdsZSAw Ci9TdGVtViAxMzkKL01pc3NpbmdXaWR0aCAyNzgKL0NoYXJTZXQoL0wvQS95L24vYy9NL0Ivby9k L0MvcC9lL0QvZi9QL0Uvci9nL0Yvcy9oL1IvdC9pL1MvdS9UL2svbC9hL20vYi9XL3NwYWNlL3Ns YXNoL2FtcGVyc2FuZCkvRm9udEZpbGUzIDQ1IDAgUj4+CmVuZG9iagoxMCAwIG9iago8PC9UeXBl L0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0lTQURYQytUaW1lcy1Sb21hbi9Gb250QkJveFstNzAg LTIxOCA5MzIgNjg4XS9GbGFncyA0Ci9Bc2NlbnQgNjg4Ci9DYXBIZWlnaHQgNjg4Ci9EZXNjZW50 IC0yMTgKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDEzOQovTWlzc2luZ1dpZHRoIDI1MAovQ2hhclNl dCgvdHdvL0wvQS95L24vYy90aHJlZS9NL0Ivei9vL2QvZm91ci9OL0MvcC9lL2F0L2ZpdmUvTy9E L3EvZi9zaXgvUC9FL3IvZy9zZXZlbi9GL3MvaC9laWdodC9SL0cvdC9pL25pbmUvUy9IL3Uvai9j b2xvbi9UL0kvdi9rL3NlbWljb2xvbi9VL0ovdy9sL2EvVi94L20vYi9XL3BhcmVubGVmdC9wYXJl bnJpZ2h0L3NwYWNlL2NvbW1hL2h5cGhlbi9wZXJpb2QvbnVtYmVyc2lnbi9zbGFzaC96ZXJvL29u ZS9hbXBlcnNhbmQpL0ZvbnRGaWxlMyA0NyAwIFI+PgplbmRvYmoKOCAwIG9iago8PC9UeXBlL0Zv bnREZXNjcmlwdG9yL0ZvbnROYW1lL0dQREVXSytUaW1lcy1Cb2xkL0ZvbnRCQm94WzAgLTIwNiA5 MjEgNjkyXS9GbGFncyA0Ci9Bc2NlbnQgNjkyCi9DYXBIZWlnaHQgNjkyCi9EZXNjZW50IC0yMDYK L0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDEzOAovTWlzc2luZ1dpZHRoIDI1MAovQ2hhclNldCgvdHdv L0wvQS95L24vYy90aHJlZS9NL0Ivei9vL2QvZm91ci9OL0MvcC9lL1ovZml2ZS9PL0QvcS9mL1Av RS9yL2cvc2V2ZW4vRi9lbGxpcHNpcy9zL2gvUi9HL3QvaS9uaW5lL1MvSC91L2NvbG9uL1QvSS92 L2svdy9sL2EvVi9tL2Ivc3BhY2UvY29tbWEvaHlwaGVuL3BlcmlvZC9vbmUvYW1wZXJzYW5kKS9G b250RmlsZTMgNDkgMCBSPj4KZW5kb2JqCjIgMCBvYmoKPDwvUHJvZHVjZXIoR1BMIEdob3N0c2Ny aXB0IDguMTUpCi9DcmVhdGlvbkRhdGUoRDoyMDA5MDQxOTAyMTYwMSkKL01vZERhdGUoRDoyMDA5 MDQxOTAyMTYwMSkKL1RpdGxlKE1pY3Jvc29mdCBXb3JkIC0gVGl0YW5pdW0tUHJvZmlsZS13aXRo IEFub2Rlcy5kb2MpCi9DcmVhdG9yKFBTY3JpcHQ1LmRsbCBWZXJzaW9uIDUuMi4yKQovQXV0aG9y KEt1bWFyKT4+ZW5kb2JqCnhyZWYKMCA1MQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMTUzNjQg MDAwMDAgbiAKMDAwMDIwMTgwNSAwMDAwMCBuIAowMDAwMDE1MjgyIDAwMDAwIG4gCjAwMDAwMTQ3 MjYgMDAwMDAgbiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDA0NDgwIDAwMDAwIG4gCjAwMDAw MTU0MTIgMDAwMDAgbiAKMDAwMDIwMTQyMCAwMDAwMCBuIAowMDAwMjAwMTkxIDAwMDAwIG4gCjAw MDAyMDA5NjYgMDAwMDAgbiAKMDAwMDE5OTcxNCAwMDAwMCBuIAowMDAwMDcyMjEzIDAwMDAwIG4g CjAwMDAwNjQ1MDQgMDAwMDAgbiAKMDAwMDA1MzI4MiAwMDAwMCBuIAowMDAwMDQ1MTIyIDAwMDAw IG4gCjAwMDAwMzcyNzkgMDAwMDAgbiAKMDAwMDAyODY2OSAwMDAwMCBuIAowMDAwMDIwMzIwIDAw MDAwIG4gCjAwMDAwMTU1OTIgMDAwMDAgbiAKMDAwMDAxNTQ1MyAwMDAwMCBuIAowMDAwMDE1NDgz IDAwMDAwIG4gCjAwMDAwODAyOTYgMDAwMDAgbiAKMDAwMDAxNDkxMCAwMDAwMCBuIAowMDAwMDA0 NTAwIDAwMDAwIG4gCjAwMDAwMDk5MTUgMDAwMDAgbiAKMDAwMDEwMjQzMSAwMDAwMCBuIAowMDAw MDkyNDMyIDAwMDAwIG4gCjAwMDAwODU5NzIgMDAwMDAgbiAKMDAwMDA4MDQzMiAwMDAwMCBuIAow MDAwMDgwMzM3IDAwMDAwIG4gCjAwMDAwODAzNjcgMDAwMDAgbiAKMDAwMDExMTQwOCAwMDAwMCBu IAowMDAwMDE1MDk2IDAwMDAwIG4gCjAwMDAwMDk5MzYgMDAwMDAgbiAKMDAwMDAxNDcwNSAwMDAw MCBuIAowMDAwMjAwNjY0IDAwMDAwIG4gCjAwMDAxOTkzMDcgMDAwMDAgbiAKMDAwMDE2NDI0MSAw MDAwMCBuIAowMDAwMTQwMjU4IDAwMDAwIG4gCjAwMDAxMjUxNjkgMDAwMDAgbiAKMDAwMDExMTU0 NCAwMDAwMCBuIAowMDAwMTExNDQ5IDAwMDAwIG4gCjAwMDAxMTE0NzkgMDAwMDAgbiAKMDAwMDE4 MzU5MCAwMDAwMCBuIAowMDAwMTgzNjQyIDAwMDAwIG4gCjAwMDAxODY1MzQgMDAwMDAgbiAKMDAw MDE4NjU1NSAwMDAwMCBuIAowMDAwMTkzNzMzIDAwMDAwIG4gCjAwMDAxOTM3NTQgMDAwMDAgbiAK MDAwMDE5OTI4NiAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDUxIC9Sb290IDEgMCBSIC9JbmZv IDIgMCBSCi9JRCBbKKFpG0yhUiNRdu2C6zTYjYMpKKFpG0yhUiNRdu2C6zTYjYMpXQo+PgpzdGFy dHhyZWYKMjAyMDI0CiUlRU9GCg== ------=_NextPart_000_019A_01CA0463.D74B4C30-- From al-john@hotmail.com Mon Jul 13 21:07:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.7 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6E27p4o082542 for ; Mon, 13 Jul 2009 21:07:51 -0500 X-ASG-Debug-ID: 1247537309-38a401470000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from snt0-omc3-s8.snt0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BD95C136538C for ; Mon, 13 Jul 2009 19:08:29 -0700 (PDT) Received: from snt0-omc3-s8.snt0.hotmail.com (snt0-omc3-s8.snt0.hotmail.com [65.55.90.147]) by cuda.sgi.com with ESMTP id DuuTDG7M4YKVDUJn for ; Mon, 13 Jul 2009 19:08:29 -0700 (PDT) Received: from SNT109-W28 ([65.55.90.136]) by snt0-omc3-s8.snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 13 Jul 2009 19:08:28 -0700 Message-ID: Content-Type: multipart/alternative; boundary="_2f5fceb3-8c3c-48a5-9614-0a3c9821fadd_" X-Originating-IP: [72.163.255.118] From: crow al To: , CC: X-ASG-Orig-Subj: RE: How to simulate journal corruption Subject: RE: How to simulate journal corruption Date: Tue, 14 Jul 2009 10:08:28 +0800 Importance: Normal In-Reply-To: <4A5B4833.9070300@sandeen.net> References: <4A5B4833.9070300@sandeen.net> MIME-Version: 1.0 X-OriginalArrivalTime: 14 Jul 2009 02:08:28.0501 (UTC) FILETIME=[FA6AA850:01CA0427] X-Barracuda-Connect: snt0-omc3-s8.snt0.hotmail.com[65.55.90.147] X-Barracuda-Start-Time: 1247537309 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0196 1.0000 -1.8934 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.89 X-Barracuda-Spam-Status: No, SCORE=-1.89 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3340 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --_2f5fceb3-8c3c-48a5-9614-0a3c9821fadd_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit Hi, Olaf & Eric Thanks for your kindly reply. I will try your suggestions & if there is any interesting findings, I will let your know Thanks & Regards. Lv Wentao. > Date: Mon, 13 Jul 2009 09:44:03 -0500 > From: sandeen@sandeen.net > To: al-john@hotmail.com > CC: xfs@oss.sgi.com > Subject: Re: How to simulate journal corruption > > crow al wrote: > > Hi, there > > > > I'm a QA engineer from Cisco. I'm working on a test case concerning XFS > > journal playback failure, which needs to manually inject error to XFS. > > > > I did some google work but get no luck. Then I think maybe XFA-QA could > > give me some advice. That why I come to here. > > > > Is there anyone could tell me how to inject error into XFS or is there > > any tool could be used? > > > > Wish for your response. > > > > Thanks & Regards. > > Lv Wentao. > > test 044 in xfstests runs something called "loggen" which will generate > log traffic to be replayed on mount, if I'm reading it right. Of course > that's an uncorrupted log ... > > There is another tool called "fsfuzzer" which writes random junk over a > filesystem. You could probably combine the two tools to create valid > logs to replay, and then write varying degrees of junk on top with > fsfuzzer, and try to replay the result. > > You could probably even use fsfuzzer "stock" and just restrict the > fuzzing to the log portion of the filesystem. > > I'm not sure what kinds of errors you are trying to catch - oopses, > hangs, improperly replaying a corrupted log, etc - but it sounds well > worth doing. FWIW when I used fsfuzzer, it often ran into problems in > the log, so I imagine you'll uncover some interesting things; if you do, > please share. :) > > -Eric _________________________________________________________________ With Windows Live, you can organize, edit, and share your photos. http://www.microsoft.com/middleeast/windows/windowslive/products/photo-gallery-edit.aspx --_2f5fceb3-8c3c-48a5-9614-0a3c9821fadd_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: 8bit Hi, Olaf & Eric

Thanks for your kindly reply. I will try your suggestions & if there is any interesting findings, I will let your know

Thanks & Regards.
Lv Wentao.

> Date: Mon, 13 Jul 2009 09:44:03 -0500
> From: sandeen@sandeen.net
> To: al-john@hotmail.com
> CC: xfs@oss.sgi.com
> Subject: Re: How to simulate journal corruption
>
> crow al wrote:
> > Hi, there
> >
> > I'm a QA engineer from Cisco. I'm working on a test case concerning XFS
> > journal playback failure, which needs to manually inject error to XFS.
> >
> > I did some google work but get no luck. Then I think maybe XFA-QA could
> > give me some advice. That why I come to here.
> >
> > Is there anyone could tell me how to inject error into XFS or is there
> > any tool could be used?
> >
> > Wish for your response.
> >
> > Thanks & Regards.
> > Lv Wentao.
>
> test 044 in xfstests runs something called "loggen" which will generate
> log traffic to be replayed on mount, if I'm reading it right. Of course
> that's an uncorrupted log ...
>
> There is another tool called "fsfuzzer" which writes random junk over a
> filesystem. You could probably combine the two tools to create valid
> logs to replay, and then write varying degrees of junk on top with
> fsfuzzer, and try to replay the result.
>
> You could probably even use fsfuzzer "stock" and just restrict the
> fuzzing to the log portion of the filesystem.
>
> I'm not sure what kinds of errors you are trying to catch - oopses,
> hangs, improperly replaying a corrupted log, etc - but it sounds well
> worth doing. FWIW when I used fsfuzzer, it often ran into problems in
> the log, so I imagine you'll uncover some interesting things; if you do,
> please share. :)
>
> -Eric


With Windows Live, you can organize, edit, and share your photos. --_2f5fceb3-8c3c-48a5-9614-0a3c9821fadd_-- From sandeen@sandeen.net Mon Jul 13 23:13:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6E4DOBY086765 for ; Mon, 13 Jul 2009 23:13:24 -0500 X-ASG-Debug-ID: 1247545289-138502c00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1A4C1A556CA for ; Mon, 13 Jul 2009 21:21:29 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id rCE0FqqJ7iyl26EC for ; Mon, 13 Jul 2009 21:21:29 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 24503A9B0CA; Mon, 13 Jul 2009 23:13:59 -0500 (CDT) Message-ID: <4A5C0606.4030102@sandeen.net> Date: Mon, 13 Jul 2009 23:13:58 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Subject: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247545291 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3349 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean As reported in "bad fs - xfs_repair 3.01 crashes on it" ... The filesystem encountered a bad attribute fork which is cleared: local inode 3857051697 attr too small (size = 3, min size = 4) bad attribute fork in inode 3857051697, clearing attr fork clearing inode 3857051697 attributes and then later this inode failed an assertion: data fork in regular inode 3857051697 claims used block 537147998 xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. The ASSERT is there because process_inode_data_fork() calls process_exinode() twice; once with check_dups == 1, and again with check_dups == 0. The assertion is that they should both return the the same answer about whether the inode contained duplicate blocks. However, they are tested in different ways; with check_dups set, process_exinode() simply does search_dup_extent() when it gets to process_bmbt_reclist_int(); without check_dups set, it utilizes the ba_bmap[][] array of bitmaps, compared against the current extent record. Long story short(er), when we cleared the bad attribute in clear_dinode_attr(), it used XFS_DFORK_APTR() to get to the shortform attribute header, and set some fields. However, di_forkoff must have been corrupt as well, because setting these fields corrupted the extent list, and the 4th extent on the inode got its physical block modified from: 431241822 / 0x19B43A5E to: 537147998 / 0x20043A5E and this new (corrupt) physical block matched another inode's block, triggering the dup & return 1, triggering the ASSERT. Whew. Anyway, simply setting di_forkoff to 0 should be enough to flag the inode as having no attr fork, and messing with where we think the shortform attribute header may be is now shown to be dangerous. Simply not mucking w/ the header seems to fix the problem, based on testing with the metadump image. Almost. process_inode_attr_fork() calls clear_dinode_attr() which puts it into the XFS_DINODE_FMT_EXTENTS state, but upon return resets that to XFS_DINODE_FMT_LOCAL. Later, it's checked that if !XFS_DFORK_Q(), the format is XFS_DINODE_FMT_EXTENTS (!) and it gets reset. So drop the setting to XFS_DINODE_FMT_LOCAL; for whatever reason, "no attributes" seems to expect _EXTENTS format, see for example xfs_attr_shortform_remove(), clear_dinode_core(), and xfs_attr_fork_reset() in the kernel, which all set it to _EXTENTS in this circumstance. Fix this up after both calls to clear_dinode_attr(). Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index 84e1d05..23de0a8 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -103,23 +103,8 @@ clear_dinode_attr(xfs_mount_t *mp, xfs_dinode_t *dino, xfs_ino_t ino_num) } /* get rid of the fork by clearing forkoff */ - - /* Originally, when the attr repair code was added, the fork was cleared - * by turning it into shortform status. This meant clearing the - * hdr.totsize/count fields and also changing aformat to LOCAL - * (vs EXTENTS). Over various fixes, the aformat and forkoff have - * been updated to not show an attribute fork at all, however. - * It could be possible that resetting totsize/count are not needed, - * but just to be safe, leave it in for now. - */ - - if (!no_modify) { - xfs_attr_shortform_t *asf = (xfs_attr_shortform_t *) - XFS_DFORK_APTR(dino); - asf->hdr.totsize = cpu_to_be16(sizeof(xfs_attr_sf_hdr_t)); - asf->hdr.count = 0; - dinoc->di_forkoff = 0; /* got to do this after asf is set */ - } + if (!no_modify) + dinoc->di_forkoff = 0; /* * always returns 1 since the fork gets zapped @@ -2195,7 +2180,6 @@ process_inode_attr_fork( if (delete_attr_ok) { do_warn(_(", clearing attr fork\n")); *dirty += clear_dinode_attr(mp, dino, lino); - dinoc->di_aformat = XFS_DINODE_FMT_LOCAL; } else { do_warn("\n"); *dirty += clear_dinode(mp, dino, lino); @@ -2253,12 +2237,10 @@ process_inode_attr_fork( lino); if (!repair) { /* clear attributes if not done already */ - if (!no_modify) { + if (!no_modify) *dirty += clear_dinode_attr(mp, dino, lino); - dinoc->di_aformat = XFS_DINODE_FMT_LOCAL; - } else { + else do_warn(_("would clear attr fork\n")); - } *atotblocks = 0; *anextents = 0; } From jeffpc@josefsipek.net Tue Jul 14 00:41:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6E5fbQQ092831 for ; Tue, 14 Jul 2009 00:41:39 -0500 X-ASG-Debug-ID: 1247550136-2ffa02300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B4AC835EFA2 for ; Mon, 13 Jul 2009 22:42:16 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.212.112.196]) by cuda.sgi.com with ESMTP id 51t4d9t4aGsUHEJR for ; Mon, 13 Jul 2009 22:42:16 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 2E2B41C00DC4; Tue, 14 Jul 2009 01:42:15 -0400 (EDT) Date: Tue, 14 Jul 2009 01:42:15 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: Michael Monnerie , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Subject: Re: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Message-ID: <20090714054215.GI3022@josefsipek.net> References: <200907031320.48358@zmi.at> <4A5C0606.4030102@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A5C0606.4030102@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.212.112.196] X-Barracuda-Start-Time: 1247550136 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3354 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 13, 2009 at 11:13:58PM -0500, Eric Sandeen wrote: ... > Signed-off-by: Eric Sandeen Nice! Josef 'Jeff' Sipek. -- Humans were created by water to transport it upward. From michael.monnerie@is.it-management.at Tue Jul 14 01:05:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6E655DX093635 for ; Tue, 14 Jul 2009 01:05:06 -0500 X-ASG-Debug-ID: 1247551543-63df01ba0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1E58D13659DD for ; Mon, 13 Jul 2009 23:05:43 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id lqw5jjwwEtZJlXbS for ; Mon, 13 Jul 2009 23:05:43 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id C9F195380 for ; Tue, 14 Jul 2009 08:06:29 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 1D3F4400154 for ; Tue, 14 Jul 2009 08:05:42 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Subject: Re: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Date: Tue, 14 Jul 2009 08:05:35 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <200907031320.48358@zmi.at> <4A5C0606.4030102@sandeen.net> In-Reply-To: <4A5C0606.4030102@sandeen.net> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1550117.u71uDh1I6J"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907140805.40854@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247551544 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0205 1.0000 -1.8879 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.89 X-Barracuda-Spam-Status: No, SCORE=-1.89 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3356 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart1550117.u71uDh1I6J Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Dienstag 14 Juli 2009 Eric Sandeen wrote: > Whew. It's people like you I'm afraid of ;-) Is there still blood in your=20 vains or was it replaced with silicone once? To ask in a simple way: Will this version fix the problem on my disk? If=20 yes, where could I download it? (git ..?) mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart1550117.u71uDh1I6J Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpcIDQACgkQzhSR9xwSCbQSgACfQEivU6R7aEMszohMpSPnWiva niwAoKkqGhwEnRjYRmy/YvjXvJi1KdIc =SoMX -----END PGP SIGNATURE----- --nextPart1550117.u71uDh1I6J-- From sandeen@sandeen.net Tue Jul 14 01:16:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6E6GY3Q094207 for ; Tue, 14 Jul 2009 01:16:34 -0500 X-ASG-Debug-ID: 1247552677-43f201560000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 408FB10A2228 for ; Mon, 13 Jul 2009 23:24:38 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id TM3yI116XHOCg9KM for ; Mon, 13 Jul 2009 23:24:38 -0700 (PDT) Received: from [10.0.0.65] (ipod.sandeen.net [10.0.0.65]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 8A4E7A9BF28; Tue, 14 Jul 2009 01:17:08 -0500 (CDT) References: <200907031320.48358@zmi.at> <4A5C0606.4030102@sandeen.net> <200907140805.40854@zmi.at> Message-Id: <87A18C52-F601-491F-94EA-ED16AB6CE574@sandeen.net> From: Eric Sandeen To: Michael Monnerie In-Reply-To: <200907140805.40854@zmi.at> Content-Type: text/plain; charset=us-ascii; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit X-Mailer: iPod Mail (7A341) Mime-Version: 1.0 (iPod Mail 7A341) X-ASG-Orig-Subj: Re: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Subject: Re: [PATCH] xfs_repair - do not attempt to set shortform attr header when clearing Date: Tue, 14 Jul 2009 01:16:17 -0500 Cc: "xfs@oss.sgi.com" X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247552680 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3956 1.0000 -0.0114 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.01 X-Barracuda-Spam-Status: No, SCORE=-0.01 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3357 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 14, 2009, at 1:05 AM, Michael Monnerie wrote: > On Dienstag 14 Juli 2009 Eric Sandeen wrote: >> Whew. > > It's people like you I'm afraid of ;-) Is there still blood in your > vains or was it replaced with silicone once? Heh.. :) > > To ask in a simple way: Will this version fix the problem on my > disk? If > yes, where could I download it? (git ..?) > It's not committed yet, you could patch it yourself now, or wait til it's reviewed and committed... -Eric > mfg zmi > -- > // Michael Monnerie, Ing.BSc ----- http://it-management.at > // Tel: 0660 / 415 65 31 .network.your.ideas. > // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" > // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 > // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From olaf@sgi.com Tue Jul 14 05:34:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6EAYAXm104525; Tue, 14 Jul 2009 05:34:11 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6EAYkSm341684; Tue, 14 Jul 2009 12:34:46 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6EAYji7341817; Tue, 14 Jul 2009 12:34:45 +0200 (MEST) To: Julia Lawall Cc: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: Re: [PATCH 1/2] fs/xfs: Drop unnecessary NULL test References: From: Olaf Weber Date: Tue, 14 Jul 2009 12:34:43 +0200 Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Julia Lawall writes: > From: Julia Lawall > The result of container_of should not be NULL. In particular, in this case > the argument to the enclosing function has passed though INIT_DELAYED_WORK, > which dereferences it, implying that its container cannot be NULL. Given the defn of container_of() it seems clear that neither its input pointer nor its result should ever be NULL. In this particular case, there is a check for NULL and early exit in xfs_mru_cache_create(), the function that does the INIT_DELAYED_WORK(). Olaf > The semantic match that finds this problem is as follows: > (http://www.emn.fr/x-info/coccinelle/) > // > @@ > expression x,e; > @@ > x = container_of(...) > ... when != x = e > * x == NULL > // > Signed-off-by: Julia Lawall Acked-By: Olaf Weber > --- > fs/xfs/xfs_mru_cache.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c > index 4b0613d..0651ce7 100644 > --- a/fs/xfs/xfs_mru_cache.c > +++ b/fs/xfs/xfs_mru_cache.c > @@ -280,8 +280,8 @@ _xfs_mru_cache_reap( > xfs_mru_cache_t *mru = container_of(work, xfs_mru_cache_t, work.work); > unsigned long now, next; > - ASSERT(mru && mru->lists); > - if (!mru || !mru->lists) > + ASSERT(mru->lists); > + if (!mru->lists) > return; > spin_lock(&mru->lock); -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From julia@diku.dk Tue Jul 14 07:15:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ECF8EN108643 for ; Tue, 14 Jul 2009 07:15:08 -0500 X-ASG-Debug-ID: 1247574195-54dd016d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mgw1.diku.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ECB3DA59D42; Tue, 14 Jul 2009 05:23:15 -0700 (PDT) Received: from mgw1.diku.dk (mgw1.diku.dk [130.225.96.91]) by cuda.sgi.com with ESMTP id OMbb1QCWavtpGTsC; Tue, 14 Jul 2009 05:23:15 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mgw1.diku.dk (Postfix) with ESMTP id 7A93652C41C; Tue, 14 Jul 2009 14:15:44 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at diku.dk Received: from mgw1.diku.dk ([127.0.0.1]) by localhost (mgw1.diku.dk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id h5A1l9wNmn-J; Tue, 14 Jul 2009 14:15:43 +0200 (CEST) Received: from nhugin.diku.dk (nhugin.diku.dk [130.225.96.140]) by mgw1.diku.dk (Postfix) with ESMTP id 8B42B52C40D; Tue, 14 Jul 2009 14:15:42 +0200 (CEST) Received: from ask.diku.dk (ask.diku.dk [130.225.96.225]) by nhugin.diku.dk (Postfix) with ESMTP id 3EC396DFD13; Tue, 14 Jul 2009 14:15:17 +0200 (CEST) Received: by ask.diku.dk (Postfix, from userid 3767) id 71FA1154A89; Tue, 14 Jul 2009 14:15:42 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by ask.diku.dk (Postfix) with ESMTP id 6EC231547DF; Tue, 14 Jul 2009 14:15:42 +0200 (CEST) Date: Tue, 14 Jul 2009 14:15:42 +0200 (CEST) From: Julia Lawall To: Olaf Weber Cc: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 1/2] fs/xfs: Drop unnecessary NULL test Subject: Re: [PATCH 1/2] fs/xfs: Drop unnecessary NULL test In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Barracuda-Connect: mgw1.diku.dk[130.225.96.91] X-Barracuda-Start-Time: 1247574196 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3380 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Tue, 14 Jul 2009, Olaf Weber wrote: > Julia Lawall writes: > > > From: Julia Lawall > > The result of container_of should not be NULL. In particular, in this case > > the argument to the enclosing function has passed though INIT_DELAYED_WORK, > > which dereferences it, implying that its container cannot be NULL. > > Given the defn of container_of() it seems clear that neither its input > pointer nor its result should ever be NULL. container_of just does pointer arithmetic. The result of that arithmetic can be NULL, ie if the argument was obtained from an expression of the form &x->f where x was NULL. But in principle, values should be checked for NULL beforehand. julia From admin@helpdesk.org Tue Jul 14 11:04:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6EG43VX126906 for ; Tue, 14 Jul 2009 11:04:04 -0500 X-ASG-Debug-ID: 1247587931-6fd600d80000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy2.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5E5F1A5AF8D for ; Tue, 14 Jul 2009 09:12:11 -0700 (PDT) Received: from proxy2.bredband.net (proxy2.bredband.net [195.54.101.72]) by cuda.sgi.com with ESMTP id vCnZN8OMCkoBWZMi for ; Tue, 14 Jul 2009 09:12:11 -0700 (PDT) Received: from iph1.telenor.se (195.54.127.132) by proxy2.bredband.net (7.3.140.3) id 49F59CBD018D58F2 for linux-xfs@oss.sgi.com; Tue, 14 Jul 2009 18:04:40 +0200 X-SMTPAUTH-EUROMAIL: emanuel.nordstrom@bredband.net X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ArL/ABVJXErDNmVUXWdsb2JhbACBKlWFWYcMikIjI4dYnkdLXxIIiQWHAxWCERALBAiIZ4JtAUUD X-IronPort-AV: E=Sophos;i="4.42,398,1243807200"; d="scan'208";a="28939676" Received: from ps4.bredband.net ([195.54.101.84]) by iph1.telenor.se with ESMTP; 14 Jul 2009 18:04:40 +0200 Message-ID: <30692481.367171247587480086.JavaMail.root@ps4.bredband.net> Date: Tue, 14 Jul 2009 18:04:40 +0200 (CEST) From: ADMIN Reply-To: gbeggeone@hotmail.com X-ASG-Orig-Subj: Warning Storage quota full Subject: Warning Storage quota full MIME-Version: 1.0 Content-Type: text/plain;charset="ISO-8859-1" Content-Transfer-Encoding: 7bit X-Barracuda-Connect: proxy2.bredband.net[195.54.101.72] X-Barracuda-Start-Time: 1247587933 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3884 1.0000 -0.0307 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.55 X-Barracuda-Spam-Status: No, SCORE=1.55 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3395 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.58 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Your mailbox quota has been exceeded the storage limit which is 20GB as set by your administrator,You are currently running on 20.9GB. You may not be able to send or receive new mails until you re-validate your mailbox. To re-activate your account please click the link below http://www.123contactform.com/sf.php?s=admin1-23920 Thanks and we are sorry for the inconviniences Localhost From michael@rlogin.dk Tue Jul 14 21:58:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_24,J_CHICKENPOX_33,J_CHICKENPOX_43,J_CHICKENPOX_45, J_CHICKENPOX_53,J_CHICKENPOX_66,J_CHICKENPOX_84 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6F2wvNV164051 for ; Tue, 14 Jul 2009 21:58:57 -0500 X-ASG-Debug-ID: 1247626773-5c8a01980000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rlogin.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 35255363E2B for ; Tue, 14 Jul 2009 19:59:33 -0700 (PDT) Received: from rlogin.dk (rlogin.dk [81.161.188.225]) by cuda.sgi.com with ESMTP id bchE5XTC3AEtLuAM for ; Tue, 14 Jul 2009 19:59:33 -0700 (PDT) Received: by rlogin.dk (Postfix, from userid 1000) id AF4131800A98; Wed, 15 Jul 2009 05:00:47 +0200 (CEST) Date: Wed, 15 Jul 2009 05:00:47 +0200 From: Michael Ole Olsen To: xfs X-ASG-Orig-Subj: xfs+nfs crash in 2.6.30 and 2.6.30.1 Subject: xfs+nfs crash in 2.6.30 and 2.6.30.1 Message-ID: <20090715030046.GA28592@rlogin.dk> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="2oS5YaxWCcQjTEyO" Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: rlogin.dk[81.161.188.225] X-Barracuda-Start-Time: 1247626775 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --2oS5YaxWCcQjTEyO Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable radix_tree_tag_set/xfs_inode_set_reclaim_tag crash I keep getting kernel crashes with xfs+lvm2+mdadm (raid6) - correct in sync= ,=20 all xfs partitions checked for corruption (but there were none, but the cra= shes persists). The raid6 has just resynced now because of this kernel hang. 2.6.30 and 2.6.30.1 kernels on my nfsv3 server keep crashing, both with/wit= hout SMP, dynticks, selinux (although selinux for some reason seems to make it crash very ofte= n) The machine has been memtested (memtest86+) for 14hours straight, never any= stability issues. I have around 1-3 complete kernel lockups a day with this nfs kernel server= and xfs. Tried nfs both as module and direct in kernel - both hangs the kernel completely (can't even use magic sysrq) when the client uses lots of small= files/lots of IO. The remote export of samba is rock stable, nfs keeps crashing with small fi= les,=20 without nfs there seems to be no crashes. The /srv/diskless dir is a 80GB dir with lots of small files (kernels etc) I also get a=20 "svc: failed to register lockdv1 RPC service (errno 97)." in dmesg havn't seen that before in kernels below 2.6.30 Also lots of [xxxxx.yyyyy] reconnect_path: npd !=3D pd (see ***) And stale NFS handles on clients sometimes. Everything was stable on server+client until the server got 2.6.30 kernel,= =20 the mdadm raid6 only works in 2.6.30 or above - mdadm fails to initialize i= t in=20 anything else, so cannot downgrade (custom reshape to raid6 using echo into= /sys, all Q blocks on one disk). I have experimented with mount options on the client, and the client has=20 been stable with these mount options before, when the server had a kernel below 2.6.30 Ways to reproduce: o 2.6.30 or 2.6.31 kernel on nfs server o xfs exports on server with /etc/exports and /etc/fstab on client as paste= d below o nfs-kernel-server either as module loaded or in kernel. o Async on the client seems to make it more reproducible o dd if=3D/nfs/largefile of=3D/dev/null bs=3D4k on the client can trigger= =20 a kernel oops on the server in a few tries o copying over a large folder with lots of files on the client=20 import from server will trigger it. o selinux? seems to make it more unstable - i got instant kernel crash with= =20 selinux options on kernel when the nfsd started - now removed but probl= em is still there. I saw someone talking about kernel stack size would be the cause for this x= fs+nfs problem,=20 is there anything to this? Here is the most common crash trace: http://rlogin.dk/IMG_7155.JPG [1] A bugreport has already been filed, but no known solution: http://bugzilla.kernel.org/show_bug.cgi?id=3D13375 http://www.google.com/search?hl=3Dda&q=3Dxfs+radix (lots of results but no = known solution) The below trace (at the bottom of this mail is not as common as the one in = the link [1]) SERVER INFO root@mfs:~# rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 58792 status 100024 1 tcp 43201 status 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100021 1 udp 51962 nlockmgr 100021 3 udp 51962 nlockmgr 100021 4 udp 51962 nlockmgr 100021 1 tcp 57205 nlockmgr 100021 3 tcp 57205 nlockmgr 100021 4 tcp 57205 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100005 1 udp 44137 mountd 100005 1 tcp 46627 mountd 100005 2 udp 44137 mountd 100005 2 tcp 46627 mountd 100005 3 udp 44137 mountd 100005 3 tcp 46627 mountd Module Size Used by xts 2612 4=20 gf128mul 7020 1 xts nfsd 208736 9=20 lockd 56984 1 nfsd nfs_acl 2384 1 nfsd auth_rpcgss 31180 1 nfsd sunrpc 150648 10 nfsd,lockd,nfs_acl,auth_rpcgss uhci_hcd 17252 0=20 tun 11040 0=20 sg 22332 0=20 usb_storage 45104 1=20 e1000 101476 0=20 forcedeth 46244 0=20 pata_amd 9100 0=20 ata_generic 4184 0=20 sd_mod 21592 12=20 ehci_hcd 26968 0=20 usbcore 104356 4 uhci_hcd,usb_storage,ehci_hcd xfs 417604 12=20 exportfs 3408 2 nfsd,xfs linear 4608 0=20 /bigdaddy *.local(rw,async,insecure,no_subtree_check,no_root_squa= sh) /crypt/scan *.local(rw,async,insecure,no_subtree_check,no_root_squa= sh) /crypt/backup *.local(rw,async,insecure,no_subtree_check,no_root_squa= sh) /crypt/pictures *.local(rw,async,insecure,no_subtree_check,no_root_squa= sh) /crypt/private/music mws*.local(rw,async,insecure,no_subtree_check,no_ro= ot_squash) /crypt/private mws*.local(rw,async,insecure,no_subtree_check,no_ro= ot_squash) /bigdaddy/Music *.local(ro,async,insecure,no_subtree_check,no_root_squa= sh) /torrents *.local(rw,async,insecure,no_subtree_check,no_root_squa= sh) /srv/diskless/mws *.local(rw,async,insecure,no_subtree_check,n= o_root_squash) /srv/diskless/mfs *.local(rw,async,insecure,no_subtree_check,n= o_root_squash) /srv/diskless/generic *.local(rw,async,insecure,no_subtree_check,n= o_root_squash) /srv/diskless/tftp/kernels/src *.local(rw,async,insecure,no_su= btree_check,no_root_squash) DISKLESS CLIENT michael@mws:~% cat /etc/fstab=20 cpq:/diskless/mws / nfs pro= to=3Dudp 0 0 none /proc proc def= aults 0 0 tmpfs /tmp tmpfs rw,= size=3D1G 0 0 mfs:/srv/diskless/tftp/kernels/src /usr/src nfs noa= uto,defaults 0 0 mfs:/srv/michael/.private/latex /latex nfs pro= to=3Dudp 0 0 mfs:/crypt/private/music /nfs/music nfs pro= to=3Dudp 0 0 mfs:/crypt/private /nfs/private nfs pro= to=3Dudp 0 0 mfs:/bigdaddy /nfs/bigdaddy nfs rw,= user,exec,proto=3Dudp 0 0 mfs:/torrents /nfs/torrents nfs rw,= user,exec,proto=3Dudp 0 0 mfs:/crypt/pictures /nfs/pictures nfs rw,= user,exec,proto=3Dudp 0 0 mfs:/crypt/scan /nfs/scan nfs rw,= user,exec,rsize=3D4096,wsize=3D4096 0 0 mfs:/crypt/backup /nfs/backup nfs rw,= user,exec,proto=3Dudp 0 0 /usr/src/diskless_mws /usr/src/linux bind noa= uto,defaults,bind 0 0 /dev/ipod /ipod vfat def= aults,user,noauto,umask=3D000 0 0 michael@mws:~% uname -r 2.6.22.1mws_diskless SERVER DMESG (i also have a lot of radix_tree hangs but i dont have a=20 trace for them except the [1] picture, they didn't get logged, but they seem more common - they crash the kernel completely): ***: this is not the newest dump, but it is one of the dumps that I have of it: normally there is also a svc: failed to register lockdv1 RPC service (errno= 97). in dmesg and a lot of=20 [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd [xxxxx.yyyyy] reconnect_path: npd !=3D pd (easily 100 of those in dmesg on the server when the client uses lots of fi= les or bandwidth) the kernel oops always comes after these messages, not before and is always= a=20 reclaim inode bug or xfs radix tree bug (i think the bug happens when the c= lient tries to -delete- files). an aMule client or rtorrent on the client will trigger the oops easily - or= just deleting a large folder=20 or mv'ing one on the client. [ 117.895574] BUG: unable to handle kernel NULL pointer dereference at 000= 00004 [ 117.895749] IP: [] inode_has_perm+0x1e/0x62 [ 117.895883] *pde =3D 00000000 [ 117.896011] Oops: 0000 [#4] SMP [ 117.896167] last sysfs file: /sys/kernel/uevent_seqnum [ 117.896269] Modules linked in: uhci_hcd usb_storage sg sr_mod ehci_hcd c= drom forcedeth ohci_hcd usbcore raid10 raid0 pata_amd ata_generic aic7xxx s= csi_transport_spi sd_mod [ 117.897007] [ 117.897097] Pid: 3799, comm: nfsd Tainted: G D (2.6.30 #14) Syst= em Product Name [ 117.897254] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 117.897351] EIP is at inode_has_perm+0x1e/0x62 [ 117.897445] EAX: 00000000 EBX: 00000000 ECX: 00000002 EDX: f2ba0424 [ 117.897543] ESI: f1b90380 EDI: f194ce80 EBP: f194ce80 ESP: f5719e2c [ 117.897640] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 [ 117.897737] Process nfsd (pid: 3799, ti=3Df5718000 task=3Df687e080 task.= ti=3Df5718000) [ 117.897891] Stack: [ 117.897980] 00000002 f1aec0c0 f5bd6000 46000000 f5690000 f5690010 c10ca= 3a8 00000020 [ 117.898284] 00000018 f1be5a80 f269a36c f5690010 c106d73d f269a300 f194c= eec 00000002 [ 117.898708] f1b90380 f2ba0424 f194ce80 c1140568 00000000 f1b90380 f2b7b= 660 f2ba0424 [ 117.899191] Call Trace: [ 117.899191] [] ? nfsd_setuser_and_check_port+0x53/0x58 [ 117.899191] [] ? kmemdup+0x16/0x30 [ 117.899191] [] ? selinux_dentry_open+0xd6/0xdc [ 117.899191] [] ? security_dentry_open+0xc/0xd [ 117.899191] [] ? __dentry_open+0xfb/0x208 [ 117.899191] [] ? dentry_open+0x61/0x68 [ 117.899191] [] ? nfsd_open+0x16b/0x1a0 [ 117.899191] [] ? nfsd_read+0x64/0x9f [ 117.899191] [] ? nfsd_proc_read+0x109/0x13d [ 117.899191] [] ? cache_check+0x52/0x414 [ 117.899191] [] ? groups_alloc+0x2a/0x94 [ 117.899191] [] ? nfssvc_decode_readargs+0x8a/0xde [ 117.899191] [] ? nfsd_dispatch+0xca/0x196 [ 117.899191] [] ? svc_process+0x379/0x656 [ 117.899191] [] ? nfsd+0xde/0x11a [ 117.899191] [] ? nfsd+0x0/0x11a [ 117.899191] [] ? kthread+0x42/0x67 [ 117.899191] [] ? kthread+0x0/0x67 [ 117.899191] [] ? kernel_thread_helper+0x7/0x10 [ 117.899191] Code: a0 ef ff ff 5b 5e eb 02 31 c0 5b 5e c3 55 57 56 53 83 = ec 3c 89 c7 89 0c 24 8b 5c 24 50 31 c0 f6 82 4d 01 00 00 02 75 3f 8b 47 58 = <8b> 68 04 8b b2 54 01 00 00 85 db 75 1a b9 0e 00 00 00 8d 7c 24 [ 117.899191] EIP: [] inode_has_perm+0x1e/0x62 SS:ESP 0068:f5719= e2c [ 117.899191] CR2: 0000000000000004 [ 117.904295] ---[ end trace df59a076396b4ee6 ]--- [ 251.771477] BUG: unable to handle kernel NULL pointer dereference at 000= 00004 [ 251.771640] IP: [] inode_has_perm+0x1e/0x62 [ 251.771771] *pde =3D 00000000 [ 251.771892] Oops: 0000 [#5] SMP [ 251.772041] last sysfs file: /sys/kernel/uevent_seqnum [ 251.772137] Modules linked in: uhci_hcd usb_storage sg sr_mod ehci_hcd c= drom forcedeth ohci_hcd usbcore raid10 raid0 pata_amd ata_generic aic7xxx s= csi_transport_spi sd_mod [ 251.772876] [ 251.772974] Pid: 3798, comm: nfsd Tainted: G D (2.6.30 #14) Syst= em Product Name [ 251.772974] EIP: 0060:[] EFLAGS: 00010246 CPU: 0 [ 251.772974] EIP is at inode_has_perm+0x1e/0x62 [ 251.772974] EAX: 00000000 EBX: 00000000 ECX: 00000002 EDX: f45bf324 [ 251.772974] ESI: f53f2700 EDI: f3d5e400 EBP: f3d5e400 ESP: f569be2c [ 251.772974] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 [ 251.772974] Process nfsd (pid: 3798, ti=3Df569a000 task=3Df71ab4d0 task.= ti=3Df569a000) [ 251.772974] Stack: [ 251.772974] 00000002 f27d2e40 f5bd5000 46000000 f5587a00 f5587a10 c10ca= 3a8 00000020 [ 251.772974] 00000018 f1bdddc0 f53f2eec f5587a10 c106d73d f53f2e80 f3d5e= 46c 00000002 [ 251.772974] f53f2700 f45bf324 f3d5e400 c1140568 00000000 f53f2700 f45d8= 110 f45bf324 [ 251.772974] Call Trace: [ 251.772974] [] ? nfsd_setuser_and_check_port+0x53/0x58 [ 251.772974] [] ? kmemdup+0x16/0x30 [ 251.772974] [] ? selinux_dentry_open+0xd6/0xdc [ 251.772974] [] ? security_dentry_open+0xc/0xd [ 251.772974] [] ? __dentry_open+0xfb/0x208 [ 251.772974] [] ? dentry_open+0x61/0x68 [ 251.772974] [] ? nfsd_open+0x16b/0x1a0 [ 251.772974] [] ? nfsd_read+0x64/0x9f [ 251.772974] [] ? nfsd_proc_read+0x109/0x13d [ 251.772974] [] ? cache_check+0x52/0x414 [ 251.772974] [] ? groups_alloc+0x2a/0x94 [ 251.772974] [] ? nfssvc_decode_readargs+0x8a/0xde [ 251.772974] [] ? nfsd_dispatch+0xca/0x196 [ 251.772974] [] ? svc_process+0x379/0x656 [ 251.772974] [] ? nfsd+0xde/0x11a [ 251.772974] [] ? nfsd+0x0/0x11a [ 251.772974] [] ? kthread+0x42/0x67 [ 251.772974] [] ? kthread+0x0/0x67 [ 251.772974] [] ? kernel_thread_helper+0x7/0x10 [ 251.772974] Code: a0 ef ff ff 5b 5e eb 02 31 c0 5b 5e c3 55 57 56 53 83 = ec 3c 89 c7 89 0c 24 8b 5c 24 50 31 c0 f6 82 4d 01 00 00 02 75 3f 8b 47 58 = <8b> 68 04 8b b2 54 01 00 00 85 db 75 1a b9 0e 00 00 00 8d 7c 24 [ 251.772974] EIP: [] inode_has_perm+0x1e/0x62 SS:ESP 0068:f569b= e2c [ 251.772974] CR2: 0000000000000004 [ 251.780353] ---[ end trace df59a076396b4ee7 ]--- --2oS5YaxWCcQjTEyO Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBAgAGBQJKXUZbAAoJECXlragqp/ZIQ5kP/jfB9meM6sHhjjTUQJO79mda gtRMZBzwhUt6fDLdbzQkhia0thFp+1WRQJfZarv9gazea3OKAzuB6+67gpBviuJj 2wgxUSBWLSI9L0YYlb5BR9pPsiviiG0/7+/b196PDKi2vLr18LYuOkq8QUWGM8Cy HLrND7z1i8ebUp6zyJYu+nUyYy2gPt6HUr7JHDhxkQUmyaTrwm4+elwa/+vx5Rd+ 6s7TZd/9MaNaB3SjkoQj4CGhZdRMYpN7jxPxA3SxR8HdNIgEfzC43s4tioLFUr7g om7LL+nYvEAAMjw1yM8vMmG6Obc/Fsrx00Sm1BZwmWzuAz5paOft9jlwKgB7Whs/ +50Pn5yKLiqHByEga7tomIuhh+hAX/g5kjV5MaL0U/C28L28sk6+9kEp5XEeL6ju uGx0oecD49mC5CCtS+G0TPfYJHdG8qK11QyE5Tx9Pv7qn0WuhfJqAwxE/0L4RQUr kHaurxtwzvyuSbumbsq/7smBTI9LkyacT2xsp/P98xb4E+He+CVoELJUFLG6R9Ks rRxSj8X2uLT2cJ/ypaWyZXJ1c4/2oC/tH80l7vy7e/llg6HUE+QCibftbkYYYUnN EShGHAjyFZF+ihLGNid67xFxwRDCn45/fMNzjp9vWa3Yz+6OMha1qNxcu0ipT452 iAwcmEMeArZhPERQCVTs =/wH9 -----END PGP SIGNATURE----- --2oS5YaxWCcQjTEyO-- From BATV+555f0f396dc1f0cb08db+2152+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 14 22:45:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33, J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6F3jdeX166395 for ; Tue, 14 Jul 2009 22:45:40 -0500 X-ASG-Debug-ID: 1247629579-047e01110000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3C84F363EE4 for ; Tue, 14 Jul 2009 20:46:19 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9XSyazAikmIhXVhK for ; Tue, 14 Jul 2009 20:46:19 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MQvRi-0006Zw-LI; Wed, 15 Jul 2009 03:46:18 +0000 Date: Tue, 14 Jul 2009 23:46:18 -0400 From: Christoph Hellwig To: Michael Ole Olsen Cc: xfs X-ASG-Orig-Subj: Re: xfs+nfs crash in 2.6.30 and 2.6.30.1 Subject: Re: xfs+nfs crash in 2.6.30 and 2.6.30.1 Message-ID: <20090715034618.GA21478@infradead.org> References: <20090715030046.GA28592@rlogin.dk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090715030046.GA28592@rlogin.dk> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247629579 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jul 15, 2009 at 05:00:47AM +0200, Michael Ole Olsen wrote: > Everything was stable on server+client until the server got 2.6.30 kernel, > the mdadm raid6 only works in 2.6.30 or above - mdadm fails to initialize it in > anything else, so cannot downgrade (custom reshape to raid6 using echo into /sys, > all Q blocks on one disk). > > I have experimented with mount options on the client, and the client has > been stable with these mount options before, when the server had a kernel > below 2.6.30 Yes, we had a few reports of this already, but not been able to track it down. Your instrcution below will be very helpful to reproduce and test it, I will looks at it on thursday when I get back home to my test systems. > I saw someone talking about kernel stack size would be the cause for this xfs+nfs problem, > is there anything to this? Unlikely, it looks like problem in the XFS inode cache code introduced in 2.6.29. From sandeen@sandeen.net Tue Jul 14 23:00:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6F40LTv167141 for ; Tue, 14 Jul 2009 23:00:21 -0500 X-ASG-Debug-ID: 1247630460-576301a80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CCF0A137E991 for ; Tue, 14 Jul 2009 21:01:00 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id sbuLEPgEw8BAOk9R for ; Tue, 14 Jul 2009 21:01:00 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 3DF5410F0CC9; Tue, 14 Jul 2009 23:00:59 -0500 (CDT) Message-ID: <4A5D547A.9040005@sandeen.net> Date: Tue, 14 Jul 2009 23:00:58 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Ole Olsen CC: xfs X-ASG-Orig-Subj: Re: xfs+nfs crash in 2.6.30 and 2.6.30.1 Subject: Re: xfs+nfs crash in 2.6.30 and 2.6.30.1 References: <20090715030046.GA28592@rlogin.dk> In-Reply-To: <20090715030046.GA28592@rlogin.dk> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247630460 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0029 1.0000 -2.0019 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.00 X-Barracuda-Spam-Status: No, SCORE=-2.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3439 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Ole Olsen wrote: > radix_tree_tag_set/xfs_inode_set_reclaim_tag crash > > I keep getting kernel crashes with xfs+lvm2+mdadm (raid6) - correct in sync, > all xfs partitions checked for corruption (but there were none, but the crashes persists). > > The raid6 has just resynced now because of this kernel hang. > > 2.6.30 and 2.6.30.1 kernels on my nfsv3 server keep crashing, both with/without SMP, dynticks, > selinux (although selinux for some reason seems to make it crash very often) Thanks, I've pasted this info into the bug report; It's unlikely that it's a stack issue I think - the hint about selinux making it worse may be useful. -Eric From wentalv@cisco.com Wed Jul 15 03:01:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=BAYES_05,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6F81TnS180960 for ; Wed, 15 Jul 2009 03:01:30 -0500 X-ASG-Debug-ID: 1247645381-2e9b03190000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sj-iport-4.cisco.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8D470A637F0 for ; Wed, 15 Jul 2009 01:09:41 -0700 (PDT) Received: from sj-iport-4.cisco.com (sj-iport-4.cisco.com [171.68.10.86]) by cuda.sgi.com with ESMTP id nHbi54COpRrjn6JH for ; Wed, 15 Jul 2009 01:09:41 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqIEAJspXUpAZnmf/2dsb2JhbACCKCyMG6kKiCOQcwWECQ X-IronPort-AV: E=Sophos;i="4.42,403,1243814400"; d="scan'208,217";a="39455648" Received: from rtp-dkim-2.cisco.com ([64.102.121.159]) by sj-iport-4.cisco.com with ESMTP; 15 Jul 2009 08:02:05 +0000 Received: from rtp-core-2.cisco.com (rtp-core-2.cisco.com [64.102.124.13]) by rtp-dkim-2.cisco.com (8.12.11/8.12.11) with ESMTP id n6F825Dq019117; Wed, 15 Jul 2009 04:02:05 -0400 Received: from xbh-rtp-211.amer.cisco.com (xbh-rtp-211.cisco.com [64.102.31.102]) by rtp-core-2.cisco.com (8.13.8/8.14.3) with ESMTP id n6F825Px022975; Wed, 15 Jul 2009 08:02:05 GMT Received: from xmb-rtp-20b.amer.cisco.com ([64.102.31.53]) by xbh-rtp-211.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.3959); Wed, 15 Jul 2009 04:02:05 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01CA0522.8ACA320C" X-ASG-Orig-Subj: RE: How to simulate journal corruption Subject: RE: How to simulate journal corruption Date: Wed, 15 Jul 2009 04:02:01 -0400 Message-ID: <249A89BAA060C94FA0B93EA6135CC93C084463AD@xmb-rtp-20b.amer.cisco.com> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: How to simulate journal corruption Thread-Index: AcoFIQcZFWTNPNkpQEm7RHl+R+PdMwAARsJQ References: <4A5B4833.9070300@sandeen.net> From: "Wentao Lv (wentalv)" To: Cc: X-OriginalArrivalTime: 15 Jul 2009 08:02:05.0233 (UTC) FILETIME=[8AFCCA10:01CA0522] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; l=11816; t=1247644925; x=1248508925; c=relaxed/simple; s=rtpdkim2001; h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version; d=cisco.com; i=wentalv@cisco.com; z=From:=20=22Wentao=20Lv=20(wentalv)=22=20 |Subject:=20RE=3A=20How=20to=20simulate=20journal=20corrupt ion |Sender:=20 |To:=20; bh=lmIlxLaZmvhgYa53LiwTQpsxkz22wyCb5qbzhzGmDe8=; b=an2MlaZYeZ2MTEM95HP9CvcKLY097vbB0eb18mAZ5xhvHpOi81W4XkpOCC CPgWNhXT8I/7oICET65PKGijgA0Nnitf60PXk33SiaMHtkX1WAgnJep52TJS 9yTD4vt072; Authentication-Results: rtp-dkim-2; header.From=wentalv@cisco.com; dkim=pass ( sig from cisco.com/rtpdkim2001 verified; ); X-Barracuda-Connect: sj-iport-4.cisco.com[171.68.10.86] X-Barracuda-Start-Time: 1247645382 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------_=_NextPart_001_01CA0522.8ACA320C Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Eric =20 Could you tell me where I could find XFS-QA test cases?=20 =20 Thanks & Regards. Lv Wentao. =20 From: crow al [mailto:al-john@hotmail.com]=20 Sent: Wednesday, July 15, 2009 3:51 PM To: Wentao Lv (wentalv) Subject: FW: How to simulate journal corruption =20 > Date: Mon, 13 Jul 2009 09:44:03 -0500 > From: sandeen@sandeen.net > To: al-john@hotmail.com > CC: xfs@oss.sgi.com > Subject: Re: How to simulate journal corruption >=20 > crow al wrote: > > Hi, there > >=20 > > I'm a QA engineer from Cisco. I'm working on a test case concerning XFS > > journal playback failure, which needs to manually inject error to XFS. > >=20 > > I did some google work but get no luck. Then I think maybe XFA-QA could > > give me some advice. That why I come to here. > >=20 > > Is there anyone could tell me how to inject error into XFS or is there > > any tool could be used? > >=20 > > Wish for your response. > >=20 > > Thanks & Regards. > > Lv Wentao. >=20 > test 044 in xfstests runs something called "loggen" which will generate > log traffic to be replayed on mount, if I'm reading it right. Of course > that's an uncorrupted log ... >=20 > There is another tool called "fsfuzzer" which writes random junk over a > filesystem. You could probably combine the two tools to create valid > logs to replay, and then write varying degrees of junk on top with > fsfuzzer, and try to replay the result. >=20 > You could probably even use fsfuzzer "stock" and just restrict the > fuzzing to the log portion of the filesystem. >=20 > I'm not sure what kinds of errors you are trying to catch - oopses, > hangs, improperly replaying a corrupted log, etc - but it sounds well > worth doing. FWIW when I used fsfuzzer, it often ran into problems in > the log, so I imagine you'll uncover some interesting things; if you do, > please share. :) >=20 > -Eric ________________________________ What can you do with the new Windows Live? Find out =20 ------_=_NextPart_001_01CA0522.8ACA320C Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi, Eric

 

Could you tell me where I could find XFS-QA test cases? =

 

Thanks & Regards.

Lv Wentao.

 

From:= crow al [mailto:al-john@hotmail.com]
Sent: Wednesday, July 15, 2009 3:51 PM
To: Wentao Lv (wentalv)
Subject: FW: How to simulate journal = corruption

 



> Date: Mon, 13 Jul 2009 09:44:03 -0500
> From: sandeen@sandeen.net
> To: al-john@hotmail.com
> CC: xfs@oss.sgi.com
> Subject: Re: How to simulate journal corruption
>
> crow al wrote:
> > Hi, there
> >
> > I'm a QA engineer from Cisco. I'm working on a test case = concerning XFS
> > journal playback failure, which needs to manually inject error = to XFS.
> >
> > I did some google work but get no luck. Then I think maybe = XFA-QA could
> > give me some advice. That why I come to here.
> >
> > Is there anyone could tell me how to inject error into XFS or = is there
> > any tool could be used?
> >
> > Wish for your response.
> >
> > Thanks & Regards.
> > Lv Wentao.
>
> test 044 in xfstests runs something called "loggen" which = will generate
> log traffic to be replayed on mount, if I'm reading it right. Of = course
> that's an uncorrupted log ...
>
> There is another tool called "fsfuzzer" which writes = random junk over a
> filesystem. You could probably combine the two tools to create = valid
> logs to replay, and then write varying degrees of junk on top = with
> fsfuzzer, and try to replay the result.
>
> You could probably even use fsfuzzer "stock" and just = restrict the
> fuzzing to the log portion of the filesystem.
>
> I'm not sure what kinds of errors you are trying to catch - = oopses,
> hangs, improperly replaying a corrupted log, etc - but it sounds = well
> worth doing. FWIW when I used fsfuzzer, it often ran into problems = in
> the log, so I imagine you'll uncover some interesting things; if = you do,
> please share. :)
>
> -Eric


What can you do with the new Windows Live? Find out

------_=_NextPart_001_01CA0522.8ACA320C-- From olaf@sgi.com Wed Jul 15 07:22:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FCMYg3195039 for ; Wed, 15 Jul 2009 07:22:35 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6FCNCbS355880; Wed, 15 Jul 2009 14:23:12 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6FCN91r355855; Wed, 15 Jul 2009 14:23:09 +0200 (MEST) To: Roman Kononov Cc: linux-xfs@oss.sgi.com Subject: Re: failed assertion related to realtime section References: From: Olaf Weber Date: Wed, 15 Jul 2009 14:23:06 +0200 In-Reply-To: (Roman Kononov's message of "Mon, 13 Jul 2009 17:42:43 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Roman Kononov writes: > Hi, > In 2.6.30.x Linux kernel, the XFS_RT configuration option does not say > "This feature is unsupported at this time..." any more. Nevertheless, > when enabled, the feature crashes the file system in my setup. Is it > expected to be functional? I don't think a kernel oops is the expected result. > The attached assertion log happens every time with a clean and empty > file system. Can you provide: - the options used to create the filesystem - the mount options of the filesystem - (a summary of) the commands run -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From BATV+555f0f396dc1f0cb08db+2152+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 15 08:06:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FD6QnH197707 for ; Wed, 15 Jul 2009 08:06:27 -0500 X-ASG-Debug-ID: 1247663225-4612008a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E8F0D364EC0 for ; Wed, 15 Jul 2009 06:07:05 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0RgqDr6kvqbmDaCC for ; Wed, 15 Jul 2009 06:07:05 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MR4CP-0007yo-5w; Wed, 15 Jul 2009 13:07:05 +0000 Date: Wed, 15 Jul 2009 09:07:05 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Subject: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Message-ID: <20090715130705.GA27973@infradead.org> References: <4A582070.9040907@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A582070.9040907@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247663225 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Adding this check is certainly better than having nothing, but I would be much happier if we could do something. On Sat, Jul 11, 2009 at 12:17:36AM -0500, Eric Sandeen wrote: > 1) How'd it get into this state? ... but maybe more importantly... End of last year lachlan had case that looked a bit like this where we had problems resetting the fork state. > 2) Should these really get cleared? It's possibly a sane extent list, > it's just that it -could- be in extents rather than btree format... That is indeed the the most likely case. Do you still have a metadump with this problem around? We should probably sanity-check for a valid looking extent format inode and then process it as such. > 3) By the same token, should the kernel really be choking on it? Well, not choking could cause all kinds of harm by treating it as a btree inode while it's not. We could try to apply a very careful variant of 2) above, but I'd really rather leave that kind of thing to repair. > + if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { > + do_warn(_("extent count for ino %lld %s fork too low " > + "(%d) for file format\n"), > + lino, > + whichfork == XFS_DATA_FORK ? _("data") : _("attr"), > + *nex); > + return(1); > + } Well, you'll get my ok in the sense of this looks good and better than nothing, but I'd really prefer a real fixup for this issues. Also the code above looks a bit unreadable, why not: if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { do_warn( _("extent count for ino %lld %s fork too low (%d) for file format\n"), lino, forkname, *nex); return 1; } From sandeen@sandeen.net Wed Jul 15 08:55:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FDtl4O200688 for ; Wed, 15 Jul 2009 08:55:48 -0500 X-ASG-Debug-ID: 1247666641-793303c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B68BD12A0862 for ; Wed, 15 Jul 2009 07:04:02 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id yRSGIDgPQjGbIKHE for ; Wed, 15 Jul 2009 07:04:02 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 3AF6AA9DAA6; Wed, 15 Jul 2009 08:56:25 -0500 (CDT) Message-ID: <4A5DE008.5040103@sandeen.net> Date: Wed, 15 Jul 2009 08:56:24 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Subject: Re: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format References: <4A582070.9040907@sandeen.net> <20090715130705.GA27973@infradead.org> In-Reply-To: <20090715130705.GA27973@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247666642 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3476 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Adding this check is certainly better than having nothing, but I would > be much happier if we could do something. > > On Sat, Jul 11, 2009 at 12:17:36AM -0500, Eric Sandeen wrote: >> 1) How'd it get into this state? ... but maybe more importantly... > > End of last year lachlan had case that looked a bit like this where > we had problems resetting the fork state. > >> 2) Should these really get cleared? It's possibly a sane extent list, >> it's just that it -could- be in extents rather than btree format... > > That is indeed the the most likely case. Do you still have a metadump > with this problem around? We should probably sanity-check for a valid > looking extent format inode and then process it as such. yep I do... and the user was able to perfectly copy off the files by disabling the kernel check, FWIW. So in this case it really was OK. >> 3) By the same token, should the kernel really be choking on it? > > Well, not choking could cause all kinds of harm by treating it as > a btree inode while it's not. We could try to apply a very careful > variant of 2) above, but I'd really rather leave that kind of thing > to repair. Yep, probably best. >> + if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { >> + do_warn(_("extent count for ino %lld %s fork too low " >> + "(%d) for file format\n"), >> + lino, >> + whichfork == XFS_DATA_FORK ? _("data") : _("attr"), >> + *nex); >> + return(1); >> + } > > Well, you'll get my ok in the sense of this looks good and better than > nothing, but I'd really prefer a real fixup for this issues. Also the > code above looks a bit unreadable, why not: I guess I tend to prefer a real fixup too, if possible; I suppose there's existing infrastructure to check it as a btree inode, and hopefully to move it into extents as well. FWIW I just copied the check above from xfs_check ;) Sure, below formatting is better. thanks, -Eric > if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / > sizeof(xfs_bmbt_rec_t)) { > do_warn( > _("extent count for ino %lld %s fork too low (%d) for file format\n"), > lino, forkname, *nex); > return 1; > } > From sandeen@sandeen.net Wed Jul 15 08:57:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FDvdwn200809 for ; Wed, 15 Jul 2009 08:57:39 -0500 X-ASG-Debug-ID: 1247666752-78c803e20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E7DDD149D30A for ; Wed, 15 Jul 2009 07:05:52 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id IamCTmjC8JoxDIZF for ; Wed, 15 Jul 2009 07:05:52 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id CF9B1A9DAA6; Wed, 15 Jul 2009 08:58:16 -0500 (CDT) Message-ID: <4A5DE078.3040005@sandeen.net> Date: Wed, 15 Jul 2009 08:58:16 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: "Wentao Lv (wentalv)" CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: How to simulate journal corruption Subject: Re: How to simulate journal corruption References: <4A5B4833.9070300@sandeen.net> <249A89BAA060C94FA0B93EA6135CC93C084463AD@xmb-rtp-20b.amer.cisco.com> In-Reply-To: <249A89BAA060C94FA0B93EA6135CC93C084463AD@xmb-rtp-20b.amer.cisco.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247666753 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0208 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3478 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Wentao Lv (wentalv) wrote: > Hi, Eric > > > > Could you tell me where I could find XFS-QA test cases? > http://git.kernel.org/?p=fs/xfs/xfstests-dev.git;a=summary is devel stuff, often a bit ahead of the "official" repo which is at: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfstests.git;a=summary -Eric > > Thanks & Regards. > > Lv Wentao. From SEMA-CR-1-5HKBQU@ptcmarketing.com Wed Jul 15 14:31:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.5 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FJV0hc215616 for ; Wed, 15 Jul 2009 14:31:03 -0500 X-ASG-Debug-ID: 1247686296-13d2008c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay2.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7E54B3664B2 for ; Wed, 15 Jul 2009 12:31:36 -0700 (PDT) Received: from relay2.ptc.com (relay2.ptc.com [12.11.148.122]) by cuda.sgi.com with ESMTP id HYjKKM56DcIEMyCJ for ; Wed, 15 Jul 2009 12:31:36 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.42,406,1243828800"; d="scan'208,217";a="306524028" Received: from hqcrmprdint18.ptcnet.ptc.com ([132.253.201.206]) by crmmaxx.ptc.com with ESMTP; 15 Jul 2009 15:23:44 -0400 To: MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Info" X-ASG-Orig-Subj: Interactive Surface Design Extension - Now Available at the PTC Web Store Subject: Interactive Surface Design Extension - Now Available at the PTC Web Store Sender: "PTC Info" Message-ID: Content-Type: multipart/alternative; boundary=BF_1247684619102_1045116129 X-Barracuda-Connect: relay2.ptc.com[12.11.148.122] X-Barracuda-Start-Time: 1247686297 Date: Wed, 15 Jul 2009 12:31:36 -0700 (PDT) X-Barracuda-Bayes: INNOCENT GLOBAL 0.0668 1.0000 -1.5948 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.77 X-Barracuda-Spam-Status: No, SCORE=-0.77 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, MIME_QP_LONG_LINE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3496 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.82 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1247684619102_1045116129 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Now Available at the PTC Web Store =E2=80=93 Pro/ENGINEER Interactive Surfac= e Design Extension (ISDX) (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-5A99XN= &o=3D= 1-5A9A1Z= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fgo%2Fisdxstore) Interactive Surface Design Extension - Form and function brought together With the free-form surfacing capabilities of Pro/ENGINEER Interactive Surfac= e Design Extension, designers and engineers can quickly and easily create hi= ghly precise and distinctly aesthetic product designs. The result: Design according to your requirements, not to your software=E2= =80=99s limitations. Benefits - Create products that look better, sell better, and get to market faster - Combined free-form and technical surfacing in one environment means no d= ata transfer between design and engineering - Design precise curves and surfaces to achieve highly-engineered, manufac= turable products - Confidently explore design variants by making fully associative changes = at any time - Intuitive user interface provides direct surface editing capabilities, r= eal-time feedback and allows rapid and extreme product design Now, you can view more information and easily and instantly purchase Pro/ENG= INEER Interactive Surface Design Extension from the PTC Web Store. To visit the PTC Web Store, go to: http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-5A99XN= &o=3D= 1-5A9A1Z= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fgo%2Fisdxstore =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-5A9A1Z= &campd=3D= 1-5A99XN= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change email preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-5A9A1Z= &campd=3D= 1-5A99XN= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= . --BF_1247684619102_1045116129 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable System Notice Email ISDX Module TBYB Hard Sell Offer NA Q409
3D"PTC.com"

Interactive Surface Design Extension - Form a= nd function brought together

With the free-form surfacing capabilities of Pro/ENGI= NEER Interactive Surface Design Extension, designers and engineers can quick= ly and easily create highly precise and distinctly aesthetic product designs= .

The result: Design according to your requirem= ents, not to your software’s limitations.

Benefits  

  • Create products that look better, sell better, and = get to market faster

  • Combined free-form and technical surfacing in one e= nvironment means no data transfer between design and engineering

  • Design precise curves and surfaces to achieve highl= y-engineered, manufacturable products

  • Confidently explore design variants by making fully= associative changes at any time

  • Intuitive user interface provides direct surface ed= iting capabilities, real-time feedback and allows rapid and extreme product = design

Now, you can view more information and easily and instantly purch= ase Pro/ENGINEER Interactive Surface Design Extension from the PTC Web Store= .

To visit the PTC Web Store, go to: www.ptc.com/go/i= sdxstore

3D""=20
contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1247684619102_1045116129-- From sandeen@sandeen.net Wed Jul 15 14:32:46 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FJWkOv215694 for ; Wed, 15 Jul 2009 14:32:46 -0500 X-ASG-Debug-ID: 1247686404-78f601880000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 843C7138C395 for ; Wed, 15 Jul 2009 12:33:24 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id fPKGxyIhD6jm5uIL for ; Wed, 15 Jul 2009 12:33:24 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6FJXOpA022740 for ; Wed, 15 Jul 2009 15:33:24 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6FJXNaq010293 for ; Wed, 15 Jul 2009 15:33:23 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6FJXL3X016880 for ; Wed, 15 Jul 2009 15:33:22 -0400 Message-ID: <4A5E2F01.7030107@sandeen.net> Date: Wed, 15 Jul 2009 14:33:21 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] reduce bmv_count in xfs_vn_fiemap Subject: [PATCH] reduce bmv_count in xfs_vn_fiemap Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247686405 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0205 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3496 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused the full bmv_count's worth of getbmapx structures to get allocated; telling it to do MAXEXTNUM was a bit insane, resulting in ENOMEM. Chop it down to something reasonable, the caller can loop over this if the file has > 64 extents. (this is a regression, FWIW) Signed-off-by: Eric Sandeen --- iff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb..370e9a7 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -680,8 +680,12 @@ xfs_vn_fiemap( else bm.bmv_length = BTOBB(length); - /* our formatter will tell xfs_getbmap when to stop. */ - bm.bmv_count = MAXEXTNUM; + /* + * xfs_getbmap allocates based on that; pick a count that's + * not too outragous. + * Our formatter will tell xfs_getbmap when to stop. + */ + bm.bmv_count = 64; bm.bmv_iflags = BMV_IF_PREALLOC; if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) bm.bmv_iflags |= BMV_IF_ATTRFORK; From sandeen@redhat.com Wed Jul 15 15:20:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_16, J_CHICKENPOX_47,J_CHICKENPOX_54 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FKKZev219309 for ; Wed, 15 Jul 2009 15:20:35 -0500 X-ASG-Debug-ID: 1247689274-13db01fb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D7A53366B1D for ; Wed, 15 Jul 2009 13:21:14 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 9igpmBvv3qtkmwtv for ; Wed, 15 Jul 2009 13:21:14 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6FKLDfj002647; Wed, 15 Jul 2009 16:21:13 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6FKLDdY024789; Wed, 15 Jul 2009 16:21:13 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6FKLBfS026086; Wed, 15 Jul 2009 16:21:12 -0400 Message-ID: <4A5E3A37.5050306@redhat.com> Date: Wed, 15 Jul 2009 15:21:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list , ext4 development X-ASG-Orig-Subj: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Subject: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247689274 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3499 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Test a few very basic defragmentation scenarios. This test creates some files, runs defrag on them, and compares the before/after fragmentation as well as file md5sums and timestamps. (md5sums may just be reading buffered data though, suggestions?) The test currently expects to find e4defrag in /usr/bin It should be relatively easy to add more interestingly fragmented files to the tests, as well as to test that memory-mapped files aren't touched, etc - but this gives us a framework. Signed-off-by: Eric Sandeen --- --- a/group +++ b/group @@ -326,3 +326,4 @@ prealloc 215 auto metadata quick 216 log metadata auto quick 217 log metadata auto +218 auto fsr quick --- /dev/null 2009-07-15 14:17:48.882013317 -0500 +++ a/218 2009-07-15 15:18:06.546093921 -0500 @@ -0,0 +1,131 @@ +#! /bin/sh +# FS QA Test No. 218 +# +# Basic defragmentation sanity tests +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Eric Sandeen. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=sandeen@sandeen.net + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* + _cleanup_testdir +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs ext4 +_supported_os Linux + +_setup_testdir +# We require scratch so that we'll have free contiguous space +_require_scratch +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount + +fragfile=$SCRATCH_MNT/fragfile.$$ + +if [ "$FSTYP" == "xfs" ]; then + DEFRAG=/usr/sbin/xfs_fsr +else + DEFRAG=/usr/bin/e4defrag +fi + +_require_command $DEFRAG +_require_command /usr/sbin/filefrag + +_extent_count() +{ + filefrag $1 | awk '{print $2}' +} + +# Defrag file, check it, and remove it. +_defrag() +{ + echo -n "Before: " + _extent_count $1 + CSUM_BEFORE=`md5sum $1` + STAT_BEFORE=`stat -c "a: %x m: %y c: %z" $1` + $DEFRAG -v $1 >> $seq.full 2>&1 + STAT_AFTER=`stat -c "a: %x m: %y c: %z" $1` + CSUM_AFTER=`md5sum $1` + echo -n "After: " + _extent_count $1 + if [ "$CSUM_BEFORE" != "$CSUM_AFTER" ]; then + _fail "file checksum changed post-defrag ($CSUM_BEFORE/$CSUM_AFTER)" + fi + if [ "$STAT_BEFORE" != "$STAT_AFTER" ]; then + _fail "file timestamps changed post-defrag:\n$STAT_BEFORE\n$STAT_AFTER" + fi + rm -f $1 +} + +# Craft some fragmented(?) files, defrag them, check the result. + +rm -f $fragfile + +echo "Empty file:" +touch $fragfile +_defrag $fragfile + +echo "Sparse file (no blocks):" +xfs_io -F -f -c "truncate 1m" $fragfile +_defrag $fragfile + +# note - sync IO here. Should some be non-sync? +# (necessary for the backwards writing though) + +echo "Contiguous file:" +dd if=/dev/zero of=$fragfile bs=4k count=4 oflag=sync &>/dev/null +_defrag $fragfile + +echo "Write backwards sync, but contiguous - should defrag to 1 extent" +for I in `seq 9 -1 0`; do + dd if=/dev/zero of=$fragfile bs=4k count=1 conv=notrunc seek=$I oflag=sync &>/dev/null +done +_defrag $fragfile + +echo "Write backwards sync leaving holes - defrag should do nothing" +for I in `seq 31 -2 0`; do + dd if=/dev/zero of=$fragfile bs=4k count=1 conv=notrunc seek=$I oflag=sync &>/dev/null +done +_defrag $fragfile + +echo "Write forwards sync leaving holes - defrag should do nothing" +for I in `seq 0 2 31`; do + dd if=/dev/zero of=$fragfile bs=4k count=1 conv=notrunc seek=$I oflag=sync &>/dev/null +done +_defrag $fragfile + +rm -f $seq.full +status=0 +exit --- /dev/null 2009-07-15 14:17:48.882013317 -0500 +++ a/218.out 2009-07-15 15:17:45.947092973 -0500 @@ -0,0 +1,19 @@ +QA output created by 218 +Empty file: +Before: 0 +After: 0 +Sparse file (no blocks): +Before: 0 +After: 0 +Contiguous file: +Before: 1 +After: 1 +Write backwards sync, but contiguous - should defrag to 1 extent +Before: 10 +After: 1 +Write backwards sync leaving holes - defrag should do nothing +Before: 16 +After: 16 +Write forwards sync leaving holes - defrag should do nothing +Before: 16 +After: 16 From adilger@sun.com Wed Jul 15 16:29:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FLTcfh222647 for ; Wed, 15 Jul 2009 16:29:38 -0500 X-ASG-Debug-ID: 1247693867-043c00740000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sca-es-mail-1.sun.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 31A8BA6B869 for ; Wed, 15 Jul 2009 14:37:47 -0700 (PDT) Received: from sca-es-mail-1.sun.com (sca-es-mail-1.Sun.COM [192.18.43.132]) by cuda.sgi.com with ESMTP id FFhOEKBtNYpV7Aji for ; Wed, 15 Jul 2009 14:37:47 -0700 (PDT) Received: from fe-sfbay-09.sun.com ([192.18.43.129]) by sca-es-mail-1.sun.com (8.13.7+Sun/8.12.9) with ESMTP id n6FLU5Pu028426 for ; Wed, 15 Jul 2009 14:30:09 -0700 (PDT) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-disposition: inline Content-type: text/plain; CHARSET=US-ASCII Received: from conversion-daemon.fe-sfbay-09.sun.com by fe-sfbay-09.sun.com (Sun Java(tm) System Messaging Server 7u2-7.02 64bit (built Apr 16 2009)) id <0KMU00E00EAHGW00@fe-sfbay-09.sun.com> for xfs@oss.sgi.com; Wed, 15 Jul 2009 14:30:05 -0700 (PDT) Received: from webber.adilger.int ([unknown] [205.233.54.179]) by fe-sfbay-09.sun.com (Sun Java(tm) System Messaging Server 7u2-7.02 64bit (built Apr 16 2009)) with ESMTPSA id <0KMU00EH4EE3ZP00@fe-sfbay-09.sun.com>; Wed, 15 Jul 2009 14:30:05 -0700 (PDT) Date: Wed, 15 Jul 2009 17:30:01 -0400 From: Andreas Dilger X-ASG-Orig-Subj: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Subject: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 In-reply-to: <4A5E3A37.5050306@redhat.com> Sender: Andreas.Dilger@sun.com To: Eric Sandeen Cc: xfs mailing list , ext4 development Message-id: <20090715213001.GH14175@webber.adilger.int> X-GPG-Key: 1024D/0D35BED6 X-GPG-Fingerprint: 7A37 5D79 BF1B CECA D44F 8A29 A488 39F5 0D35 BED6 References: <4A5E3A37.5050306@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: sca-es-mail-1.Sun.COM[192.18.43.132] X-Barracuda-Start-Time: 1247693875 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3504 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 15, 2009 15:21 -0500, Eric Sandeen wrote: > This test creates some files, runs defrag on them, > and compares the before/after fragmentation as well > as file md5sums and timestamps. > > (md5sums may just be reading buffered data though, > suggestions?) (umount; mount)? Cheers, Andreas -- Andreas Dilger Sr. Staff Engineer, Lustre Group Sun Microsystems of Canada, Inc. From sandeen@sandeen.net Wed Jul 15 16:46:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6FLkSjP223533 for ; Wed, 15 Jul 2009 16:46:29 -0500 X-ASG-Debug-ID: 1247694425-7ccc01c80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4C3433671A9 for ; Wed, 15 Jul 2009 14:47:05 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id MqUkgRJ6zVqEDKex for ; Wed, 15 Jul 2009 14:47:05 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6FLl50e021604; Wed, 15 Jul 2009 17:47:05 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6FLl4mU012759; Wed, 15 Jul 2009 17:47:04 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6FLl3sB008074; Wed, 15 Jul 2009 17:47:03 -0400 Message-ID: <4A5E4E57.7000802@sandeen.net> Date: Wed, 15 Jul 2009 16:47:03 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Andreas Dilger CC: Eric Sandeen , ext4 development , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Subject: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 References: <4A5E3A37.5050306@redhat.com> <20090715213001.GH14175@webber.adilger.int> In-Reply-To: <20090715213001.GH14175@webber.adilger.int> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247694428 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3503 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Andreas Dilger wrote: > On Jul 15, 2009 15:21 -0500, Eric Sandeen wrote: >> This test creates some files, runs defrag on them, >> and compares the before/after fragmentation as well >> as file md5sums and timestamps. >> >> (md5sums may just be reading buffered data though, >> suggestions?) > > (umount; mount)? I suppose that'd work :) -Eric > Cheers, Andreas From sgi-linux-xfs@gmane.org Wed Jul 15 19:14:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6G0EiPF232062 for ; Wed, 15 Jul 2009 19:14:47 -0500 X-ASG-Debug-ID: 1247703321-3de8036e0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ciao.gmane.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EF4CC1390532 for ; Wed, 15 Jul 2009 17:15:21 -0700 (PDT) Received: from ciao.gmane.org (main.gmane.org [80.91.229.2]) by cuda.sgi.com with ESMTP id pbVvxtVFf1k7DYl1 for ; Wed, 15 Jul 2009 17:15:21 -0700 (PDT) Received: from list by ciao.gmane.org with local (Exim 4.43) id 1MREd4-0001lc-J9 for linux-xfs@oss.sgi.com; Thu, 16 Jul 2009 00:15:18 +0000 Received: from adsl-75-61-228-198.dsl.chcgil.sbcglobal.net ([75.61.228.198]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 16 Jul 2009 00:15:18 +0000 Received: from kononov by adsl-75-61-228-198.dsl.chcgil.sbcglobal.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 16 Jul 2009 00:15:18 +0000 X-Injected-Via-Gmane: http://gmane.org/ To: linux-xfs@oss.sgi.com From: Roman Kononov X-ASG-Orig-Subj: Re: failed assertion related to realtime section Subject: Re: failed assertion related to realtime section Date: Wed, 15 Jul 2009 19:15:05 -0500 Lines: 313 Message-ID: <4A5E7109.7000808@ftml.net> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040000010905030403040802" X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: adsl-75-61-228-198.dsl.chcgil.sbcglobal.net User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080227 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 In-Reply-To: Sender: news X-Barracuda-Connect: main.gmane.org[80.91.229.2] X-Barracuda-Start-Time: 1247703322 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0207 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3512 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. --------------040000010905030403040802 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2009-07-15 07:23, Olaf Weber wrote: > Can you provide: > > - the options used to create the filesystem > - the mount options of the filesystem > - (a summary of) the commands run The attached bash script (xfs-doit) produces the attached output (out.txt). The kernel messages are attached as well (rt-assert.txt). The kernel was compiled with the attached configuration (config.tar.bz2). The /dev/sda and /dev/sdb are 75GB SATA drives. --------------040000010905030403040802 Content-Type: text/plain; name="out.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="out.txt" KyB1bmFtZSAtYQpMaW51eCAxMC4xMC4xMC4xMDIgMi42LjMwLjEueGRpICM3IFNNUCBXZWQg SnVsIDE1IDE2OjA0OjI5IENEVCAyMDA5IHg4Nl82NCB4ODZfNjQgeDg2XzY0IEdOVS9MaW51 eAorIGNkIC90bXAKKyBmdXNlciAtbWsgL2Rldi9zZGEKKyB1bW91bnQgL2Rldi9zZGEKdW1v dW50OiAvZGV2L3NkYTogbm90IG1vdW50ZWQKKyBta2ZzLnhmcyAtTCB0ZXN0IC1mIC1pIHNp emU9MmsgLWwgbGF6eS1jb3VudD0xIC1kIHNpemU9MWcgLXIgc2l6ZT0xMGcsZXh0c2l6ZT0z Mm0scnRkZXY9L2Rldi9zZGIgL2Rldi9zZGEKbWV0YS1kYXRhPS9kZXYvc2RhICAgICAgICAg ICAgICAgaXNpemU9MjA0OCAgIGFnY291bnQ9OCwgYWdzaXplPTMyNzY4IGJsa3MKICAgICAg ICAgPSAgICAgICAgICAgICAgICAgICAgICAgc2VjdHN6PTUxMiAgIGF0dHI9MApkYXRhICAg ICA9ICAgICAgICAgICAgICAgICAgICAgICBic2l6ZT00MDk2ICAgYmxvY2tzPTI2MjE0NCwg aW1heHBjdD0yNQogICAgICAgICA9ICAgICAgICAgICAgICAgICAgICAgICBzdW5pdD0wICAg ICAgc3dpZHRoPTAgYmxrcywgdW53cml0dGVuPTEKbmFtaW5nICAgPXZlcnNpb24gMiAgICAg ICAgICAgICAgYnNpemU9NDA5Ngpsb2cgICAgICA9aW50ZXJuYWwgbG9nICAgICAgICAgICBi c2l6ZT00MDk2ICAgYmxvY2tzPTI1NjAsIHZlcnNpb249MQogICAgICAgICA9ICAgICAgICAg ICAgICAgICAgICAgICBzZWN0c3o9NTEyICAgc3VuaXQ9MCBibGtzLCBsYXp5LWNvdW50PTEK cmVhbHRpbWUgPS9kZXYvc2RiICAgICAgICAgICAgICAgZXh0c3o9MzM1NTQ0MzIgYmxvY2tz PTI2MjE0NDAsIHJ0ZXh0ZW50cz0zMjAKKyBta2RpciAtcCB0ZXN0CisgbW91bnQgLW8gbm9p a2VlcCxsYXJnZWlvLG5vYXRpbWUsbm9kaXJhdGltZSxzd2FsbG9jLG5vYmFycmllcixydGRl dj0vZGV2L3NkYiAvZGV2L3NkYSB0ZXN0CisgbWtkaXIgdGVzdC9kYXRhIHRlc3Qvcmx0bQor IC91c3Ivc2Jpbi94ZnNfaW8gLWMgJ2NoYXR0ciArcicgLWMgJ2NoYXR0ciArdCcgdGVzdC9y bHRtCisgZm9yIGZpbGUgaW4gJ3swLi4xfScKKyBkZCBpZj0vZGV2L3plcm8gb2Y9dGVzdC9y bHRtLzAgYnM9MTA0ODU3NiBjb3VudD0xMDAgc2Vlaz0xMAorIGZvciBmaWxlIGluICd7MC4u MX0nCisgZGQgaWY9L2Rldi96ZXJvIG9mPXRlc3Qvcmx0bS8xIGJzPTEwNDg1NzYgY291bnQ9 MTAwIHNlZWs9MTAKKyB3YWl0CnRtcC94ZnMtZG9pdDogbGluZSAxNzogICA4MzQgU2VnbWVu dGF0aW9uIGZhdWx0ICAgICAgZGQgaWY9L2Rldi96ZXJvIG9mPXRlc3Qvcmx0bS8kZmlsZSBi cz0kKCgxMDI0KjEwMjQpKSBjb3VudD0xMDAgc2Vlaz0xMAp0bXAveGZzLWRvaXQ6IGxpbmUg MTc6ICAgODM1IFNlZ21lbnRhdGlvbiBmYXVsdCAgICAgIGRkIGlmPS9kZXYvemVybyBvZj10 ZXN0L3JsdG0vJGZpbGUgYnM9JCgoMTAyNCoxMDI0KSkgY291bnQ9MTAwIHNlZWs9MTAKKyB1 bW91bnQgdGVzdAp1bW91bnQ6IC90bXAvdGVzdDogZGV2aWNlIGlzIGJ1c3kKdW1vdW50OiAv dG1wL3Rlc3Q6IGRldmljZSBpcyBidXN5CisgZXhpdAo= --------------040000010905030403040802 Content-Type: text/plain; name="rt-assert.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rt-assert.txt" WEZTOiBjb3JyZWN0aW5nIHNiX2ZlYXR1cmVzIGFsaWdubWVudCBwcm9ibGVtClhGUyBtb3Vu dGluZyBmaWxlc3lzdGVtIHNkYQpBc3NlcnRpb24gZmFpbGVkOiB4ZnNfdHJhbnNfZ2V0X2Js b2NrX3Jlcyh0cCkgPiAwLCBmaWxlOiAvaG9tZS9zdHVmZi9iYXNlL2xpbnV4LTIuNi4zMC4x L2ZzL3hmcy94ZnNfYm1hcC5jLCBsaW5lOiA1NjAyCi0tLS0tLS0tLS0tLVsgY3V0IGhlcmUg XS0tLS0tLS0tLS0tLQprZXJuZWwgQlVHIGF0IC9ob21lL3N0dWZmL2Jhc2UvbGludXgtMi42 LjMwLjEvZnMveGZzL3N1cHBvcnQvZGVidWcuYzoxMDkhCmludmFsaWQgb3Bjb2RlOiAwMDAw IFsjMV0gU01QCmxhc3Qgc3lzZnMgZmlsZTogL3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAw MDowMDowOC4wL2hvc3QyL3RhcmdldDI6MDowLzI6MDowOjAvYmxvY2svc2RiL2RldgpDUFUg MApNb2R1bGVzIGxpbmtlZCBpbjogaWJfbXRoY2Egc2F0YV9udgpQaWQ6IDgzNCwgY29tbTog ZGQgTm90IHRhaW50ZWQgMi42LjMwLjEueGRpICM3ClJJUDogMDAxMDpbPGZmZmZmZmZmODAz OWY5ZGE+XSAgWzxmZmZmZmZmZjgwMzlmOWRhPl0gYXNzZmFpbCsweDFhLzB4MjAKUlNQOiAw MDE4OmZmZmY4ODAxM2IxNTljYTggIEVGTEFHUzogMDAwMTAyOTYKUkFYOiAwMDAwMDAwMDAw MDAwMDdhIFJCWDogMDAwMDAwMDAwMDAwN2ZmZiBSQ1g6IDAwMDAwMDAwMDAwMDAwMDAKUkRY OiBmZmZmODgwMDI4MDIyMDAwIFJTSTogMDAwMDAwMDAwMDAwMDA0NiBSREk6IGZmZmZmZmZm ODA3MWE4NTQKUkJQOiAwMDAwMDAwMDAwMDA2ZTAwIFIwODogMDAwMDAwMDAwMDAwMDAwMCBS MDk6IDAwMDAwMDAwMDAwMDAwMDIKUjEwOiAwMDAwMDAwMDAwMDAwMDAwIFIxMTogZmZmZmZm ZmY4MDNjZmRhMCBSMTI6IGZmZmY4ODAxM2Y1NzcyYzAKUjEzOiBmZmZmODgwMTNmNTc3MmY4 IFIxNDogZmZmZjg4MDEzZjU3NzMxOCBSMTU6IGZmZmY4ODAxM2IwMTU0MDAKRlM6ICAwMDAw N2ZhNzQwOTIwNmUwKDAwMDApIEdTOmZmZmY4ODAwMjgwMjIwMDAoMDAwMCkga25sR1M6MDAw MDAwMDAwMDAwMDAwMApDUzogIDAwMTAgRFM6IDAwMDAgRVM6IDAwMDAgQ1IwOiAwMDAwMDAw MDgwMDUwMDNiCkNSMjogMDAwMDdmZTI1OGQxZDAwMCBDUjM6IDAwMDAwMDAxM2IxN2IwMDAg Q1I0OiAwMDAwMDAwMDAwMDAwNmUwCkRSMDogMDAwMDAwMDAwMDAwMDAwMCBEUjE6IDAwMDAw MDAwMDAwMDAwMDAgRFIyOiAwMDAwMDAwMDAwMDAwMDAwCkRSMzogMDAwMDAwMDAwMDAwMDAw MCBEUjY6IDAwMDAwMDAwZmZmZjBmZjAgRFI3OiAwMDAwMDAwMDAwMDAwNDAwClByb2Nlc3Mg ZGQgKHBpZDogODM0LCB0aHJlYWRpbmZvIGZmZmY4ODAxM2IxNTgwMDAsIHRhc2sgZmZmZjg4 MDEzZTgyOGIyMCkKU3RhY2s6CiAwMDA4MDAwMDAwMDAwMDAwIGZmZmZmZmZmODAzNDVlOWMg ZmZmZjg4MDEzYjE1OWQwOCBmZmZmODgwMTNiMTU5ZDg4CiBmZmZmODgwMTNmNTc3NTcwIDAw MDAwMDAwMDAwMDAwMGUgMDAwMDAwMDAwMDAwNmUwMCAwMDAwMDAwMDAwMDAxMjg2CiAwMDAw MDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDIgMDAwMDAwMDAwMDAwMDAwMSBmZmZmODgw MTNiMWIyMDMwCkNhbGwgVHJhY2U6CiBbPGZmZmZmZmZmODAzNDVlOWM+XSA/IHhmc19idW5t YXBpKzB4YzVjLzB4MTFlMAogWzxmZmZmZmZmZjgwMzZkZDUwPl0gPyB4ZnNfaXRydW5jYXRl X2ZpbmlzaCsweDJiMC8weDVkMAogWzxmZmZmZmZmZjgwMzhlYWUxPl0gPyB4ZnNfZnJlZV9l b2ZibG9ja3MrMHgyNzEvMHgyYzAKIFs8ZmZmZmZmZmY4MDM5NmY1MD5dID8geGZzX2ZpbGVf cmVsZWFzZSsweDEwLzB4MjAKIFs8ZmZmZmZmZmY4MDI5ZWQyMj5dID8gX19mcHV0KzB4YzIv MHgyMTAKIFs8ZmZmZmZmZmY4MDI5YjhkNj5dID8gZmlscF9jbG9zZSsweDU2LzB4OTAKIFs8 ZmZmZmZmZmY4MDI5YjlhMT5dID8gc3lzX2Nsb3NlKzB4OTEvMHhkMAogWzxmZmZmZmZmZjgw MjBiZGViPl0gPyBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDE2LzB4MWIKQ29kZTogMDggMDEg MDAgMDAgMDAgZTggMjcgMTkgMDMgMDAgNDggODMgYzQgMTggYzMgNjYgOTAgODkgZDEgNDgg ODMgZWMgMDggNDggODkgZjIgMzEgYzAgNDggODkgZmUgNDggYzcgYzcgZTggZDkgNWUgODAg ZTggMDYgYzcgMWEgMDAgPDBmPiAwYiBlYiBmZSA2NiA5MCA0OCA4MyBlYyAyOCA0OCA4OSAx YyAyNCA0YyA4OSA2YyAyNCAxOCA4OSBmYgpSSVAgIFs8ZmZmZmZmZmY4MDM5ZjlkYT5dIGFz c2ZhaWwrMHgxYS8weDIwCiBSU1AgPGZmZmY4ODAxM2IxNTljYTg+Ci0tLVsgZW5kIHRyYWNl IDg4Y2Y0MmZhZjVjMWU0MzEgXS0tLQpBc3NlcnRpb24gZmFpbGVkOiB4ZnNfdHJhbnNfZ2V0 X2Jsb2NrX3Jlcyh0cCkgPiAwLCBmaWxlOiAvaG9tZS9zdHVmZi9iYXNlL2xpbnV4LTIuNi4z MC4xL2ZzL3hmcy94ZnNfYm1hcC5jLCBsaW5lOiA1NjAyCi0tLS0tLS0tLS0tLVsgY3V0IGhl cmUgXS0tLS0tLS0tLS0tLQprZXJuZWwgQlVHIGF0IC9ob21lL3N0dWZmL2Jhc2UvbGludXgt Mi42LjMwLjEvZnMveGZzL3N1cHBvcnQvZGVidWcuYzoxMDkhCmludmFsaWQgb3Bjb2RlOiAw MDAwIFsjMl0gU01QCmxhc3Qgc3lzZnMgZmlsZTogL3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAv MDAwMDowMDowOC4wL2hvc3QyL3RhcmdldDI6MDowLzI6MDowOjAvYmxvY2svc2RiL2RldgpD UFUgMApNb2R1bGVzIGxpbmtlZCBpbjogaWJfbXRoY2Egc2F0YV9udgpQaWQ6IDgzNSwgY29t bTogZGQgVGFpbnRlZDogRyAgICAgIEQgICAgMi42LjMwLjEueGRpICM3ClJJUDogMDAxMDpb PGZmZmZmZmZmODAzOWY5ZGE+XSAgWzxmZmZmZmZmZjgwMzlmOWRhPl0gYXNzZmFpbCsweDFh LzB4MjAKUlNQOiAwMDE4OmZmZmY4ODAxM2IxMzFjYTggIEVGTEFHUzogMDAwMTAyOTYKUkFY OiAwMDAwMDAwMDAwMDAwMDdhIFJCWDogMDAwMDAwMDAwMDAwN2ZmZiBSQ1g6IDAwMDAwMDAw MDAwMDAwMDAKUkRYOiBmZmZmODgwMDI4MDIyMDAwIFJTSTogMDAwMDAwMDAwMDAwMDA0NiBS REk6IGZmZmZmZmZmODA3MWE4NTQKUkJQOiAwMDAwMDAwMDAwMDA2ZTAwIFIwODogMDAwMDAw MDAwMDAwMDAwMCBSMDk6IDAwMDAwMDAwMDAwMDAwMDIKUjEwOiAwMDAwMDAwMDAwMDAwMDAw IFIxMTogZmZmZmZmZmY4MDNjZmRhMCBSMTI6IGZmZmY4ODAxM2Y1Nzc2ODAKUjEzOiBmZmZm ODgwMTNmNTc3NmI4IFIxNDogZmZmZjg4MDEzZjU3NzZkOCBSMTU6IGZmZmY4ODAxM2IwMTU0 MDAKRlM6ICAwMDAwN2ZlMjU4ZDIwNmUwKDAwMDApIEdTOmZmZmY4ODAwMjgwMjIwMDAoMDAw MCkga25sR1M6MDAwMDAwMDAwMDAwMDAwMApDUzogIDAwMTAgRFM6IDAwMDAgRVM6IDAwMDAg Q1IwOiAwMDAwMDAwMDgwMDUwMDNiCkNSMjogMDAwMDAwMzdmM2VkMTA2MCBDUjM6IDAwMDAw MDAxM2IxN2EwMDAgQ1I0OiAwMDAwMDAwMDAwMDAwNmUwCkRSMDogMDAwMDAwMDAwMDAwMDAw MCBEUjE6IDAwMDAwMDAwMDAwMDAwMDAgRFIyOiAwMDAwMDAwMDAwMDAwMDAwCkRSMzogMDAw MDAwMDAwMDAwMDAwMCBEUjY6IDAwMDAwMDAwZmZmZjBmZjAgRFI3OiAwMDAwMDAwMDAwMDAw NDAwClByb2Nlc3MgZGQgKHBpZDogODM1LCB0aHJlYWRpbmZvIGZmZmY4ODAxM2IxMzAwMDAs IHRhc2sgZmZmZjg4MDEzZTgyYWM4MCkKU3RhY2s6CiAwMDA4MDAwMDAwMDAwMDAwIGZmZmZm ZmZmODAzNDVlOWMgZmZmZjg4MDEzYjEzMWQwOCBmZmZmODgwMTNiMTMxZDg4CiBmZmZmODgw MTNmNTc3OTMwIDAwMDAwMDAwMDAwMDAwMGUgMDAwMDAwMDAwMDAwNmUwMCAwMDAwMDAwMDAw MDAxMjg2CiAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDIgMDAwMDAwMDAwMDAw MDAwMSBmZmZmODgwMTNiMWIyMzY4CkNhbGwgVHJhY2U6CiBbPGZmZmZmZmZmODAzNDVlOWM+ XSA/IHhmc19idW5tYXBpKzB4YzVjLzB4MTFlMAogWzxmZmZmZmZmZjgwMzZkZDUwPl0gPyB4 ZnNfaXRydW5jYXRlX2ZpbmlzaCsweDJiMC8weDVkMAogWzxmZmZmZmZmZjgwMzhlYWUxPl0g PyB4ZnNfZnJlZV9lb2ZibG9ja3MrMHgyNzEvMHgyYzAKIFs8ZmZmZmZmZmY4MDM5NmY1MD5d ID8geGZzX2ZpbGVfcmVsZWFzZSsweDEwLzB4MjAKIFs8ZmZmZmZmZmY4MDI5ZWQyMj5dID8g X19mcHV0KzB4YzIvMHgyMTAKIFs8ZmZmZmZmZmY4MDI5YjhkNj5dID8gZmlscF9jbG9zZSsw eDU2LzB4OTAKIFs8ZmZmZmZmZmY4MDI5YjlhMT5dID8gc3lzX2Nsb3NlKzB4OTEvMHhkMAog WzxmZmZmZmZmZjgwMjBiZGViPl0gPyBzeXN0ZW1fY2FsbF9mYXN0cGF0aCsweDE2LzB4MWIK Q29kZTogMDggMDEgMDAgMDAgMDAgZTggMjcgMTkgMDMgMDAgNDggODMgYzQgMTggYzMgNjYg OTAgODkgZDEgNDggODMgZWMgMDggNDggODkgZjIgMzEgYzAgNDggODkgZmUgNDggYzcgYzcg ZTggZDkgNWUgODAgZTggMDYgYzcgMWEgMDAgPDBmPiAwYiBlYiBmZSA2NiA5MCA0OCA4MyBl YyAyOCA0OCA4OSAxYyAyNCA0YyA4OSA2YyAyNCAxOCA4OSBmYgpSSVAgIFs8ZmZmZmZmZmY4 MDM5ZjlkYT5dIGFzc2ZhaWwrMHgxYS8weDIwCiBSU1AgPGZmZmY4ODAxM2IxMzFjYTg+Ci0t LVsgZW5kIHRyYWNlIDg4Y2Y0MmZhZjVjMWU0MzIgXS0tLQo= --------------040000010905030403040802 Content-Type: text/plain; name="xfs-doit" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="xfs-doit" IyEvYmluL2Jhc2gKZGF0YV9kZXY9L2Rldi9zZGEKcmx0bV9kZXY9L2Rldi9zZGIKc2V0IC14 CnVuYW1lIC1hCmNkIC90bXAKZnVzZXIgLW1rICRkYXRhX2Rldgp1bW91bnQgJGRhdGFfZGV2 Cm1rZnMueGZzIC1MIHRlc3QgLWYgLWkgc2l6ZT0yayAtbCBsYXp5LWNvdW50PTEgLWQgc2l6 ZT0xZyAtciBzaXplPTEwZyxleHRzaXplPTMybSxydGRldj0kcmx0bV9kZXYgJGRhdGFfZGV2 IHx8IGV4aXQKbWtkaXIgLXAgdGVzdCB8fCBleGl0Cm1vdW50IC1vIG5vaWtlZXAsbGFyZ2Vp byxub2F0aW1lLG5vZGlyYXRpbWUsc3dhbGxvYyxub2JhcnJpZXIscnRkZXY9JHJsdG1fZGV2 ICRkYXRhX2RldiB0ZXN0IHx8IGV4aXQKbWtkaXIgdGVzdC9kYXRhIHRlc3Qvcmx0bSB8fCBl eGl0Ci91c3Ivc2Jpbi94ZnNfaW8gLWMgImNoYXR0ciArciIgLWMgImNoYXR0ciArdCIgdGVz dC9ybHRtIHx8IGV4aXQKZm9yIGZpbGUgaW4gezAuLjF9OyBkbwoJZGQgaWY9L2Rldi96ZXJv IG9mPXRlc3Qvcmx0bS8kZmlsZSBicz0kKCgxMDI0KjEwMjQpKSBjb3VudD0xMDAgc2Vlaz0x MCAmCmRvbmUKd2FpdAp1bW91bnQgdGVzdCB8fCBleGl0Cnhmc19yZXBhaXIgLW52IC1yICRy bHRtX2RldiAkZGF0YV9kZXYgfHwgZXhpdAplY2hvICJkb25lIgo= --------------040000010905030403040802 Content-Type: application/x-bzip; name="config.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="config.tar.bz2" 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 dyRThQkF7zsygA== --------------040000010905030403040802-- From Anil.Rathod@tatatechnologies.com Thu Jul 16 03:12:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6G8CphX261710 for ; Thu, 16 Jul 2009 03:12:52 -0500 X-ASG-Debug-ID: 1247732008-32e300310000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from egateway.tatatechnologies.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C95D61397DD9 for ; Thu, 16 Jul 2009 01:13:29 -0700 (PDT) Received: from egateway.tatatechnologies.com (egateway.tatatechnologies.com [203.201.222.200]) by cuda.sgi.com with ESMTP id t4VgEHT3IjXP9uGy for ; Thu, 16 Jul 2009 01:13:29 -0700 (PDT) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01CA05ED.4B054433" X-ASG-Orig-Subj: Chacl command not found Subject: Chacl command not found Date: Thu, 16 Jul 2009 13:43:25 +0530 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Chacl command not found Thread-Index: AcoF7Ur8gdqGpR3iTvKIG61p1UXPww== From: To: X-Barracuda-Connect: egateway.tatatechnologies.com[203.201.222.200] X-Barracuda-Start-Time: 1247732010 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3541 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------_=_NextPart_001_01CA05ED.4B054433 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, =20 We are using IRIX OS on our SGI tezro Server. I am facing a problem regarding to the ACL. chacl this commad was not supporting. =20 =20 =20 Kindly help us regarding the same=20 =20 =20 Anil Rathod=20 Systems Administrator=20 Tata Technologies=20 Pune ,India=20 =20 Mob.+ 91 9011094209=20 =20 =20 =20 =20 =20 ***************************************************************************= *********************************************************************** Email Disclaimer: Information contained and transmitted by this e-mail (including any attachm= ents) is confidential, proprietary and legally privileged data of Tata Tech= nologies that is intended for use only by the addressee. If you are not the= intended recipient, you are notified that any review, use, dissemination, = distribution, copying or printing of this e-mail is strictly prohibited. Yo= u are requested to delete this e-mail or any copies immediately and notify = the sender by reply email. Internet communications cannot be guaranteed to = be timely, secure, error or virus-free. Tata Technologies does not accept = any liability for virus infected email or errors or omissions or consequenc= es which may arise as a result of this e-mail transmission. To know more ab= out Tata Technologies please visit http://www.tatatechnologies.com ***************************************************************************= ********************************************************************* ------_=_NextPart_001_01CA05ED.4B054433 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,

 

We are using IRIX OS on our SGI tezro Server.=

I am facing a problem regarding to the ACL.

chacl  this commad was not  suppo= rting.

 

 

 

Kindly help us regarding the same =

 

 

Anil Rathod

Systems Administrator

Tata Technologies

Pune ,India<= /font>

 

Mob.+ 91 9011094209 <= /font>

 

 

 

 

 

**********************************************************************=
****************************************************************************
Email Disclaimer:

Information contained and transmitted by this e-mail (including any attachm=
ents) is confidential, proprietary and legally privileged data of Tata Tech=
nologies that is intended for use only by the addressee. If you are not the=
 intended recipient, you are notified that any review, use, dissemination, =
distribution, copying or printing of this e-mail is strictly prohibited. Yo=
u are requested to delete this e-mail or any copies immediately and notify =
the sender by reply email. Internet communications cannot be guaranteed to =
be timely, secure, error or virus-free.  Tata Technologies does not accept =
any liability for virus infected email or errors or omissions or consequenc=
es which may arise as a result of this e-mail transmission. To know more ab=
out Tata Technologies please visit http://www.tatatechnologies.com
***************************************************************************=
*********************************************************************
------_=_NextPart_001_01CA05ED.4B054433-- From olaf@sgi.com Thu Jul 16 05:55:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GAth2c009372 for ; Thu, 16 Jul 2009 05:55:44 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6GAuM9E364753; Thu, 16 Jul 2009 12:56:22 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6GAuLNL364742; Thu, 16 Jul 2009 12:56:21 +0200 (MEST) To: Eric Sandeen Cc: xfs mailing list Subject: Re: [PATCH] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> From: Olaf Weber Date: Thu, 16 Jul 2009 12:56:21 +0200 In-Reply-To: <4A5E2F01.7030107@sandeen.net> (Eric Sandeen's message of "Wed, 15 Jul 2009 14:33:21 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: > commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused > the full bmv_count's worth of getbmapx structures to get > allocated; telling it to do MAXEXTNUM was a bit insane, > resulting in ENOMEM. > Chop it down to something reasonable, the caller can > loop over this if the file has > 64 extents. It does seem to me that this will result in an unusal case for the caller, in that it will get fewer extents than fit in the provided buffer, yet should loop. Do current callers know that they can hit this case, detect it, and loop accordingly? Or is this just pushing the problem/regression to userspace? > (this is a regression, FWIW) > Signed-off-by: Eric Sandeen > --- > iff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c > index 58973bb..370e9a7 100644 > --- a/fs/xfs/linux-2.6/xfs_iops.c > +++ b/fs/xfs/linux-2.6/xfs_iops.c > @@ -680,8 +680,12 @@ xfs_vn_fiemap( > else > bm.bmv_length = BTOBB(length); > - /* our formatter will tell xfs_getbmap when to stop. */ > - bm.bmv_count = MAXEXTNUM; > + /* > + * xfs_getbmap allocates based on that; pick a count that's > + * not too outragous. > + * Our formatter will tell xfs_getbmap when to stop. > + */ > + bm.bmv_count = 64; > bm.bmv_iflags = BMV_IF_PREALLOC; > if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) > bm.bmv_iflags |= BMV_IF_ATTRFORK; -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From michael.monnerie@is.it-management.at Thu Jul 16 05:56:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GAuQrK009422 for ; Thu, 16 Jul 2009 05:56:27 -0500 X-ASG-Debug-ID: 1247741824-32e903220000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 804F5139BE95 for ; Thu, 16 Jul 2009 03:57:05 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id DBGXXUSsAgQfFu5N for ; Thu, 16 Jul 2009 03:57:05 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id C973353F0 for ; Thu, 16 Jul 2009 12:57:47 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id E9DD3400154 for ; Thu, 16 Jul 2009 12:57:03 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: LWN article: A new way to truncate() files Subject: LWN article: A new way to truncate() files Date: Thu, 16 Jul 2009 12:56:58 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2305894.SI8GXBnYSp"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907161257.03539@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247741825 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0128 1.0000 -1.9373 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.94 X-Barracuda-Spam-Status: No, SCORE=-1.94 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart2305894.SI8GXBnYSp Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline I'm pretty sure the core hackers are on linux-kernel, but for the rest=20 of us LWN provided a good article explaining development, in this case=20 it reaches into XFS that's why I post it here: http://lwn.net/SubscriberLink/341352/21ab5a5c7158ea80/ mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart2305894.SI8GXBnYSp Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpfB38ACgkQzhSR9xwSCbSIEwCgzL+gAzJTap7szUfdez4tqAfj UO8AoL0WyykgmLYJzMfXqeOmPCo/IfCQ =FuUX -----END PGP SIGNATURE----- --nextPart2305894.SI8GXBnYSp-- From olaf@sgi.com Thu Jul 16 06:00:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GB0sOb009673 for ; Thu, 16 Jul 2009 06:00:55 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6GB1Y0V360503; Thu, 16 Jul 2009 13:01:34 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6GB1XWB364691; Thu, 16 Jul 2009 13:01:33 +0200 (MEST) To: Cc: Subject: Re: Chacl command not found References: From: Olaf Weber Date: Thu, 16 Jul 2009 13:01:33 +0200 In-Reply-To: (anil rathod's message of "Thu, 16 Jul 2009 13:43:25 +0530") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean anil rathod writes: > Hi, > We are using IRIX OS on our SGI tezro Server. > I am facing a problem regarding to the ACL. > chacl this commad was not supporting. On IRIX the chacl command is part of eoe.sw.acl, make sure it has been installed. It is not installed by default. eoe.sw.acl also contains kernel components, so you will need to reboot as well. -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Thu Jul 16 09:19:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GEJAfc020477 for ; Thu, 16 Jul 2009 09:19:10 -0500 X-ASG-Debug-ID: 1247753984-5d4b031e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EC099139C750 for ; Thu, 16 Jul 2009 07:19:45 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id SPYrk0jjKXmFjNwO for ; Thu, 16 Jul 2009 07:19:45 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 45143A9C9A8; Thu, 16 Jul 2009 09:19:43 -0500 (CDT) Message-ID: <4A5F36FE.4050200@sandeen.net> Date: Thu, 16 Jul 2009 09:19:42 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Olaf Weber CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] reduce bmv_count in xfs_vn_fiemap Subject: Re: [PATCH] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247753986 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0200 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3565 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Olaf Weber wrote: > Eric Sandeen writes: > >> commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused >> the full bmv_count's worth of getbmapx structures to get >> allocated; telling it to do MAXEXTNUM was a bit insane, >> resulting in ENOMEM. > >> Chop it down to something reasonable, the caller can >> loop over this if the file has > 64 extents. > > It does seem to me that this will result in an unusal case for the > caller, in that it will get fewer extents than fit in the provided > buffer, yet should loop. Do current callers know that they can hit > this case, detect it, and loop accordingly? Or is this just pushing > the problem/regression to userspace? Well, userspace just keeps calling until it gets FIEMAP_LAST in the flags. But yeah, I forgot that we were given the nr of user extents, I'll send a better V2. -Eric From sandeen@sandeen.net Thu Jul 16 09:47:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GElmHf022653 for ; Thu, 16 Jul 2009 09:47:48 -0500 X-ASG-Debug-ID: 1247755707-309500b50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A3DF3139CBA1 for ; Thu, 16 Jul 2009 07:48:27 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id NFvFU1SRto4aGXgF for ; Thu, 16 Jul 2009 07:48:27 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0BD2BA9DAA5; Thu, 16 Jul 2009 09:48:27 -0500 (CDT) Message-ID: <4A5F3DBA.9040005@sandeen.net> Date: Thu, 16 Jul 2009 09:48:26 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Olaf Weber CC: xfs mailing list X-ASG-Orig-Subj: [PATCH V2] reduce bmv_count in xfs_vn_fiemap Subject: [PATCH V2] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247755707 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3565 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused the full bmv_count's worth of getbmapx structures to get allocated; telling it to do MAXEXTNUM was a bit insane, resulting in ENOMEM every time. Chop it down to something reasonable, the number of slots in the caller's input buffer. If this is too large the caller may get ENOMEM but the reason should not be a mystery, and they can try again with something smaller. Signed-off-by: Eric Sandeen --- V2: set it to the fiemap info's fi_extents_max diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb..954d701 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -680,8 +680,7 @@ xfs_vn_fiemap( else bm.bmv_length = BTOBB(length); - /* our formatter will tell xfs_getbmap when to stop. */ - bm.bmv_count = MAXEXTNUM; + bm.bmv_count = fieinfo->fi_extents_max; bm.bmv_iflags = BMV_IF_PREALLOC; if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) bm.bmv_iflags |= BMV_IF_ATTRFORK; From olaf@sgi.com Thu Jul 16 10:18:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GFI4Dj024148 for ; Thu, 16 Jul 2009 10:18:05 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6GFIh0k366570; Thu, 16 Jul 2009 17:18:43 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6GFIgrw366635; Thu, 16 Jul 2009 17:18:42 +0200 (MEST) To: Eric Sandeen Cc: xfs mailing list Subject: Re: [PATCH V2] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> <4A5F3DBA.9040005@sandeen.net> From: Olaf Weber Date: Thu, 16 Jul 2009 17:18:40 +0200 In-Reply-To: <4A5F3DBA.9040005@sandeen.net> (Eric Sandeen's message of "Thu, 16 Jul 2009 09:48:26 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: > commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused > the full bmv_count's worth of getbmapx structures to get > allocated; telling it to do MAXEXTNUM was a bit insane, > resulting in ENOMEM every time. > Chop it down to something reasonable, the number of slots > in the caller's input buffer. If this is too large the > caller may get ENOMEM but the reason should not be a > mystery, and they can try again with something smaller. This version looks a lot better. Thanks. > Signed-off-by: Eric Sandeen Reviewed-By: Olaf Weber > --- > V2: set it to the fiemap info's fi_extents_max > diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c > index 58973bb..954d701 100644 > --- a/fs/xfs/linux-2.6/xfs_iops.c > +++ b/fs/xfs/linux-2.6/xfs_iops.c > @@ -680,8 +680,7 @@ xfs_vn_fiemap( > else > bm.bmv_length = BTOBB(length); > - /* our formatter will tell xfs_getbmap when to stop. */ > - bm.bmv_count = MAXEXTNUM; > + bm.bmv_count = fieinfo->fi_extents_max; > bm.bmv_iflags = BMV_IF_PREALLOC; > if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) > bm.bmv_iflags |= BMV_IF_ATTRFORK; > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Thu Jul 16 13:07:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_31, J_CHICKENPOX_42,J_CHICKENPOX_44,J_CHICKENPOX_45,J_CHICKENPOX_46, J_CHICKENPOX_47,J_CHICKENPOX_52,J_CHICKENPOX_63,J_CHICKENPOX_64, J_CHICKENPOX_66,J_CHICKENPOX_73,J_CHICKENPOX_74,J_CHICKENPOX_83, J_CHICKENPOX_93,URIBL_BLACK autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GI7dd7030497 for ; Thu, 16 Jul 2009 13:07:39 -0500 X-ASG-Debug-ID: 1247768158-7ccb02550000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2E4D5A79F53 for ; Thu, 16 Jul 2009 11:15:58 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id gwiI8D9BlDxdzdxT for ; Thu, 16 Jul 2009 11:15:58 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6GI85ng005202; Thu, 16 Jul 2009 14:08:05 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6GI83XL021270; Thu, 16 Jul 2009 14:08:04 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6GI8221018574; Thu, 16 Jul 2009 14:08:03 -0400 Message-ID: <4A5F6C82.9020606@sandeen.net> Date: Thu, 16 Jul 2009 13:08:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH, RFC] xfsprogs: add xfs_reno(8) Subject: Re: [PATCH, RFC] xfsprogs: add xfs_reno(8) References: <20090528151804.GA31976@infradead.org> In-Reply-To: <20090528151804.GA31976@infradead.org> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247768159 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3580 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > The Linux port of xfs_reno has been lingering around for a while, and > I think we'd be better off just merging it into xfsprogs. The only > issue is that it requires libtattr and thuse we would add a libattr > dependency to xfsprogs. But given that libattr is part of even the > most minimal Linux installations these days and used by thinks as > basic as cp or ls from coreutils I don't think that's an issue. > > > Signed-off-by: Christoph Hellwig Seems fine to me; whoever merges it will need to be sure to get all the configure bits right, just dropping in the patch and running autoconf didn't do it for me, but I'm not well versed in that stuff. However, I did get several of these messages on build: .././reno/xfs_reno.c:1415: internationalized messages should not contain the `\r' escape sequence also: /src2/cvs/fc-cvs/xfsprogs/devel/xfsprogs-3.0.1/reno/xfs_reno.c:1229: warning: the use of `mktemp' is dangerous, better use `mkstemp' Hm also ... does it work? :) # reno/xfs_reno -f /mnt/test xfs_reno: /mnt/xfs_reno_UHm5aO: Cannet set target extended attributes xfs_reno: failed to rename: '/mnt/test/2.6.18-129.el5' to '/mnt/xfs_reno_96tnRV/2.6.18-129.el5' xfs_reno: unable to move directory contents: /mnt/test to /mnt/xfs_reno_96tnRV xfs_reno: Cannot stat /mnt/xfs_reno_UHm5aO: Inappropriate ioctl for device xfs_reno: unable to duplicate directory attributes: /mnt/xfs_reno_UHm5aO # stat -f /mnt/test File: "/mnt/test" ID: 813 Namelen: 255 Type: xfs .... -Eric > Index: xfsprogs-dev/Makefile > =================================================================== > --- xfsprogs-dev.orig/Makefile 2009-05-10 16:42:02.000000000 +0000 > +++ xfsprogs-dev/Makefile 2009-05-28 13:56:43.000000000 +0000 > @@ -20,7 +20,7 @@ > > LIB_SUBDIRS = libxfs libxlog libxcmd libhandle libdisk > TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ > - mdrestore repair rtcp m4 man doc po debian build > + mdrestore repair rtcp reno m4 man doc po debian build > > SUBDIRS = include $(LIB_SUBDIRS) $(TOOL_SUBDIRS) > > Index: xfsprogs-dev/man/man8/xfs_reno.8 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfsprogs-dev/man/man8/xfs_reno.8 2009-05-28 13:56:08.000000000 +0000 > @@ -0,0 +1,117 @@ > +.TH xfs_reno 8 > +.SH NAME > +xfs_reno \- renumber XFS inodes > +.SH SYNOPSIS > +.B xfs_reno > +[ > +.B \-fnpqv > +] [ > +.B \-P > +.I interval > +] > +.I path > +.br > +.B xfs_reno \-r > +.I recover_file > +.SH DESCRIPTION > +.B xfs_reno > +is applicable only to XFS filesystems. > +.PP > +.B xfs_reno > +renumbers inodes. XFS supports 64-bit inode numbers, although by > +default it will avoid creating inodes with numbers greater than > +what can be contained within a 32-bit number. If a filesystem does > +contain inode numbers greater than 32-bits, then this can conflict with > +applications that do not support them. > +To recover from this situation previously, affected files would need > +to be copied (and so get a new inode number) and the old version > +removed. This can be time consuming and impractical for very large > +files and filesystems. > +.B xfs_reno > +can be used to renumber such inodes quickly. > +.B xfs_reno > +will copy the inodes of affected files and move the data from the old > +inode to the new without having to copy the data. > +.B xfs_reno > +relies on XFS in the kernel to allocate a new inode number, so if the > +filesystem has been mounted with the > +.I inode64 > +mount option, the new inodes will quite possibly have inode numbers > +greater than 32-bits. > +.PP > +.B xfs_reno > +should only be used on a filesystem where it is necessary to > +renumber inodes. Use of > +.B xfs_reno > +on a regular basis is > +.IR "not recommended" . > +Apart from application compatibility, there is no particular advantage > +to be had from renumbering inodes. > +.PP > +.B xfs_reno > +works by traversing a directory tree, scanning all the directories > +and noting which files require renumbering. Once the scanning phase > +is done, it will process the appropriate files and directories. The > +directory's absolute pathname must be given to > +.BR xfs_reno . > +The following options are accepted by > +.BR xfs_reno . > +.TP > +.B \-f > +Force conversion on all inodes, rather than just those with a 64-bit > +inode number. This is not particularly useful except for debugging > +purposes. > +.TP > +.B \-n > +Do nothing, perform a trial run. > +.TP > +.B \-v > +Increases the verbosity of progress and error messages. Additional > +.BR \-v 's > +can be used to further increase verbosity. > +.TP > +.B \-q > +Do not report progress, only errors. > +.TP > +.B \-p > +Show progress status. > +.TP > +.BI \-P " seconds" > +Set the interval for the progress status in seconds. The default is 1 > +second. > +.TP > +.B \-r > +Recover from an interrupted run. If > +.B xfs_reno > +is interrupted, it will leave a file called > +.I xfs_reno.recover > +in the directory specified on the command line. This file will > +contain enough information so that > +.B xfs_reno > +can either finish processing the file it was working on when > +interrupted or back out the last change it made, depending on how far > +through the process it had progressed. > +.B xfs_reno > +will only recover the single file it was working on so it will need > +to be run again on the directory to be sure that all the appropriate > +inodes have been converted. > +.SH EXAMPLES > +To renumber inodes with 64-bit inode numbers: > +.IP > +.B # xfs_reno -p /path/to/directory > +.PP > +To recover from an interrupted run: > +.IP > +.B # xfs_reno -r /path/to/directory/xfs_reno.recover > +.PP > +.SH FILES > +.PD > +.TP > +.I /path/xfs_reno.recover > +records the state where renumbering was interrupted. > +.PD > +.SH SEE ALSO > +.BR xfs_fsr (8), > +.BR xfs_ncheck (8), > +.BR fstab (5), > +.BR xfs (5). > Index: xfsprogs-dev/reno/Makefile > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfsprogs-dev/reno/Makefile 2009-05-28 13:56:08.000000000 +0000 > @@ -0,0 +1,19 @@ > +# > +# Copyright (c) 2007 Silicon Graphics, Inc. All Rights Reserved. > +# > + > +TOPDIR = .. > +include $(TOPDIR)/include/builddefs > + > +LTCOMMAND = xfs_reno > +CFILES = xfs_reno.c > +LLDLIBS = $(LIBATTR) > + > +default: $(LTCOMMAND) > + > +include $(BUILDRULES) > + > +install: default > + $(INSTALL) -m 755 -d $(PKG_BIN_DIR) > + $(LTINSTALL) -m 755 $(LTCOMMAND) $(PKG_BIN_DIR) > +install-dev: > Index: xfsprogs-dev/reno/xfs_reno.c > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfsprogs-dev/reno/xfs_reno.c 2009-05-28 15:11:42.000000000 +0000 > @@ -0,0 +1,2040 @@ > +/* > + * Copyright (c) 2007 Silicon Graphics, Inc. > + * All Rights Reserved. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it would be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write the Free Software Foundation, > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +/* > + * xfs_reno - renumber 64-bit inodes > + * > + * xfs_reno [-f] [-n] [-p] [-q] [-v] [-P seconds] path ... > + * xfs_reno [-r] path ... > + * > + * Renumbers all inodes > 32 bits into 32 bit space. Requires the filesytem > + * to be mounted with inode32. > + * > + * -f force conversion on all inodes rather than just > + * those with a 64bit inode number. > + * -n nothing, do not renumber inodes > + * -p show progress status. > + * -q quiet, do not report progress, only errors. > + * -v verbose, more -v's more verbose. > + * -P seconds set the interval for the progress status in seconds. > + * -r recover from an interrupted run. > + */ > + > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define ATTRBUFSIZE 1024 > + > +#define SCAN_PHASE 0x00 > +#define DIR_PHASE 0x10 /* nothing done or all done */ > +#define DIR_PHASE_1 0x11 /* target dir created */ > +#define DIR_PHASE_2 0x12 /* temp dir created */ > +#define DIR_PHASE_3 0x13 /* attributes backed up to temp */ > +#define DIR_PHASE_4 0x14 /* dirents moved to target dir */ > +#define DIR_PHASE_5 0x15 /* attributes applied to target dir */ > +#define DIR_PHASE_6 0x16 /* src dir removed */ > +#define DIR_PHASE_7 0x17 /* temp dir removed */ > +#define DIR_PHASE_MAX 0x17 > +#define FILE_PHASE 0x20 /* nothing done or all done */ > +#define FILE_PHASE_1 0x21 /* temp file created */ > +#define FILE_PHASE_2 0x22 /* swapped extents */ > +#define FILE_PHASE_3 0x23 /* unlinked source */ > +#define FILE_PHASE_4 0x24 /* renamed temp to source name */ > +#define FILE_PHASE_MAX 0x24 > +#define SLINK_PHASE 0x30 /* nothing done or all done */ > +#define SLINK_PHASE_1 0x31 /* temp symlink created */ > +#define SLINK_PHASE_2 0x32 /* symlink attrs copied */ > +#define SLINK_PHASE_3 0x33 /* unlinked source */ > +#define SLINK_PHASE_4 0x34 /* renamed temp to source name */ > +#define SLINK_PHASE_MAX 0x34 > + > +static void update_recoverfile(void); > +#define SET_PHASE(x) (cur_phase = x, update_recoverfile()) > + > +#define LOG_ERR 0 > +#define LOG_NORMAL 1 > +#define LOG_INFO 2 > +#define LOG_DEBUG 3 > +#define LOG_NITTY 4 > + > +#define NH_BUCKETS 65536 > +#define NH_HASH(ino) (nodehash + ((ino) % NH_BUCKETS)) > + > +typedef struct { > + xfs_ino_t ino; > + int ftw_flags; > + nlink_t numpaths; > + char **paths; > +} bignode_t; > + > +typedef struct { > + bignode_t *nodes; > + uint64_t listlen; > + uint64_t lastnode; > +} nodelist_t; > + > +static const char *cmd_prefix = "xfs_reno_"; > + > +static char *progname; > +static int log_level = LOG_NORMAL; > +static int force_all; > +static nodelist_t *nodehash; > +static int realuid; > +static uint64_t numdirnodes; > +static uint64_t numfilenodes; > +static uint64_t numslinknodes; > +static uint64_t numdirsdone; > +static uint64_t numfilesdone; > +static uint64_t numslinksdone; > +static int poll_interval; > +static time_t starttime; > +static bignode_t *cur_node; > +static char *cur_target; > +static char *cur_temp; > +static int cur_phase; > +static int highest_numpaths; > +static char *recover_file; > +static int recover_fd; > +static volatile int poll_output; > +static int global_rval; > + > +/* > + * message handling > + */ > +static void > +log_message( > + int level, > + char *fmt, ...) > +{ > + char buf[1024]; > + va_list ap; > + > + if (log_level < level) > + return; > + > + va_start(ap, fmt); > + vsnprintf(buf, 1024, fmt, ap); > + va_end(ap); > + > + printf("%c%s: %s\n", poll_output ? '\n' : '\r', progname, buf); > + poll_output = 0; > +} > + > +static void > +err_message( > + char *fmt, ...) > +{ > + char buf[1024]; > + va_list ap; > + > + va_start(ap, fmt); > + vsnprintf(buf, 1024, fmt, ap); > + va_end(ap); > + > + fprintf(stderr, "%c%s: %s\n", poll_output ? '\n' : '\r', progname, buf); > + poll_output = 0; > +} > + > +static void > +err_nomem(void) > +{ > + err_message(_("Out of memory")); > +} > + > +static void > +err_open( > + const char *s) > +{ > + err_message(_("Cannot open %s: %s"), s, strerror(errno)); > +} > + > +static void > +err_not_xfs( > + const char *s) > +{ > + err_message(_("%s is not on an XFS filesystem"), s); > +} > + > +static void > +err_stat( > + const char *s) > +{ > + err_message(_("Cannot stat %s: %s\n"), s, strerror(errno)); > +} > + > +/* > + * usage message > + */ > +static void > +usage(void) > +{ > + fprintf(stderr, _("%s [-fnpqv] [-P ] [-r] \n"), > + progname); > + exit(1); > +} > + > + > +/* > + * XFS interface functions > + */ > + > +static int > +xfs_bulkstat_single(int fd, xfs_ino_t *lastip, xfs_bstat_t *ubuffer) > +{ > + xfs_fsop_bulkreq_t bulkreq; > + > + bulkreq.lastip = (__u64 *)lastip; > + bulkreq.icount = 1; > + bulkreq.ubuffer = ubuffer; > + bulkreq.ocount = NULL; > + return ioctl(fd, XFS_IOC_FSBULKSTAT_SINGLE, &bulkreq); > +} > + > +static int > +xfs_swapext(int fd, xfs_swapext_t *sx) > +{ > + return ioctl(fd, XFS_IOC_SWAPEXT, sx); > +} > + > +static int > +xfs_getxattr(int fd, struct fsxattr *attr) > +{ > + return ioctl(fd, XFS_IOC_FSGETXATTR, attr); > +} > + > +static int > +xfs_setxattr(int fd, struct fsxattr *attr) > +{ > + return ioctl(fd, XFS_IOC_FSSETXATTR, attr); > +} > + > +/* > + * A hash table of inode numbers and associated paths. > + */ > +static nodelist_t * > +init_nodehash(void) > +{ > + int i; > + > + nodehash = calloc(NH_BUCKETS, sizeof(nodelist_t)); > + if (nodehash == NULL) { > + err_nomem(); > + return NULL; > + } > + > + for (i = 0; i < NH_BUCKETS; i++) { > + nodehash[i].nodes = NULL; > + nodehash[i].lastnode = 0; > + nodehash[i].listlen = 0; > + } > + > + return nodehash; > +} > + > +static void > +free_nodehash(void) > +{ > + int i, j, k; > + > + for (i = 0; i < NH_BUCKETS; i++) { > + bignode_t *nodes = nodehash[i].nodes; > + > + for (j = 0; j < nodehash[i].lastnode; j++) { > + for (k = 0; k < nodes[j].numpaths; k++) { > + free(nodes[j].paths[k]); > + } > + free(nodes[j].paths); > + } > + > + free(nodes); > + } > + free(nodehash); > +} > + > +static nlink_t > +add_path( > + bignode_t *node, > + const char *path) > +{ > + node->paths = realloc(node->paths, > + sizeof(char *) * (node->numpaths + 1)); > + if (node->paths == NULL) { > + err_nomem(); > + exit(1); > + } > + > + node->paths[node->numpaths] = strdup(path); > + if (node->paths[node->numpaths] == NULL) { > + err_nomem(); > + exit(1); > + } > + > + node->numpaths++; > + if (node->numpaths > highest_numpaths) > + highest_numpaths = node->numpaths; > + > + return node->numpaths; > +} > + > +static bignode_t * > +add_node( > + nodelist_t *list, > + xfs_ino_t ino, > + int ftw_flags, > + const char *path) > +{ > + bignode_t *node; > + > + if (list->lastnode >= list->listlen) { > + list->listlen += 500; > + list->nodes = realloc(list->nodes, > + sizeof(bignode_t) * list->listlen); > + if (list->nodes == NULL) { > + err_nomem(); > + return NULL; > + } > + } > + > + node = list->nodes + list->lastnode; > + > + node->ino = ino; > + node->ftw_flags = ftw_flags; > + node->paths = NULL; > + node->numpaths = 0; > + add_path(node, path); > + > + list->lastnode++; > + > + return node; > +} > + > +static bignode_t * > +find_node( > + xfs_ino_t ino) > +{ > + int i; > + nodelist_t *nodelist; > + bignode_t *nodes; > + > + nodelist = NH_HASH(ino); > + nodes = nodelist->nodes; > + > + for(i = 0; i < nodelist->lastnode; i++) { > + if (nodes[i].ino == ino) { > + return &nodes[i]; > + } > + } > + > + return NULL; > +} > + > +static bignode_t * > +add_node_path( > + xfs_ino_t ino, > + int ftw_flags, > + const char *path) > +{ > + nodelist_t *nodelist; > + bignode_t *node; > + > + log_message(LOG_NITTY, "add_node_path: ino %llu, path %s", ino, path); > + > + node = find_node(ino); > + if (node == NULL) { > + nodelist = NH_HASH(ino); > + return add_node(nodelist, ino, ftw_flags, path); > + } > + > + add_path(node, path); > + return node; > +} > + > +static void > +dump_node( > + char *msg, > + bignode_t *node) > +{ > + int k; > + > + if (log_level < LOG_DEBUG) > + return; > + > + log_message(LOG_DEBUG, "%s: %llu %llu %s", msg, node->ino, > + node->numpaths, node->paths[0]); > + > + for (k = 1; k < node->numpaths; k++) > + log_message(LOG_DEBUG, "\t%s", node->paths[k]); > +} > + > +static void > +dump_nodehash(void) > +{ > + int i, j; > + > + if (log_level < LOG_NITTY) > + return; > + > + for (i = 0; i < NH_BUCKETS; i++) { > + bignode_t *nodes = nodehash[i].nodes; > + for (j = 0; j < nodehash[i].lastnode; j++, nodes++) > + dump_node("nodehash", nodes); > + } > +} > + > +static int > +for_all_nodes( > + int (*fn)(bignode_t *node), > + int ftw_flags, > + int quit_on_error) > +{ > + int i; > + int j; > + int rval = 0; > + > + for (i = 0; i < NH_BUCKETS; i++) { > + bignode_t *nodes = nodehash[i].nodes; > + > + for (j = 0; j < nodehash[i].lastnode; j++, nodes++) { > + if (nodes->ftw_flags == ftw_flags) { > + rval = fn(nodes); > + if (rval && quit_on_error) > + goto quit; > + } > + } > + } > + > +quit: > + return rval; > +} > + > +/* > + * Adds appropriate files to the inode hash table > + */ > +static int > +nftw_addnodes( > + const char *path, > + const struct stat64 *st, > + int flags, > + struct FTW *sntfw) > +{ > + if (st->st_ino <= XFS_MAXINUMBER_32 && !force_all) > + return 0; > + > + if (flags == FTW_F) > + numfilenodes++; > + else if (flags == FTW_D) > + numdirnodes++; > + else if (flags == FTW_SL) > + numslinknodes++; > + else > + return 0; > + > + add_node_path(st->st_ino, flags, path); > + > + return 0; > +} > + > +/* > + * Attribute cloning code - most of this is here because attr_copy does not > + * let us pick and choose which attributes we want to copy. > + */ > + > +attr_multiop_t attr_ops[ATTR_MAX_MULTIOPS]; > + > +/* > + * Grab attributes specified in attr_ops from source file and write them > + * out on the destination file. > + */ > + > +static int > +attr_replicate( > + char *source, > + char *target, > + int count) > +{ > + int j, k; > + > + if (attr_multi(source, attr_ops, count, ATTR_DONTFOLLOW) < 0) > + return -1; > + > + for (k = 0; k < count; k++) { > + if (attr_ops[k].am_error) { > + err_message(_("Error %d getting attribute"), > + attr_ops[k].am_error); > + break; > + } > + attr_ops[k].am_opcode = ATTR_OP_SET; > + } > + if (attr_multi(target, attr_ops, k, ATTR_DONTFOLLOW) < 0) > + err_message("on attr_multif set"); > + for (j = 0; j < k; j++) { > + if (attr_ops[j].am_error) { > + err_message(_("Error %d setting attribute"), > + attr_ops[j].am_error); > + return -1; > + } > + } > + > + return 0; > +} > + > +/* > + * Copy all the attributes specified from src to dst. > + */ > + > +static int > +attr_clone_copy( > + char *source, > + char *target, > + char *list_buf, > + char *attr_buf, > + int buf_len, > + int flags) > +{ > + attrlist_t *alist; > + attrlist_ent_t *attr; > + attrlist_cursor_t cursor; > + int space, i, j; > + char *ptr; > + > + bzero((char *)&cursor, sizeof(cursor)); > + do { > + if (attr_list(source, list_buf, ATTRBUFSIZE, > + flags | ATTR_DONTFOLLOW, &cursor) < 0) { > + err_message("on attr_listf"); > + return -1; > + } > + > + alist = (attrlist_t *)list_buf; > + > + space = buf_len; > + ptr = attr_buf; > + for (j = 0, i = 0; i < alist->al_count; i++) { > + attr = ATTR_ENTRY(list_buf, i); > + if (space < attr->a_valuelen) { > + if (attr_replicate(source, target, j) < 0) > + return -1; > + j = 0; > + space = buf_len; > + ptr = attr_buf; > + } > + attr_ops[j].am_opcode = ATTR_OP_GET; > + attr_ops[j].am_attrname = attr->a_name; > + attr_ops[j].am_attrvalue = ptr; > + attr_ops[j].am_length = (int) attr->a_valuelen; > + attr_ops[j].am_flags = flags; > + attr_ops[j].am_error = 0; > + j++; > + ptr += attr->a_valuelen; > + space -= attr->a_valuelen; > + } > + > + log_message(LOG_NITTY, "copying attribute %d", i); > + > + if (j) { > + if (attr_replicate(source, target, j) < 0) > + return -1; > + } > + > + } while (alist->al_more); > + > + return 0; > +} > + > +static int > +clone_attribs( > + char *source, > + char *target) > +{ > + char list_buf[ATTRBUFSIZE]; > + char *attr_buf; > + int rval; > + > + attr_buf = malloc(ATTR_MAX_VALUELEN * 2); > + if (attr_buf == NULL) { > + err_nomem(); > + return -1; > + } > + rval = attr_clone_copy(source, target, list_buf, attr_buf, > + ATTR_MAX_VALUELEN * 2, 0); > + if (rval == 0) > + rval = attr_clone_copy(source, target, list_buf, attr_buf, > + ATTR_MAX_VALUELEN * 2, ATTR_ROOT); > + if (rval == 0) > + rval = attr_clone_copy(source, target, list_buf, attr_buf, > + ATTR_MAX_VALUELEN * 2, ATTR_SECURE); > + free(attr_buf); > + return rval; > +} > + > +static int > +dup_attributes( > + char *source, > + int sfd, > + char *target, > + int tfd) > +{ > + struct stat64 st; > + struct timeval tv[2]; > + struct fsxattr fsx; > + > + if (fstat64(sfd, &st) < 0) { > + err_stat(source); > + return -1; > + } > + > + if (xfs_getxattr(sfd, &fsx) < 0) { > + err_stat(source); > + return -1; > + } > + > + tv[0].tv_sec = st.st_atim.tv_sec; > + tv[0].tv_usec = st.st_atim.tv_nsec / 1000; > + tv[1].tv_sec = st.st_mtim.tv_sec; > + tv[1].tv_usec = st.st_mtim.tv_nsec / 1000; > + > + if (futimes(tfd, tv) < 0) > + err_message(_("%s: Cannot update target times"), target); > + > + if (fchown(tfd, st.st_uid, st.st_gid) < 0) { > + err_message(_("%s: Cannot change target ownership to " > + "uid(%d) gid(%d)"), target, > + st.st_uid, st.st_gid); > + > + if (fchmod(tfd, st.st_mode & ~(S_ISUID | S_ISGID)) < 0) > + err_message(_("%s: Cannot change target mode " > + "to (%o)"), target, st.st_mode); > + } else if (fchmod(tfd, st.st_mode) < 0) > + err_message(_("%s: Cannot change target mode to (%o)"), > + target, st.st_mode); > + > + if (xfs_setxattr(tfd, &fsx) < 0) > + err_message(_("%s: Cannet set target extended " > + "attributes"), target); > + > + return clone_attribs(source, target); > +} > + > +static int > +move_dirents( > + char *srcpath, > + char *targetpath, > + int *move_count) > +{ > + int rval = 0; > + DIR *srcd; > + struct dirent64 *dp; > + char srcname[PATH_MAX]; > + char targetname[PATH_MAX]; > + > + *move_count = 0; > + > + srcd = opendir(srcpath); > + if (srcd == NULL) { > + err_open(srcpath); > + return 1; > + } > + > + while ((dp = readdir64(srcd)) != NULL) { > + if (dp->d_ino == 0 || !strcmp(dp->d_name, ".") || > + !strcmp(dp->d_name, "..")) > + continue; > + > + if (strlen(srcpath) + 1 + strlen(dp->d_name) >= > + sizeof(srcname) - 1) { > + > + err_message(_("%s/%s: Name too long"), srcpath, > + dp->d_name); > + rval = 1; > + goto quit; > + } > + > + sprintf(srcname, "%s/%s", srcpath, dp->d_name); > + sprintf(targetname, "%s/%s", targetpath, dp->d_name); > + > + rval = rename(srcname, targetname); > + if (rval != 0) { > + err_message(_("failed to rename: \'%s\' to \'%s\'"), > + srcname, targetname); > + goto quit; > + } > + > + log_message(LOG_DEBUG, "rename %s -> %s", srcname, targetname); > + > + (*move_count)++; > + } > + > +quit: > + closedir(srcd); > + return rval; > +} > + > +static int > +process_dir( > + bignode_t *node) > +{ > + int sfd = -1; > + int tfd = -1; > + int targetfd = -1; > + int rval = 0; > + int move_count = 0; > + char *srcname = NULL; > + char *pname = NULL; > + struct stat64 s1; > + struct fsxattr fsx; > + char target[PATH_MAX] = ""; > + > + SET_PHASE(DIR_PHASE); > + > + dump_node("directory", node); > + > + cur_node = node; > + srcname = node->paths[0]; > + > + if (stat64(srcname, &s1) < 0) { > + if (errno != ENOENT) { > + err_stat(srcname); > + global_rval |= 2; > + } > + goto quit; > + } > + if (s1.st_ino <= XFS_MAXINUMBER_32 && !force_all) { > + /* > + * This directory has already changed ino's, probably due > + * to being moved during processing of a parent directory. > + */ > + log_message(LOG_DEBUG, "process_dir: skipping %s", srcname); > + goto quit; > + } > + > + rval = 1; > + > + sfd = open(srcname, O_RDONLY); > + if (sfd < 0) { > + err_open(srcname); > + goto quit; > + } > + > + if (!platform_test_xfs_fd(sfd)) { > + err_not_xfs(srcname); > + goto quit; > + } > + > + if (xfs_getxattr(sfd, &fsx) < 0) { > + err_message(_("failed to get inode attrs: %s"), srcname); > + goto quit; > + } > + if (fsx.fsx_xflags & (XFS_XFLAG_IMMUTABLE | XFS_XFLAG_APPEND)) { > + err_message(_("%s: immutable/append, ignoring"), srcname); > + global_rval |= 2; > + rval = 0; > + goto quit; > + } > + > + /* mkdir parent/target */ > + pname = strdup(srcname); > + if (pname == NULL) { > + err_nomem(); > + goto quit; > + } > + dirname(pname); > + sprintf(target, "%s/%sXXXXXX", pname, cmd_prefix); > + if (mkdtemp(target) == NULL) { > + err_message(_("Unable to create directory copy: %s"), srcname); > + goto quit; > + } > + SET_PHASE(DIR_PHASE_1); > + > + cur_target = strdup(target); > + if (!cur_target) { > + err_nomem(); > + goto quit; > + } > + > + sprintf(target, "%s/%sXXXXXX", pname, cmd_prefix); > + if (mkdtemp(target) == NULL) { > + err_message(_("unable to create tmp directory copy")); > + goto quit; > + } > + SET_PHASE(DIR_PHASE_2); > + > + cur_temp = strdup(target); > + if (!cur_temp) { > + err_nomem(); > + goto quit; > + } > + > + tfd = open(cur_temp, O_RDONLY); > + if (tfd < 0) { > + err_open(cur_temp); > + goto quit; > + } > + > + targetfd = open(cur_target, O_RDONLY); > + if (tfd < 0) { > + err_open(cur_target); > + goto quit; > + } > + > + > + /* copy timestamps, attribs and EAs, to cur_temp */ > + rval = dup_attributes(srcname, sfd, cur_temp, tfd); > + if (rval != 0) { > + err_message(_("unable to duplicate directory attributes: %s"), > + srcname); > + goto quit_unlink; > + } > + > + SET_PHASE(DIR_PHASE_3); > + > + /* move src dirents to cur_target (this changes timestamps on src) */ > + rval = move_dirents(srcname, cur_target, &move_count); > + if (rval != 0) { > + err_message(_("unable to move directory contents: %s to %s"), > + srcname, cur_target); > + /* uh oh, move everything back... */ > + if (move_count > 0) > + goto quit_undo; > + } > + > + SET_PHASE(DIR_PHASE_4); > + > + /* copy timestamps, attribs and EAs from cur_temp to cur_target */ > + rval = dup_attributes(cur_temp, tfd, cur_target, targetfd); > + if (rval != 0) { > + err_message(_("unable to duplicate directory attributes: %s"), > + cur_temp); > + goto quit_unlink; > + } > + > + SET_PHASE(DIR_PHASE_5); > + > + /* rmdir src */ > + rval = rmdir(srcname); > + if (rval != 0) { > + err_message(_("unable to remove directory: %s"), srcname); > + goto quit_undo; > + } > + > + SET_PHASE(DIR_PHASE_6); > + > + rval = rmdir(cur_temp); > + if (rval != 0) > + err_message(_("unable to remove tmp directory: %s"), cur_temp); > + > + SET_PHASE(DIR_PHASE_7); > + > + /* rename cur_target src */ > + rval = rename(cur_target, srcname); > + if (rval != 0) { > + /* > + * we can't abort since the src dir is now gone. > + * let the admin clean this one up > + */ > + err_message(_("unable to rename directory: %s to %s"), > + cur_target, srcname); > + } > + goto quit; > + > + quit_undo: > + if (move_dirents(cur_target, srcname, &move_count) != 0) { > + /* oh, dear lord... let the admin clean this one up */ > + err_message(_("unable to move directory contents back: %s to %s"), > + cur_target, srcname); > + goto quit; > + } > + SET_PHASE(DIR_PHASE_3); > + > + quit_unlink: > + rmdir(cur_target); > + rmdir(cur_temp); > + > + quit: > + > + SET_PHASE(DIR_PHASE); > + > + if (sfd >= 0) > + close(sfd); > + if (tfd >= 0) > + close(tfd); > + if (targetfd >= 0) > + close(targetfd); > + > + free(pname); > + free(cur_target); > + free(cur_temp); > + > + cur_target = NULL; > + cur_temp = NULL; > + cur_node = NULL; > + numdirsdone++; > + return rval; > +} > + > +static int > +process_file( > + bignode_t *node) > +{ > + int sfd = -1; > + int tfd = -1; > + int i = 0; > + int rval = 0; > + struct stat64 s1; > + char *srcname = NULL; > + char *pname = NULL; > + xfs_swapext_t sx; > + xfs_bstat_t bstatbuf; > + struct fsxattr fsx; > + char target[PATH_MAX] = ""; > + > + SET_PHASE(FILE_PHASE); > + > + dump_node("file", node); > + > + cur_node = node; > + srcname = node->paths[0]; > + > + bzero(&s1, sizeof(s1)); > + bzero(&bstatbuf, sizeof(bstatbuf)); > + bzero(&sx, sizeof(sx)); > + > + if (stat64(srcname, &s1) < 0) { > + if (errno != ENOENT) { > + err_stat(srcname); > + global_rval |= 2; > + } > + goto quit; > + } > + if (s1.st_ino <= XFS_MAXINUMBER_32 && !force_all) > + /* this file has changed, and no longer needs processing */ > + goto quit; > + > + /* open and sync source */ > + sfd = open(srcname, O_RDWR | O_DIRECT); > + if (sfd < 0) { > + err_open(srcname); > + rval = 1; > + goto quit; > + } > + if (!platform_test_xfs_fd(sfd)) { > + err_not_xfs(srcname); > + rval = 1; > + goto quit; > + } > + if (fsync(sfd) < 0) { > + err_message(_("sync failed: %s: %s"), > + srcname, strerror(errno)); > + rval = 1; > + goto quit; > + } > + > + > + /* > + * Check if a mandatory lock is set on the file to try and > + * avoid blocking indefinitely on the reads later. Note that > + * someone could still set a mandatory lock after this check > + * but before all reads have completed to block xfs_reno reads. > + * This change just closes the window a bit. > + */ > + if ((s1.st_mode & S_ISGID) && !(s1.st_mode & S_IXGRP)) { > + struct flock fl; > + > + fl.l_type = F_RDLCK; > + fl.l_whence = SEEK_SET; > + fl.l_start = (off_t)0; > + fl.l_len = 0; > + if (fcntl(sfd, F_GETLK, &fl) < 0 ) { > + if (log_level >= LOG_DEBUG) > + err_message("locking check failed: %s", > + srcname); > + global_rval |= 2; > + goto quit; > + } > + if (fl.l_type != F_UNLCK) { > + if (log_level >= LOG_DEBUG) > + err_message("mandatory lock: %s: ignoring", > + srcname); > + global_rval |= 2; > + goto quit; > + } > + } > + > + if (xfs_getxattr(sfd, &fsx) < 0) { > + err_message(_("failed to get inode attrs: %s"), srcname); > + rval = 1; > + goto quit; > + } > + if (fsx.fsx_xflags & (XFS_XFLAG_IMMUTABLE | XFS_XFLAG_APPEND)) { > + err_message(_("%s: immutable/append, ignoring"), srcname); > + global_rval |= 2; > + goto quit; > + } > + > + rval = 1; > + > + if (realuid != 0 && realuid != s1.st_uid) { > + errno = EACCES; > + err_open(srcname); > + goto quit; > + } > + > + /* creat target */ > + pname = strdup(srcname); > + if (pname == NULL) { > + err_nomem(); > + goto quit; > + } > + dirname(pname); > + sprintf(target, "%s/%sXXXXXX", pname, cmd_prefix); > + tfd = mkstemp(target); > + if (tfd < 0) { > + err_message("unable to create file copy"); > + goto quit; > + } > + cur_target = strdup(target); > + if (cur_target == NULL) { > + err_nomem(); > + goto quit; > + } > + > + SET_PHASE(FILE_PHASE_1); > + > + /* Setup direct I/O */ > + if (fcntl(tfd, F_SETFL, O_DIRECT) < 0 ) { > + err_message(_("could not set O_DIRECT for %s on tmp: %s"), > + srcname, target); > + unlink(target); > + goto quit; > + } > + > + /* copy attribs & EAs to target */ > + if (dup_attributes(srcname, sfd, target, tfd) != 0) { > + err_message(_("unable to duplicate file attributes: %s"), > + srcname); > + unlink(target); > + goto quit; > + } > + > + if (xfs_bulkstat_single(sfd, &s1.st_ino, &bstatbuf) < 0) { > + err_message(_("unable to bulkstat source file: %s"), > + srcname); > + unlink(target); > + goto quit; > + } > + > + if (bstatbuf.bs_ino != s1.st_ino) { > + err_message(_("bulkstat of source file returned wrong inode: %s"), > + srcname); > + unlink(target); > + goto quit; > + } > + > + ftruncate64(tfd, bstatbuf.bs_size); > + > + /* swapextents src target */ > + sx.sx_stat = bstatbuf; /* struct copy */ > + sx.sx_version = XFS_SX_VERSION; > + sx.sx_fdtarget = sfd; > + sx.sx_fdtmp = tfd; > + sx.sx_offset = 0; > + sx.sx_length = bstatbuf.bs_size; > + > + /* Swap the extents */ > + rval = xfs_swapext(sfd, &sx); > + if (rval < 0) { > + if (log_level >= LOG_DEBUG) { > + switch (errno) { > + case ENOTSUP: > + err_message("%s: file type not supported", > + srcname); > + break; > + case EFAULT: > + /* The file has changed since we started the copy */ > + err_message("%s: file modified, " > + "inode renumber aborted: %ld", > + srcname, bstatbuf.bs_size); > + break; > + case EBUSY: > + /* Timestamp has changed or mmap'ed file */ > + err_message("%s: file busy", srcname); > + break; > + default: > + err_message(_("Swap extents failed: %s: %s"), > + srcname, strerror(errno)); > + break; > + } > + } else > + err_message(_("Swap extents failed: %s: %s"), > + srcname, strerror(errno)); > + goto quit; > + } > + > + if (bstatbuf.bs_dmevmask | bstatbuf.bs_dmstate) { > + struct fsdmidata fssetdm; > + > + /* Set the DMAPI Fields. */ > + fssetdm.fsd_dmevmask = bstatbuf.bs_dmevmask; > + fssetdm.fsd_padding = 0; > + fssetdm.fsd_dmstate = bstatbuf.bs_dmstate; > + > + if (ioctl(tfd, XFS_IOC_FSSETDM, (void *)&fssetdm ) < 0) > + err_message(_("attempt to set DMI attributes " > + "of %s failed"), target); > + } > + > + SET_PHASE(FILE_PHASE_2); > + > + /* unlink src */ > + rval = unlink(srcname); > + if (rval != 0) { > + err_message(_("unable to remove file: %s"), srcname); > + goto quit; > + } > + > + SET_PHASE(FILE_PHASE_3); > + > + /* rename target src */ > + rval = rename(target, srcname); > + if (rval != 0) { > + /* > + * we can't abort since the src file is now gone. > + * let the admin clean this one up > + */ > + err_message(_("unable to rename file: %s to %s"), > + target, srcname); > + goto quit; > + } > + > + SET_PHASE(FILE_PHASE_4); > + > + /* for each hardlink, unlink and creat pointing to target */ > + for (i = 1; i < node->numpaths; i++) { > + /* unlink src */ > + rval = unlink(node->paths[i]); > + if (rval != 0) { > + err_message(_("unable to remove file: %s"), > + node->paths[i]); > + goto quit; > + } > + > + rval = link(srcname, node->paths[i]); > + if (rval != 0) { > + err_message("unable to link to file: %s", srcname); > + goto quit; > + } > + numfilesdone++; > + } > + > + quit: > + cur_node = NULL; > + > + SET_PHASE(FILE_PHASE); > + > + if (sfd >= 0) > + close(sfd); > + if (tfd >= 0) > + close(tfd); > + > + free(pname); > + free(cur_target); > + > + cur_target = NULL; > + > + numfilesdone++; > + return rval; > +} > + > + > +static int > +process_slink( > + bignode_t *node) > +{ > + int i = 0; > + int rval = 0; > + struct stat64 st; > + char *srcname = NULL; > + char *pname = NULL; > + char target[PATH_MAX] = ""; > + char linkbuf[PATH_MAX]; > + > + SET_PHASE(SLINK_PHASE); > + > + dump_node("symlink", node); > + > + cur_node = node; > + srcname = node->paths[0]; > + > + if (lstat64(srcname, &st) < 0) { > + if (errno != ENOENT) { > + err_stat(srcname); > + global_rval |= 2; > + } > + goto quit; > + } > + if (st.st_ino <= XFS_MAXINUMBER_32 && !force_all) > + /* this file has changed, and no longer needs processing */ > + goto quit; > + > + rval = 1; > + > + i = readlink(srcname, linkbuf, sizeof(linkbuf) - 1); > + if (i < 0) { > + err_message(_("unable to read symlink: %s"), srcname); > + goto quit; > + } > + linkbuf[i] = '\0'; > + > + if (realuid != 0 && realuid != st.st_uid) { > + errno = EACCES; > + err_open(srcname); > + goto quit; > + } > + > + /* create target */ > + pname = strdup(srcname); > + if (pname == NULL) { > + err_nomem(); > + goto quit; > + } > + dirname(pname); > + > + sprintf(target, "%s/%sXXXXXX", pname, cmd_prefix); > + if (mktemp(target) == NULL) { > + err_message(_("unable to create temp symlink name")); > + goto quit; > + } > + cur_target = strdup(target); > + if (cur_target == NULL) { > + err_nomem(); > + goto quit; > + } > + > + if (symlink(linkbuf, target) != 0) { > + err_message(_("unable to create symlink: %s"), target); > + goto quit; > + } > + > + SET_PHASE(SLINK_PHASE_1); > + > + /* copy ownership & EAs to target */ > + if (lchown(target, st.st_uid, st.st_gid) < 0) { > + err_message(_("%s: Cannot change target ownership to " > + "uid(%d) gid(%d)"), target, > + st.st_uid, st.st_gid); > + unlink(target); > + goto quit; > + } > + > + if (clone_attribs(srcname, target) != 0) { > + err_message(_("unable to duplicate symlink attributes: %s"), > + srcname); > + unlink(target); > + goto quit; > + } > + > + SET_PHASE(SLINK_PHASE_2); > + > + /* unlink src */ > + rval = unlink(srcname); > + if (rval != 0) { > + err_message(_("unable to remove symlink: %s"), srcname); > + goto quit; > + } > + > + SET_PHASE(SLINK_PHASE_3); > + > + /* rename target src */ > + rval = rename(target, srcname); > + if (rval != 0) { > + /* > + * we can't abort since the src file is now gone. > + * let the admin clean this one up > + */ > + err_message(_("unable to rename symlink: %s to %s"), > + target, srcname); > + goto quit; > + } > + > + SET_PHASE(SLINK_PHASE_4); > + > + /* for each hardlink, unlink and creat pointing to target */ > + for (i = 1; i < node->numpaths; i++) { > + /* unlink src */ > + rval = unlink(node->paths[i]); > + if (rval != 0) { > + err_message(_("unable to remove symlink: %s"), > + node->paths[i]); > + goto quit; > + } > + > + rval = link(srcname, node->paths[i]); > + if (rval != 0) { > + err_message("unable to link to symlink: %s", srcname); > + goto quit; > + } > + numslinksdone++; > + } > + > + quit: > + cur_node = NULL; > + > + SET_PHASE(SLINK_PHASE); > + > + free(pname); > + free(cur_target); > + > + cur_target = NULL; > + > + numslinksdone++; > + return rval; > +} > + > +static int > +open_recoverfile(void) > +{ > + recover_fd = open(recover_file, O_RDWR | O_SYNC | O_CREAT | O_EXCL, > + 0600); > + if (recover_fd < 0) { > + if (errno == EEXIST) > + err_message(_("Recovery file already exists, either " > + "run '%s -r %s' or remove the file."), > + progname, recover_file); > + else > + err_open(recover_file); > + return 1; > + } > + > + if (!platform_test_xfs_fd(recover_fd)) { > + err_not_xfs(recover_file); > + close(recover_fd); > + return 1; > + } > + > + return 0; > +} > + > +static void > +update_recoverfile(void) > +{ > + static const char null_file[] = "0\n0\n0\n\ntarget: \ntemp: \nend\n"; > + static size_t buf_size = 0; > + static char *buf = NULL; > + int i, len; > + > + if (recover_fd <= 0) > + return; > + > + if (cur_node == NULL || cur_phase == 0) { > + /* inbetween processing or still scanning */ > + lseek(recover_fd, 0, SEEK_SET); > + write(recover_fd, null_file, sizeof(null_file)); > + return; > + } > + > + ASSERT(highest_numpaths > 0); > + if (buf == NULL) { > + buf_size = (highest_numpaths + 3) * PATH_MAX; > + buf = malloc(buf_size); > + if (buf == NULL) { > + err_nomem(); > + exit(1); > + } > + } > + > + len = sprintf(buf, "%d\n%llu\n%d\n", cur_phase, > + (long long)cur_node->ino, cur_node->ftw_flags); > + > + for (i = 0; i < cur_node->numpaths; i++) > + len += sprintf(buf + len, "%s\n", cur_node->paths[i]); > + > + len += sprintf(buf + len, "target: %s\ntemp: %s\nend\n", > + cur_target, cur_temp); > + > + ASSERT(len < buf_size); > + > + lseek(recover_fd, 0, SEEK_SET); > + ftruncate(recover_fd, 0); > + write(recover_fd, buf, len); > +} > + > +static void > +cleanup(void) > +{ > + log_message(LOG_NORMAL, _("Interrupted -- cleaning up...")); > + > + free_nodehash(); > + > + log_message(LOG_NORMAL, _("Done.")); > +} > + > +static void > +sighandler(int sig) > +{ > + static char cycle[4] = "-\\|/"; > + static uint64_t cur_cycle = 0; > + double percent; > + char *typename; > + uint64_t nodes, done; > + > + alarm(0); > + > + if (sig != SIGALRM) { > + cleanup(); > + exit(1); > + } > + > + if (cur_phase == SCAN_PHASE) { > + if (log_level >= LOG_INFO) > + fprintf(stderr, _("\r%llu files, %llu dirs and %llu " > + "symlinks to renumber found... %c"), > + (long long)numfilenodes, > + (long long)numdirnodes, > + (long long)numslinknodes, > + cycle[cur_cycle % 4]); > + else > + fprintf(stderr, "\r%c", > + cycle[cur_cycle % 4]); > + cur_cycle++; > + } else { > + if (cur_phase >= DIR_PHASE && cur_phase <= DIR_PHASE_MAX) { > + nodes = numdirnodes; > + done = numdirsdone; > + typename = _("dirs"); > + } else > + if (cur_phase >= FILE_PHASE && cur_phase <= FILE_PHASE_MAX) { > + nodes = numfilenodes; > + done = numfilesdone; > + typename = _("files"); > + } else { > + nodes = numslinknodes; > + done = numslinksdone; > + typename = _("symlinks"); > + } > + percent = 100.0 * (double)done / (double)nodes; > + if (percent > 100.0) > + percent = 100.0; > + if (log_level >= LOG_INFO) > + fprintf(stderr, _("\r%.1f%%, %llu of %llu %s, " > + "%u seconds elapsed"), percent, > + (long long)done, (long long)nodes, > + typename, (int)(time(0) - starttime)); > + else > + fprintf(stderr, "\r%.1f%%", percent); > + } > + poll_output = 1; > + signal(SIGALRM, sighandler); > + > + if (poll_interval) > + alarm(poll_interval); > +} > + > +static int > +read_recover_file( > + char *recover_file, > + bignode_t **node, > + char **target, > + char **temp, > + int *phase) > +{ > + FILE *file; > + int rval = 1; > + ino_t ino; > + int ftw_flags; > + char buf[PATH_MAX + 10]; /* path + "target: " */ > + struct stat64 s; > + int first_path; > + > + /* > + > + A recovery file should look like: > + > + > + > + > + > + > + target: > + temp: > + end > + */ > + > + file = fopen(recover_file, "r"); > + if (file == NULL) { > + err_open(recover_file); > + return 1; > + } > + > + /* read phase */ > + *phase = 0; > + if (fgets(buf, PATH_MAX + 10, file) == NULL) { > + err_message("Recovery failed: unable to read phase"); > + goto quit; > + } > + buf[strlen(buf) - 1] = '\0'; > + *phase = atoi(buf); > + if (*phase == SCAN_PHASE) { > + fclose(file); > + return 0; > + } > + if ((*phase < DIR_PHASE || *phase > DIR_PHASE_MAX) && > + (*phase < FILE_PHASE || *phase > FILE_PHASE_MAX)) { > + err_message("Recovery failed: failed to read valid recovery phase"); > + goto quit; > + } > + > + /* read inode number */ > + if (fgets(buf, PATH_MAX + 10, file) == NULL) { > + err_message("Recovery failed: unable to read inode number"); > + goto quit; > + } > + buf[strlen(buf) - 1] = '\0'; > + ino = strtoull(buf, NULL, 10); > + if (ino == 0) { > + err_message("Recovery failed: unable to read inode number"); > + goto quit; > + } > + > + /* read ftw_flags */ > + if (fgets(buf, PATH_MAX + 10, file) == NULL) { > + err_message("Recovery failed: unable to read flags"); > + goto quit; > + } > + buf[strlen(buf) - 1] = '\0'; > + if (buf[1] != '\0' || (buf[0] != '0' && buf[0] != '1')) { > + err_message("Recovery failed: unable to read flags: '%s'", buf); > + goto quit; > + } > + ftw_flags = atoi(buf); > + > + /* read paths and target path */ > + *node = NULL; > + *target = NULL; > + first_path = 1; > + while (fgets(buf, PATH_MAX + 10, file) != NULL) { > + buf[strlen(buf) - 1] = '\0'; > + > + log_message(LOG_DEBUG, "path: '%s'", buf); > + > + if (buf[0] == '/') { > + if (stat64(buf, &s) < 0) { > + err_message(_("Recovery failed: cannot " > + "stat '%s'"), buf); > + goto quit; > + } > + if (s.st_ino != ino) { > + err_message(_("Recovery failed: inode " > + "number for '%s' does not " > + "match recorded number"), buf); > + goto quit; > + } > + > + if (first_path) { > + first_path = 0; > + *node = add_node_path(ino, ftw_flags, buf); > + } > + else { > + add_path(*node, buf); > + } > + } > + else if (strncmp(buf, "target: ", 8) == 0) { > + *target = strdup(buf + 8); > + if (*target == NULL) { > + err_nomem(); > + goto quit; > + } > + if (stat64(*target, &s) < 0) { > + err_message(_("Recovery failed: cannot " > + "stat '%s'"), *target); > + goto quit; > + } > + } > + else if (strncmp(buf, "temp: ", 6) == 0) { > + *temp = strdup(buf + 6); > + if (*temp == NULL) { > + err_nomem(); > + goto quit; > + } > + } > + else if (strcmp(buf, "end") == 0) { > + rval = 0; > + goto quit; > + } > + else { > + err_message(_("Recovery failed: unrecognised " > + "string: '%s'"), buf); > + goto quit; > + } > + } > + > + err_message(_("Recovery failed: end of recovery file not found")); > + > + quit: > + if (*node == NULL) { > + err_message(_("Recovery failed: no valid inode or paths " > + "specified")); > + rval = 1; > + } > + > + if (*target == NULL) { > + err_message(_("Recovery failed: no inode target specified")); > + rval = 1; > + } > + > + fclose(file); > + > + return rval; > +} > + > +int > +recover( > + bignode_t *node, > + char *target, > + char *tname, > + int phase) > +{ > + int tfd = -1; > + int targetfd = -1; > + char *srcname = NULL; > + int rval = 0; > + int i; > + int move_count = 0; > + > + dump_node("recover", node); > + log_message(LOG_DEBUG, "target: %s, phase: %x", target, phase); > + > + if (node) > + srcname = node->paths[0]; > + > + switch (phase) { > + > + case DIR_PHASE_2: > +rmtemps: > + log_message(LOG_NORMAL, _("Removing temporary directory: '%s'"), > + tname); > + if (rmdir(tname) < 0 && errno != ENOENT) { > + err_message(_("unable to remove directory: %s"), tname); > + rval = 1; > + } > + /* FALL THRU */ > + case DIR_PHASE_1: > + log_message(LOG_NORMAL, _("Removing target directory: '%s'"), > + target); > + if (rmdir(target) < 0 && errno != ENOENT) { > + err_message(_("unable to remove directory: %s"), > + target); > + rval = 1; > + } > + break; > + > + case DIR_PHASE_3: > + log_message(LOG_NORMAL, _("Completing moving directory " > + "contents: '%s' to '%s'"), srcname, target); > + if (move_dirents(srcname, target, &move_count) != 0) { > + err_message(_("unable to move directory contents: " > + "%s to %s"), srcname, target); > + /* uh oh, move everything back... */ > + if (move_count > 0) { > + if (move_dirents(target, srcname, > + &move_count) != 0) { > + /* oh, dear lord... let the admin > + * clean this one up */ > + err_message(_("unable to move directory " > + "contents back: %s to %s"), > + target, srcname); > + exit(1); > + } > + } > + goto rmtemps; > + } > + /* FALL THRU */ > + case DIR_PHASE_4: > + log_message(LOG_NORMAL, _("Setting attributes for target " > + "directory: \'%s\'"), target); > + tfd = open(tname, O_RDONLY); > + if (tfd < 0) { > + err_open(tname); > + rval = 1; > + break; > + } > + targetfd = open(target, O_RDONLY); > + if (targetfd < 0) { > + err_open(target); > + rval = 1; > + break; > + } > + rval = dup_attributes(tname, tfd, target, targetfd); > + if (rval != 0) { > + err_message(_("unable to duplicate directory " > + "attributes: %s"), tname); > + break; > + } > + close(tfd); > + close(targetfd); > + /* FALL THRU */ > + case DIR_PHASE_6: > + log_message(LOG_NORMAL, _("Removing temporary directory: \'%s\'"), > + tname); > + if (rmdir(tname) < 0 && errno != ENOENT) { > + err_message(_("unable to remove directory: %s"), > + tname); > + rval = 1; > + break; > + } > + /* FALL THRU */ > + case DIR_PHASE_5: > + log_message(LOG_NORMAL, _("Removing old directory: \'%s\'"), > + srcname); > + if (rmdir(srcname) < 0 && errno != ENOENT) { > + err_message(_("unable to remove directory: %s"), > + srcname); > + rval = 1; > + break; > + } > + /* FALL THRU */ > + case DIR_PHASE_7: > + log_message(LOG_NORMAL, _("Renaming new directory to old " > + "directory: \'%s\' -> \'%s\'"), target, srcname); > + rval = rename(target, srcname); > + if (rval != 0) { > + /* we can't abort since the src dir is now gone. > + * let the admin clean this one up > + */ > + err_message(_("unable to rename directory: %s to %s"), > + target, srcname); > + break; > + } > + break; > + > + > + case FILE_PHASE_1: > + case SLINK_PHASE_1: > + log_message(LOG_NORMAL, _("Unlinking temporary file: \'%s\'"), > + target); > + unlink(target); > + break; > + > + case FILE_PHASE_2: > + case SLINK_PHASE_2: > + log_message(LOG_NORMAL, _("Unlinking old file: \'%s\'"), > + srcname); > + rval = unlink(srcname); > + if (rval != 0) { > + err_message(_("unable to remove file: %s"), srcname); > + break; > + } > + /* FALL THRU */ > + case FILE_PHASE_3: > + case SLINK_PHASE_3: > + log_message(LOG_NORMAL, _("Renaming new file to old file: " > + "\'%s\' -> \'%s\'"), target, srcname); > + rval = rename(target, srcname); > + if (rval != 0) { > + /* we can't abort since the src file is now gone. > + * let the admin clean this one up > + */ > + err_message(_("unable to rename file: %s to %s"), > + target, srcname); > + break; > + } > + /* FALL THRU */ > + case FILE_PHASE_4: > + case SLINK_PHASE_4: > + /* for each hardlink, unlink and creat pointing to target */ > + for (i = 1; i < node->numpaths; i++) { > + if (i == 1) > + log_message(LOG_NORMAL, _("Resetting hardlinks " > + "to new file")); > + > + rval = unlink(node->paths[i]); > + if (rval != 0) { > + err_message(_("unable to remove file: %s"), > + node->paths[i]); > + break; > + } > + rval = link(srcname, node->paths[i]); > + if (rval != 0) { > + err_message(_("unable to link to file: %s"), > + srcname); > + break; > + } > + } > + break; > + } > + > + if (rval == 0) { > + log_message(LOG_NORMAL, _("Removing recover file: \'%s\'"), > + recover_file); > + unlink(recover_file); > + log_message(LOG_NORMAL, _("Recovery done.")); > + } > + else { > + log_message(LOG_NORMAL, _("Leaving recover file: \'%s\'"), > + recover_file); > + log_message(LOG_NORMAL, _("Recovery failed.")); > + } > + > + return rval; > +} > + > +int > +main( > + int argc, > + char *argv[]) > +{ > + int c = 0; > + int rval = 0; > + int q_opt = 0; > + int v_opt = 0; > + int p_opt = 0; > + int n_opt = 0; > + char pathname[PATH_MAX]; > + struct stat64 st; > + > + progname = basename(argv[0]); > + > + setlocale(LC_ALL, ""); > + bindtextdomain(PACKAGE, LOCALEDIR); > + textdomain(PACKAGE); > + > + while ((c = getopt(argc, argv, "fnpqvP:r:")) != -1) { > + switch (c) { > + case 'f': > + force_all = 1; > + break; > + case 'n': > + n_opt++; > + break; > + case 'p': > + p_opt++; > + break; > + case 'q': > + if (v_opt) > + err_message(_("'q' option incompatible " > + "with 'v' option")); > + q_opt++; > + log_level=0; > + break; > + case 'v': > + if (q_opt) > + err_message(_("'v' option incompatible " > + "with 'q' option")); > + v_opt++; > + log_level++; > + break; > + case 'P': > + poll_interval = atoi(optarg); > + break; > + case 'r': > + recover_file = optarg; > + break; > + default: > + err_message(_("%s: illegal option -- %c\n"), c); > + usage(); > + /* NOTREACHED */ > + break; > + } > + } > + > + if (optind != argc - 1 && recover_file == NULL) { > + usage(); > + exit(1); > + } > + > + realuid = getuid(); > + starttime = time(0); > + > + init_nodehash(); > + > + signal(SIGALRM, sighandler); > + signal(SIGABRT, sighandler); > + signal(SIGHUP, sighandler); > + signal(SIGINT, sighandler); > + signal(SIGQUIT, sighandler); > + signal(SIGTERM, sighandler); > + > + if (p_opt && poll_interval == 0) { > + poll_interval = 1; > + } > + if (poll_interval) > + alarm(poll_interval); > + > + if (recover_file) { > + bignode_t *node = NULL; > + char *target = NULL; > + char *tname = NULL; > + int phase = 0; > + > + if (n_opt) > + goto quit; > + > + /* read node info from recovery file */ > + if (read_recover_file(recover_file, &node, &target, > + &tname, &phase) != 0) > + exit(1); > + > + rval = recover(node, target, tname, phase); > + > + free(target); > + free(tname); > + > + return rval; > + } > + > + recover_file = malloc(PATH_MAX); > + if (recover_file == NULL) { > + err_nomem(); > + exit(1); > + } > + recover_file[0] = '\0'; > + > + strcpy(pathname, argv[optind]); > + if (pathname[0] != '/') { > + err_message(_("pathname must begin with a slash ('/')")); > + exit(1); > + } > + > + if (stat64(pathname, &st) < 0) { > + err_stat(pathname); > + exit(1); > + } > + if (S_ISREG(st.st_mode)) { > + /* single file specified */ > + if (st.st_nlink > 1) { > + err_message(_("cannot process single file with a " > + "link count greater than 1")); > + exit(1); > + } > + > + strcpy(recover_file, pathname); > + dirname(recover_file); > + > + strcpy(recover_file + strlen(recover_file), "/xfs_reno.recover"); > + if (!n_opt) { > + if (open_recoverfile() != 0) > + exit(1); > + } > + add_node_path(st.st_ino, FTW_F, pathname); > + } > + else if (S_ISDIR(st.st_mode)) { > + /* directory tree specified */ > + strcpy(recover_file, pathname); > + > + strcpy(recover_file + strlen(recover_file), "/xfs_reno.recover"); > + if (!n_opt) { > + if (open_recoverfile() != 0) > + exit(1); > + } > + > + /* directory scan */ > + log_message(LOG_INFO, _("\rScanning directory tree...")); > + SET_PHASE(SCAN_PHASE); > + nftw64(pathname, nftw_addnodes, 100, FTW_PHYS | FTW_MOUNT); > + } > + else { > + err_message(_("pathname must be either a regular file " > + "or directory")); > + exit(1); > + } > + > + dump_nodehash(); > + > + if (n_opt) { > + /* n flag set, don't do anything */ > + if (numdirnodes) > + log_message(LOG_NORMAL, "\rWould process %d %s", > + numdirnodes, numdirnodes == 1 ? > + "directory" : "directories"); > + else > + log_message(LOG_NORMAL, "\rNo directories to process"); > + > + if (numfilenodes) > + /* process files */ > + log_message(LOG_NORMAL, "\rWould process %d %s", > + numfilenodes, numfilenodes == 1 ? > + "file" : "files"); > + else > + log_message(LOG_NORMAL, "\rNo files to process"); > + if (numslinknodes) > + /* process files */ > + log_message(LOG_NORMAL, "\rWould process %d %s", > + numslinknodes, numslinknodes == 1 ? > + "symlinx" : "symlinks"); > + else > + log_message(LOG_NORMAL, "\rNo symlinks to process"); > + } else { > + /* process directories */ > + if (numdirnodes) { > + log_message(LOG_INFO, _("\rProcessing %d %s..."), > + numdirnodes, numdirnodes == 1 ? > + _("directory") : _("directories")); > + cur_phase = DIR_PHASE; > + rval = for_all_nodes(process_dir, FTW_D, 1); > + if (rval != 0) > + goto quit; > + } > + else > + log_message(LOG_INFO, _("\rNo directories to process...")); > + > + if (numfilenodes) { > + /* process files */ > + log_message(LOG_INFO, _("\rProcessing %d %s..."), > + numfilenodes, numfilenodes == 1 ? > + _("file") : _("files")); > + cur_phase = FILE_PHASE; > + for_all_nodes(process_file, FTW_F, 0); > + } > + else > + log_message(LOG_INFO, _("\rNo files to process...")); > + > + if (numslinknodes) { > + /* process symlinks */ > + log_message(LOG_INFO, _("\rProcessing %d %s..."), > + numslinknodes, numslinknodes == 1 ? > + _("symlink") : _("symlinks")); > + cur_phase = SLINK_PHASE; > + for_all_nodes(process_slink, FTW_SL, 0); > + } > + else > + log_message(LOG_INFO, _("\rNo symlinks to process...")); > + > + } > +quit: > + free_nodehash(); > + > + close(recover_fd); > + > + if (rval == 0) > + unlink(recover_file); > + > + log_message(LOG_DEBUG, "\r%u seconds elapsed", time(0) - starttime); > + log_message(LOG_INFO, _("\rDone. ")); > + > + return rval | global_rval; > +} > Index: xfsprogs-dev/configure.in > =================================================================== > --- xfsprogs-dev.orig/configure.in 2009-05-28 15:07:16.000000000 +0000 > +++ xfsprogs-dev/configure.in 2009-05-28 15:07:25.000000000 +0000 > @@ -60,6 +60,10 @@ > AC_PACKAGE_NEED_PTHREAD_H > AC_PACKAGE_NEED_PTHREADMUTEXINIT > > +AC_PACKAGE_NEED_ATTRIBUTES_H > +AC_PACKAGE_NEED_ATTRIBUTES_MACROS > +AC_PACKAGE_NEED_ATTRGET_LIBATTR > + > AC_HAVE_FADVISE > AC_HAVE_MADVISE > AC_HAVE_MINCORE > Index: xfsprogs-dev/include/builddefs.in > =================================================================== > --- xfsprogs-dev.orig/include/builddefs.in 2009-05-28 14:58:15.000000000 +0000 > +++ xfsprogs-dev/include/builddefs.in 2009-05-28 14:58:38.000000000 +0000 > @@ -25,6 +25,7 @@ > MALLOCLIB = @malloc_lib@ > LOADERFLAGS = @LDFLAGS@ > > +LIBATTR = @libattr@ > LIBRT = @librt@ > LIBUUID = @libuuid@ > LIBPTHREAD = @libpthread@ > Index: xfsprogs-dev/m4/Makefile > =================================================================== > --- xfsprogs-dev.orig/m4/Makefile 2009-05-28 14:57:04.000000000 +0000 > +++ xfsprogs-dev/m4/Makefile 2009-05-28 14:57:10.000000000 +0000 > @@ -8,6 +8,7 @@ > LSRCFILES = \ > manual_format.m4 \ > package_aiodev.m4 \ > + package_attrdev.m4 \ > package_globals.m4 \ > package_libcdev.m4 \ > package_pthread.m4 \ > Index: xfsprogs-dev/m4/package_attrdev.m4 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfsprogs-dev/m4/package_attrdev.m4 2009-05-28 14:56:47.000000000 +0000 > @@ -0,0 +1,83 @@ > +AC_DEFUN([AC_PACKAGE_NEED_ATTR_XATTR_H], > + [ AC_CHECK_HEADERS([attr/xattr.h]) > + if test "$ac_cv_header_attr_xattr_h" != "yes"; then > + echo > + echo 'FATAL ERROR: attr/xattr.h does not exist.' > + echo 'Install the extended attributes (attr) development package.' > + echo 'Alternatively, run "make install-dev" from the attr source.' > + exit 1 > + fi > + ]) > + > +AC_DEFUN([AC_PACKAGE_NEED_ATTR_ERROR_H], > + [ AC_CHECK_HEADERS([attr/error_context.h]) > + if test "$ac_cv_header_attr_error_context_h" != "yes"; then > + echo > + echo 'FATAL ERROR: attr/error_context.h does not exist.' > + echo 'Install the extended attributes (attr) development package.' > + echo 'Alternatively, run "make install-dev" from the attr source.' > + exit 1 > + fi > + ]) > + > +AC_DEFUN([AC_PACKAGE_NEED_ATTRIBUTES_H], > + [ have_attributes_h=false > + AC_CHECK_HEADERS([attr/attributes.h sys/attributes.h], [have_attributes_h=true], ) > + if test "$have_attributes_h" = "false"; then > + echo > + echo 'FATAL ERROR: attributes.h does not exist.' > + echo 'Install the extended attributes (attr) development package.' > + echo 'Alternatively, run "make install-dev" from the attr source.' > + exit 1 > + fi > + ]) > + > +AC_DEFUN([AC_PACKAGE_WANT_ATTRLIST_LIBATTR], > + [ AC_CHECK_LIB(attr, attr_list, [have_attr_list=true], [have_attr_list=false]) > + AC_SUBST(have_attr_list) > + ]) > + > +AC_DEFUN([AC_PACKAGE_NEED_GETXATTR_LIBATTR], > + [ AC_CHECK_LIB(attr, getxattr,, [ > + echo > + echo 'FATAL ERROR: could not find a valid Extended Attributes library.' > + echo 'Install the extended attributes (attr) development package.' > + echo 'Alternatively, run "make install-lib" from the attr source.' > + exit 1 > + ]) > + libattr="-lattr" > + test -f `pwd`/../attr/libattr/libattr.la && \ > + libattr="`pwd`/../attr/libattr/libattr.la" > + test -f ${libexecdir}${libdirsuffix}/libattr.la && \ > + libattr="${libexecdir}${libdirsuffix}/libattr.la" > + AC_SUBST(libattr) > + ]) > + > +AC_DEFUN([AC_PACKAGE_NEED_ATTRGET_LIBATTR], > + [ AC_CHECK_LIB(attr, attr_get,, [ > + echo > + echo 'FATAL ERROR: could not find a valid Extended Attributes library.' > + echo 'Install the extended attributes (attr) development package.' > + echo 'Alternatively, run "make install-lib" from the attr source.' > + exit 1 > + ]) > + libattr="-lattr" > + test -f `pwd`/../attr/libattr/libattr.la && \ > + libattr="`pwd`/../attr/libattr/libattr.la" > + test -f ${libexecdir}${libdirsuffix}/libattr.la && \ > + libattr="${libexecdir}${libdirsuffix}/libattr.la" > + AC_SUBST(libattr) > + ]) > + > +AC_DEFUN([AC_PACKAGE_NEED_ATTRIBUTES_MACROS], > + [ AC_MSG_CHECKING([macros in attr/attributes.h]) > + AC_TRY_LINK([ > +#include > +#include ], > + [ int x = ATTR_SECURE; ], [ echo ok ], [ > + echo > + echo 'FATAL ERROR: could not find a current attributes header.' > + echo 'Upgrade the extended attributes (attr) development package.' > + echo 'Alternatively, run "make install-dev" from the attr source.' > + exit 1 ]) > + ]) > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From jquigley@jquigley.com Thu Jul 16 13:07:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GI7bVH030488 for ; Thu, 16 Jul 2009 13:07:37 -0500 X-ASG-Debug-ID: 1247768158-7cd0022a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.jquigley.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 35A21A79F58 for ; Thu, 16 Jul 2009 11:15:58 -0700 (PDT) Received: from mail.jquigley.com (main.jquigley.com [67.23.32.156]) by cuda.sgi.com with ESMTP id Ng2eyXIB25CjVCHw for ; Thu, 16 Jul 2009 11:15:58 -0700 (PDT) Received: from jquigley.cleversafe.org (67-129-215-3.dia.static.qwest.net [67.129.215.3]) (Authenticated sender: jquigley@mail.jquigley.com) by mail.jquigley.com (Postfix) with ESMTPSA id 82C6520411C for ; Thu, 16 Jul 2009 18:08:12 +0000 (UTC) Message-ID: <4A5F6C8C.609@jquigley.com> Date: Thu, 16 Jul 2009 13:08:12 -0500 From: John Quigley User-Agent: Thunderbird 2.0.0.22 (X11/20090605) MIME-Version: 1.0 To: XFS Development X-ASG-Orig-Subj: File system corruption Subject: File system corruption Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: main.jquigley.com[67.23.32.156] X-Barracuda-Start-Time: 1247768159 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3580 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hey Folks: I'm periodically encountering an issue with XFS that you might perhaps be interested in. The environment in which this manifests itself is on a CentOS Linux machine (custom 2.6.28.7 kernel), which is serving the XFS mount point in question with the standard Linux nfsd. The XFS file system lives on an LVM device in a striping configuration (2 wide stripe), with two iSCSI volumes acting as the constituent physical volumes. This configuration is somewhat baroque, I know. I'm experiencing periodic file system corruption, which manifests in the XFS file system going offline, and refusing subsequent mounts. The only way to recover from this has been to perform a xfs_repair -L, which has resulted in data loss on each occasion, as expected. Now, here's what I witness in the system logs: kernel: XFS: bad magic number kernel: XFS: SB validate failed kernel: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ kernel: Filesystem "dm-0": XFS internal error xfs_ialloc_read_agi at line 1408 of file fs/xfs/xfs_ialloc.c. Caller 0xffffffff8118711a kernel: Pid: 3842, comm: nfsd Not tainted 2.6.28.7.cs.8 #3 kernel: Call Trace: kernel: [] xfs_ialloc_ag_select+0x22a/0x320 kernel: [] xfs_ialloc_read_agi+0xe1/0x140 kernel: [] xfs_ialloc_ag_select+0x22a/0x320 kernel: [] swiotlb_map_single_attrs+0x1d/0xf0 kernel: [] xfs_ialloc_ag_select+0x22a/0x320 kernel: [] xfs_dialloc+0x31c/0xa90 kernel: [] __alloc_pages_internal+0xf5/0x4f0 kernel: [] cache_alloc_refill+0x96/0x5a0 kernel: [] xfs_ialloc+0x7f/0x6f0 kernel: [] kmem_zone_alloc+0x86/0xc0 kernel: [] xfs_dir_ialloc+0xa8/0x360 kernel: [] xfs_trans_reserve+0xa8/0x220 kernel: [] __down_write_nested+0x17/0xa0 kernel: [] xfs_create+0x2ef/0x4e0 kernel: [] xfs_vn_mknod+0x14c/0x1a0 kernel: [] vfs_create+0xec/0x160 kernel: [] nfsd_create_v3+0x3b3/0x500 [nfsd] kernel: [] nfsd3_proc_create+0x118/0x1b0 [nfsd] kernel: [] nfsd_dispatch+0xba/0x270 [nfsd] kernel: [] svc_process+0x49e/0x800 [sunrpc] kernel: [] default_wake_function+0x0/0x10 kernel: [] __down_read+0x17/0xa6 kernel: [] nfsd+0x199/0x2c0 [nfsd] kernel: [] nfsd+0x0/0x2c0 [nfsd] kernel: [] kthread+0x47/0x90 kernel: [] schedule_tail+0x27/0x70 kernel: [] child_rip+0xa/0x11 kernel: [] kthread+0x0/0x90 kernel: [] child_rip+0x0/0x11 The resultant stack trace coming from "XFS internal error xfs_ialloc_read_agi" repeats itself numerous times, at which point, the following is seen: kernel: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ kernel: Filesystem "dm-0": XFS internal error xfs_alloc_read_agf at line 2194 of file fs/xfs/xfs_alloc.c. Caller 0xffffffff8115cf09 kernel: Pid: 3756, comm: nfsd Not tainted 2.6.28.7.cs.8 #3 kernel: Call Trace: kernel: [] xfs_alloc_fix_freelist+0x3e9/0x480 kernel: [] xfs_alloc_read_agf+0xd3/0x1e0 kernel: [] xfs_alloc_fix_freelist+0x3e9/0x480 kernel: [] child_rip+0x0/0x11 kernel: [] xfs_alloc_fix_freelist+0x3e9/0x480 kernel: [] vsnprintf+0x743/0x890 kernel: [] wait_for_xmitr+0x5a/0xc0 kernel: [] child_rip+0x0/0x11 kernel: [] __down_read+0x17/0xa6 kernel: [] xfs_alloc_vextent+0x1b5/0x4e0 kernel: [] xfs_bmap_btalloc+0x608/0xb00 kernel: [] xfs_bmapi+0xa4a/0x12a0 kernel: [] xfs_imap_to_bp+0xac/0x130 kernel: [] xfs_dir2_grow_inode+0x15a/0x410 kernel: [] xfs_dir2_sf_to_block+0x9f/0x5c0 kernel: [] kmem_zone_alloc+0x86/0xc0 kernel: [] kmem_zone_zalloc+0x32/0x50 kernel: [] xfs_inode_item_init+0x1e/0x80 kernel: [] xfs_dir2_sf_addname+0x430/0x5d0 kernel: [] xfs_ialloc+0x318/0x6f0 kernel: [] xfs_dir_createname+0x182/0x1e0 kernel: [] xfs_create+0x39f/0x4e0 kernel: [] xfs_vn_mknod+0x14c/0x1a0 kernel: [] vfs_create+0xec/0x160 kernel: [] nfsd_create_v3+0x3b3/0x500 [nfsd] kernel: [] nfsd3_proc_create+0x118/0x1b0 [nfsd] kernel: [] nfsd_dispatch+0xba/0x270 [nfsd] kernel: [] svc_process+0x49e/0x800 [sunrpc] kernel: [] __down_read+0x17/0xa6 kernel: [] nfsd+0x199/0x2c0 [nfsd] kernel: [] nfsd+0x0/0x2c0 [nfsd] kernel: [] kthread+0x47/0x90 kernel: [] schedule_tail+0x27/0x70 kernel: [] child_rip+0xa/0x11 kernel: [] kthread+0x0/0x90 kernel: [] child_rip+0x0/0x11 kernel: Filesystem "dm-0": XFS internal error xfs_trans_cancel at line 1164 of file fs/xfs/xfs_trans.c. Caller 0xffffffff811a9411 kernel: Pid: 3756, comm: nfsd Not tainted 2.6.28.7.cs.8 #3 kernel: Call Trace: kernel: [] xfs_create+0x1d1/0x4e0 kernel: [] xfs_trans_cancel+0xe5/0x110 kernel: [] xfs_create+0x1d1/0x4e0 kernel: [] xfs_vn_mknod+0x14c/0x1a0 kernel: [] vfs_create+0xec/0x160 kernel: [] nfsd_create_v3+0x3b3/0x500 [nfsd] kernel: [] nfsd3_proc_create+0x118/0x1b0 [nfsd] kernel: [] nfsd_dispatch+0xba/0x270 [nfsd] kernel: [] svc_process+0x49e/0x800 [sunrpc] kernel: [] __down_read+0x17/0xa6 kernel: [] nfsd+0x199/0x2c0 [nfsd] kernel: [] nfsd+0x0/0x2c0 [nfsd] kernel: [] kthread+0x47/0x90 kernel: [] schedule_tail+0x27/0x70 kernel: [] child_rip+0xa/0x11 kernel: [] kthread+0x0/0x90 kernel: [] child_rip+0x0/0x11 kernel: xfs_force_shutdown(dm-0,0x8) called from line 1165 of file fs/xfs/xfs_trans.c. Return address = 0xffffffff811a348e kernel: Filesystem "dm-0": Corruption of in-memory data detected. Shutting down filesystem: dm-0 kernel: Please umount the filesystem, and rectify the problem(s) kernel: nfsd: non-standard errno: -117 kernel: Filesystem "dm-0": xfs_log_force: error 5 returned. I'm somewhat at a loss with this one - it's been experienced on a customer's installation, so I don't have ready access to the machine. All internal tests to attempt reproduction with identical hardware/software configurations has been unfruitful. I'm concerned about the custom kernel, and may attempt to downgrade to the stock CentOS 5.3 kernel (2.6.18, if I remember correctly). Any insight would be hugely appreciated, and of course tell me how I can help further. Thanks so much. John Quigley jquigley.com From SEMA-CR-1-5KLR4J@ptcmarketing.com Thu Jul 16 13:18:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.4 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GIIfK5030911 for ; Thu, 16 Jul 2009 13:18:43 -0500 X-ASG-Debug-ID: 1247768358-695d03d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay2.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4442C139D45A for ; Thu, 16 Jul 2009 11:19:18 -0700 (PDT) Received: from relay2.ptc.com (relay2.ptc.com [12.11.148.122]) by cuda.sgi.com with ESMTP id HLncZIydPAGeaLwa for ; Thu, 16 Jul 2009 11:19:18 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.42,412,1243828800"; d="scan'208,217";a="307002139" Received: from hqcrmprdint18.ptcnet.ptc.com ([132.253.201.206]) by crmmaxx.ptc.com with ESMTP; 16 Jul 2009 13:59:21 -0400 To: MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Info" X-ASG-Orig-Subj: Who did Aberdeen name as 2009 PLM Champion? Subject: Who did Aberdeen name as 2009 PLM Champion? Sender: "PTC Info" Message-ID: Content-Type: multipart/alternative; boundary=BF_1247765828375_989752703 X-Barracuda-Connect: relay2.ptc.com[12.11.148.122] X-Barracuda-Start-Time: 1247768359 Date: Thu, 16 Jul 2009 11:19:18 -0700 (PDT) X-Barracuda-Bayes: INNOCENT GLOBAL 0.4994 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.82 X-Barracuda-Spam-Status: No, SCORE=0.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, MIME_QP_LONG_LINE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3579 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.82 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1247765828375_989752703 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Aberdeen Group evaluated the PLM solutions from PTC, Arena, Siemens/UGS, Ora= cle/Agile, Dassault Syst=C3=A8ms and several other contenders. We are proud = to announce that only PTC Windchill achieved the coveted "Champion" rating! Download Aberdeen's AXIS report for PLM solutions for hardgoods manufacturer= s today and you will learn: (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-5AAK2K= &o=3D= 1-5EFLIX= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D93548) * Which PLM vendors should be on your short list for consideration * How to avoid typical barriers to successful PLM deployment * Why PTC received high rankings in the categories of Market Readiness and V= alue Delivered to Customers * How PTC beat the competition to attain the "Champion" rating Download Aberdeen's PLM AXIS Report Today! (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-5AAK2K= &o=3D= 1-5EFLIX= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D93548) =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-5EFLIX= &campd=3D= 1-5AAK2K= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change email preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-5EFLIX= &campd=3D= 1-5AAK2K= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= unsubscribe@ptc.com. --BF_1247765828375_989752703 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Who did Aberdeen name as 2009 PLM Champion?
3D"PTC.com"
3D"

Aberdeen Group evaluated the PLM solutions from PTC, Arena, Siemens/UGS, = Oracle/Agile, Dassault Systèms and several other contenders.  We a= re proud to announce that only PTC Windchill achieved the coveted “Cha= mpion” rating! 

Download Aberde= en's AXIS report for PLM solutions for hardgoods manufacturers today and= you will learn:

  • Which PLM vendors should be on your short list for consideration
  • How to avoid typical barriers to successful PLM deployment
  • Why PTC received high rankings in the categories of Market Readiness= and Value Delivered to Customers
  • How PTC beat the competition to attain the “Champion” rating=

Download Aberde= en's PLM AXIS Report Today!


Vi= sit PTC’s Resource Center for Small and Medium Businesses. Find the latest articles, analy= st reports and webcasts geared toward helping you solve today’s busine= ss challenges.

 

3D""

contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1247765828375_989752703-- From sandeen@sandeen.net Thu Jul 16 14:11:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GJBIpD032543 for ; Thu, 16 Jul 2009 14:11:18 -0500 X-ASG-Debug-ID: 1247771517-5ec300b40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7C809139D616; Thu, 16 Jul 2009 12:11:57 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id LCPvnllmfaeK3nO3; Thu, 16 Jul 2009 12:11:57 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6GJBvPJ025141; Thu, 16 Jul 2009 15:11:57 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6GJBuSa011856; Thu, 16 Jul 2009 15:11:56 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6GJBtX2030658; Thu, 16 Jul 2009 15:11:56 -0400 Message-ID: <4A5F7B7B.6020903@sandeen.net> Date: Thu, 16 Jul 2009 14:11:55 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Olaf Weber CC: xfs mailing list X-ASG-Orig-Subj: [PATCH V3] reduce bmv_count in xfs_vn_fiemap Subject: [PATCH V3] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> <4A5F3DBA.9040005@sandeen.net> In-Reply-To: <4A5F3DBA.9040005@sandeen.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247771518 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused the full bmv_count's worth of getbmapx structures to get allocated; telling it to do MAXEXTNUM was a bit insane, resulting in ENOMEM every time. Chop it down to something reasonable, the number of slots in the caller's input buffer. If this is too large the caller may get ENOMEM but the reason should not be a mystery, and they can try again with something smaller. We add 1 to the value because in the normal getbmap world, bmv_count includes the header and xfs_getbmap does: nex = bmv->bmv_count - 1; if (nex <= 0) return XFS_ERROR(EINVAL); Signed-off-by: Eric Sandeen --- V2: set it to the fiemap info's fi_extents_max V3: bump up by one to accomodate expected bmv header in core diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb..954d701 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -680,8 +680,7 @@ xfs_vn_fiemap( else bm.bmv_length = BTOBB(length); - /* our formatter will tell xfs_getbmap when to stop. */ - bm.bmv_count = MAXEXTNUM; + bm.bmv_count = fieinfo->fi_extents_max + 1; bm.bmv_iflags = BMV_IF_PREALLOC; if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) bm.bmv_iflags |= BMV_IF_ATTRFORK; _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Thu Jul 16 14:20:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GJKLe1032821 for ; Thu, 16 Jul 2009 14:20:21 -0500 X-ASG-Debug-ID: 1247772060-2b6202790000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 21A9A36A3A1 for ; Thu, 16 Jul 2009 12:21:00 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id tuJzlIKqAUYhxg2I for ; Thu, 16 Jul 2009 12:21:00 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6GJKxrN027950; Thu, 16 Jul 2009 15:20:59 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6GJKwVr014083; Thu, 16 Jul 2009 15:20:58 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6GJKvwA000385; Thu, 16 Jul 2009 15:20:58 -0400 Message-ID: <4A5F7D99.4010503@sandeen.net> Date: Thu, 16 Jul 2009 14:20:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: John Quigley CC: XFS Development X-ASG-Orig-Subj: Re: File system corruption Subject: Re: File system corruption References: <4A5F6C8C.609@jquigley.com> In-Reply-To: <4A5F6C8C.609@jquigley.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247772061 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean John Quigley wrote: > Hey Folks: > > I'm periodically encountering an issue with XFS that you might perhaps be interested in. The environment in which this manifests itself is on a CentOS Linux machine (custom 2.6.28.7 kernel), which is serving the XFS mount point in question with the standard Linux nfsd. The XFS file system lives on an LVM device in a striping configuration (2 wide stripe), with two iSCSI volumes acting as the constituent physical volumes. This configuration is somewhat baroque, I know. > > I'm experiencing periodic file system corruption, which manifests in the XFS file system going offline, and refusing subsequent mounts. The only way to recover from this has been to perform a xfs_repair -L, which has resulted in data loss on each occasion, as expected. The log corruption might be related to data reordering somewhere along your IO path, though I wouldn't swear to it. But often when write caches are on, barriers are off, and power is lost, this sort of thing shows up. > Now, here's what I witness in the system logs: > > > kernel: XFS: bad magic number > kernel: XFS: SB validate failed That's the first error? > kernel: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > kernel: Filesystem "dm-0": XFS internal error xfs_ialloc_read_agi at line 1408 of file fs/xfs/xfs_ialloc.c. Caller 0xffffffff8118711a This means that after you read an agi, it failed a sanity test: 1403 be32_to_cpu(agi->agi_magicnum) == XFS_AGI_MAGIC && 1404 XFS_AGI_GOOD_VERSION(be32_to_cpu(agi->agi_versionnum)); bad magic number, etc. The "00 00 00 00 ..." is the contents of the buffer that it thought was the agi, containing all that wonderful magic - but it's all 0s. ... > The resultant stack trace coming from "XFS internal error xfs_ialloc_read_agi" repeats itself numerous times, at which point, the following is seen: > > > > kernel: 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > kernel: Filesystem "dm-0": XFS internal error xfs_alloc_read_agf at line 2194 of file fs/xfs/xfs_alloc.c. Caller 0xffffffff8115cf09 Similar, but bad info on the AGF: 2184 agf_ok = 2185 be32_to_cpu(agf->agf_magicnum) == XFS_AGF_MAGIC && 2186 XFS_AGF_GOOD_VERSION(be32_to_cpu(agf->agf_versionnum)) && 2187 be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length) && 2188 be32_to_cpu(agf->agf_flfirst) < XFS_AGFL_SIZE(mp) && 2189 be32_to_cpu(agf->agf_fllast) < XFS_AGFL_SIZE(mp) && 2190 be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp); Again w/ the zeros ... > > kernel: Filesystem "dm-0": XFS internal error xfs_trans_cancel at line 1164 of file fs/xfs/xfs_trans.c. Caller 0xffffffff811a9411 ... and then the fs tried to back out of a dirty transaction, which it can't do, but that's secondary. > kernel: xfs_force_shutdown(dm-0,0x8) called from line 1165 of file fs/xfs/xfs_trans.c. Return address = 0xffffffff811a348e > kernel: Filesystem "dm-0": Corruption of in-memory data detected. Shutting down filesystem: dm-0 > kernel: Please umount the filesystem, and rectify the problem(s) > kernel: nfsd: non-standard errno: -117 117 EFSCORRUPTED IIRC? > kernel: Filesystem "dm-0": xfs_log_force: error 5 returned. EIO > > > I'm somewhat at a loss with this one - it's been experienced on a customer's installation, so I don't have ready access to the machine. All internal tests to attempt reproduction with identical hardware/software configurations has been unfruitful. I'm concerned about the custom kernel, and may attempt to downgrade to the stock CentOS 5.3 kernel (2.6.18, if I remember correctly). > > Any insight would be hugely appreciated, and of course tell me how I can help further. Thanks so much. I'm happy to blame the storage here, given the buffers full of 0s ... you could modify the messages to print the block nrs in question and go back directly to the storage, read it, and see what's there. Were there no iscsi or other assorted messages before all this? -Eric > John Quigley > jquigley.com From sandeen@sandeen.net Thu Jul 16 14:42:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_52,J_CHICKENPOX_63,J_CHICKENPOX_64,J_CHICKENPOX_66, J_CHICKENPOX_92,URIBL_BLACK autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GJgiNT033481 for ; Thu, 16 Jul 2009 14:42:45 -0500 X-ASG-Debug-ID: 1247773403-5ebc01380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 695FE8DE361 for ; Thu, 16 Jul 2009 12:43:23 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id ZopneavorOwGEIkU for ; Thu, 16 Jul 2009 12:43:23 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6GJhNva001902 for ; Thu, 16 Jul 2009 15:43:23 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6GJhLfn022144; Thu, 16 Jul 2009 15:43:22 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6GJhKul004196; Thu, 16 Jul 2009 15:43:21 -0400 Message-ID: <4A5F82D8.8080709@sandeen.net> Date: Thu, 16 Jul 2009 14:43:20 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list CC: Josef Bacik X-ASG-Orig-Subj: [PATCH] xfstests 219: test fiemap Subject: [PATCH] xfstests 219: test fiemap Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247773404 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Preliminary fiemap testing support based on a test util written by Josef Bacik. For now it's only run with preallocation disabled, because xfs has a tendency to fill in holes with data blocks (EOF prealloc stuff I think) and similar for explicit preallocation, so this is breaking the preallocation tests for now, when it finds a "data" block where it expects a preallocated block. Signed-off-by: Eric Sandeen --- diff --git a/aclocal.m4 b/aclocal.m4 index 8a61e39..6c25e5a 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -523,3 +523,22 @@ AC_DEFUN([AC_PACKAGE_NEED_XFSCTL_MACRO], ]) ]) +AC_DEFUN([AC_PACKAGE_WANT_LINUX_FIEMAP_H], + [ AC_CHECK_HEADERS([linux/fiemap.h], [ have_fiemap=true ], [ have_fiemap=false ]) + AC_SUBST(have_fiemap) + ]) + +AC_DEFUN([AC_PACKAGE_WANT_FALLOCATE], + [ AC_MSG_CHECKING([for fallocate]) + AC_TRY_LINK([ +#define _GNU_SOURCE +#define _FILE_OFFSET_BITS 64 +#include +#include + ], [ + fallocate(0, 0, 0, 0); + ], have_fallocate=yes + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + AC_SUBST(have_fallocate) + ]) diff --git a/configure.in b/configure.in index 6c2afe7..a9927c3 100644 --- a/configure.in +++ b/configure.in @@ -64,6 +64,8 @@ in AC_PACKAGE_WANT_GDBM AC_PACKAGE_WANT_AIO AC_PACKAGE_WANT_DMAPI + AC_PACKAGE_WANT_LINUX_FIEMAP_H + AC_PACKAGE_WANT_FALLOCATE ;; esac diff --git a/group b/group index 75224c7..e068e92 100644 --- a/group +++ b/group @@ -327,3 +327,4 @@ prealloc 216 log metadata auto quick 217 log metadata auto 218 auto fsr quick +219 auto diff --git a/include/builddefs.in b/include/builddefs.in index 7827ed5..71cee21 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -60,6 +60,8 @@ HAVE_DB = @have_db@ HAVE_AIO = @have_aio@ HAVE_DMAPI = @have_dmapi@ HAVE_ATTR_LIST = @have_attr_list@ +HAVE_FIEMAP = @have_fiemap@ +HAVE_FALLOCATE = @have_fallocate@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall diff --git a/src/Makefile b/src/Makefile index 7b01754..79910be 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,6 +21,14 @@ ifeq ($(HAVE_XLOG_ASSIGN_LSN), true) LINUX_TARGETS += loggen endif +ifeq ($(HAVE_FIEMAP), true) +LINUX_TARGETS += fiemap-tester +endif + +ifeq ($(HAVE_FALLOCATE),yes) +LCFLAGS += -DHAVE_FALLOCATE +endif + IRIX_TARGETS = open_unlink ifeq ($(PKG_PLATFORM),linux) diff --git a/src/fiemap-tester.c b/src/fiemap-tester.c new file mode 100644 index 0000000..69016a9 --- /dev/null +++ b/src/fiemap-tester.c @@ -0,0 +1,638 @@ +/* + * Copyright (c) 2009 Josef Bacik + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License V2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Global for non-critical message suppression */ +int quiet; + +static void +usage(void) +{ + printf("Usage: fiemap-tester [-m map] [-r number of runs] [-s seed] [-q]"); +#ifdef HAVE_FALLOCATE + printf("[-p preallocate (1/0)] "); +#endif + printf("filename\n"); + printf(" -m map : generate a file with the map given and test\n"); +#ifdef HAVE_FALLOCATE + printf(" -p 0/1 : turn block preallocation on or off\n"); +#endif + printf(" -r count : number of runs to execute (default infinity)\n"); + printf(" -s seed : seed for random map generator (default 1)\n"); + printf(" -q : be quiet about non-errors\n"); + printf("-m and -r cannot be used together\n"); + exit(EXIT_FAILURE); +} + +static char * +generate_file_mapping(int blocks, int prealloc) +{ + char *map; + int num_types = 2, cur_block = 0; + int i = 0; + + map = malloc(sizeof(char) * blocks); + if (!map) + return NULL; + + if (prealloc) + num_types++; + + + for (i = 0; i < blocks; i++) { + long num = random() % num_types; + switch (num) { + case 0: + map[cur_block] = 'D'; + break; + case 1: + map[cur_block] = 'H'; + break; + case 2: + map[cur_block] = 'P'; + break; + } + cur_block++; + } + + return map; +} + +static int +create_file_from_mapping(int fd, char *map, int blocks, int blocksize) +{ + int cur_offset = 0, ret = 0, bufsize; + char *buf; + int i = 0; + + bufsize = sizeof(char) * blocksize; + buf = malloc(bufsize); + if (!buf) + return -1; + + memset(buf, 'a', bufsize); + + for (i = 0; i < blocks; i++) { + switch (map[i]) { + case 'D': + ret = write(fd, buf, bufsize); + if (ret < bufsize) { + printf("Short write\n"); + ret = -1; + goto out; + } + break; +#ifdef HAVE_FALLOCATE + case 'P': + ret = fallocate(fd, 0, cur_offset, blocksize); + if (ret < 0) { + printf("Error fallocating\n"); + goto out; + } + /* fallthrough; seek to end of prealloc space */ +#endif + case 'H': + ret = lseek(fd, blocksize, SEEK_CUR); + if (ret == (off_t)-1) { + printf("Error lseeking\n"); + ret = -1; + goto out; + } + break; + default: + printf("Hrm, unrecognized flag in map\n"); + ret = -1; + goto out; + } + cur_offset += blocksize; + } + + ret = 0; +out: + return ret; +} + +static void +show_extent_block(struct fiemap_extent *extent, int blocksize) +{ + __u64 logical = extent->fe_logical; + __u64 phys = extent->fe_physical; + __u64 length = extent->fe_length; + int flags = extent->fe_flags; + + printf("logical: [%8llu..%8llu] phys: %8llu..%8llu " + "flags: 0x%03X tot: %llu\n", + logical / blocksize, (logical + length - 1) / blocksize, + phys / blocksize, (phys + length - 1) / blocksize, + flags, + (length / blocksize)); +} + +static void +show_extents(struct fiemap *fiemap, int blocksize) +{ + unsigned int i; + + for (i = 0; i < fiemap->fm_mapped_extents; i++) + show_extent_block(&fiemap->fm_extents[i], blocksize); +} + +static int +check_flags(struct fiemap *fiemap, int blocksize) +{ + struct fiemap_extent *extent; + __u64 aligned_offset, aligned_length; + int c; + + for (c = 0; c < fiemap->fm_mapped_extents; c++) { + extent = &fiemap->fm_extents[c]; + + aligned_offset = extent->fe_physical & ~((__u64)blocksize - 1); + aligned_length = extent->fe_length & ~((__u64)blocksize - 1); + + if ((aligned_offset != extent->fe_physical || + aligned_length != extent->fe_length) && + !(extent->fe_flags & FIEMAP_EXTENT_NOT_ALIGNED)) { + printf("ERROR: FIEMAP_EXTENT_NOT_ALIGNED is not set " + "but the extent is unaligned: %llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + + if (extent->fe_flags & FIEMAP_EXTENT_DATA_ENCRYPTED && + !(extent->fe_flags & FIEMAP_EXTENT_ENCODED)) { + printf("ERROR: FIEMAP_EXTENT_DATA_ENCRYPTED is set, " + "but FIEMAP_EXTENT_ENCODED is not set: %llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + + if (extent->fe_flags & FIEMAP_EXTENT_NOT_ALIGNED && + aligned_offset == extent->fe_physical && + aligned_length == extent->fe_length) { + printf("ERROR: FIEMAP_EXTENT_NOT_ALIGNED is set but " + "offset and length is blocksize aligned: " + "%llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + + if (extent->fe_flags & FIEMAP_EXTENT_LAST && + c + 1 < fiemap->fm_mapped_extents) { + printf("ERROR: FIEMAP_EXTENT_LAST is set but there are" + " more extents left: %llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + + if (extent->fe_flags & FIEMAP_EXTENT_DELALLOC && + !(extent->fe_flags & FIEMAP_EXTENT_UNKNOWN)) { + printf("ERROR: FIEMAP_EXTENT_DELALLOC is set but " + "FIEMAP_EXTENT_UNKNOWN is not set: %llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + + if (extent->fe_flags & FIEMAP_EXTENT_DATA_INLINE && + !(extent->fe_flags & FIEMAP_EXTENT_NOT_ALIGNED)) { + printf("ERROR: FIEMAP_EXTENT_DATA_INLINE is set but " + "FIEMAP_EXTENT_NOT_ALIGNED is not set: %llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + + if (extent->fe_flags & FIEMAP_EXTENT_DATA_TAIL && + !(extent->fe_flags & FIEMAP_EXTENT_NOT_ALIGNED)) { + printf("ERROR: FIEMAP_EXTENT_DATA_TAIL is set but " + "FIEMAP_EXTENT_NOT_ALIGNED is not set: %llu\n", + (unsigned long long) + (extent->fe_logical / blocksize)); + return -1; + } + } + + return 0; +} + +static int +check_data(struct fiemap *fiemap, __u64 logical_offset, int blocksize, + int last, int prealloc) +{ + struct fiemap_extent *extent; + __u64 orig_offset = logical_offset; + int c, found = 0; + + for (c = 0; c < fiemap->fm_mapped_extents; c++) { + __u64 start, end; + extent = &fiemap->fm_extents[c]; + + start = extent->fe_logical; + end = extent->fe_logical + extent->fe_length; + + if (logical_offset > end) + continue; + + if (logical_offset + blocksize < start) + break; + + if (logical_offset >= start && + logical_offset < end) { + if (prealloc && + !(extent->fe_flags & FIEMAP_EXTENT_UNWRITTEN)) { + printf("ERROR: preallocated extent is not " + "marked with FIEMAP_EXTENT_UNWRITTEN: " + "%llu\n", + (unsigned long long) + (start / blocksize)); + return -1; + } + + if (logical_offset + blocksize > end) { + logical_offset = end+1; + continue; + } else { + found = 1; + break; + } + } + } + + if (!found) { + printf("ERROR: couldn't find extent at %llu\n", + (unsigned long long)(orig_offset / blocksize)); + } else if (last && + !(fiemap->fm_extents[c].fe_flags & FIEMAP_EXTENT_LAST)) { + printf("ERROR: last extent not marked as last: %llu\n", + (unsigned long long)(orig_offset / blocksize)); + found = 0; + } + + return (!found) ? -1 : 0; +} + +static int +check_weird_fs_hole(int fd, __u64 logical_offset, int blocksize) +{ + static int warning_printed = 0; + int block, i; + size_t buf_len = sizeof(char) * blocksize; + char *buf; + + block = (int)(logical_offset / blocksize); + if (ioctl(fd, FIBMAP, &block) < 0) { + perror("Can't fibmap file"); + return -1; + } + + if (!block) { + printf("ERROR: FIEMAP claimed there was data at a block " + "which should be a hole, and FIBMAP confirmend that " + "it is in fact a hole, so FIEMAP is wrong: %llu\n", + (unsigned long long)(logical_offset / blocksize)); + return -1; + } + + buf = malloc(buf_len); + if (!buf) { + perror("Could not allocate temporary buffer"); + return -1; + } + + if (pread(fd, buf, buf_len, (off_t)logical_offset) < 0) { + perror("Error reading from file"); + free(buf); + return -1; + } + + for (i = 0; i < buf_len; i++) { + if (buf[i] != 0) { + printf("ERROR: FIEMAP claimed there was data (%c) at " + "block %llu that should have been a hole, and " + "FIBMAP confirmed that it was allocated, but " + "it should be filled with 0's, but it was not " + "so you have a big problem!\n", + buf[i], + (unsigned long long)(logical_offset / blocksize)); + free(buf); + return -1; + } + } + + if (warning_printed || quiet) { + free(buf); + return 0; + } + + printf("HEY FS PERSON: your fs is weird. I specifically wanted a\n" + "hole and you allocated a block anyway. FIBMAP confirms that\n" + "you allocated a block, and the block is filled with 0's so\n" + "everything is kosher, but you still allocated a block when\n" + "didn't need to. This may or may not be what you wanted,\n" + "which is why I'm only printing this message once, in case\n" + "you didn't do it on purpose. This was at block %llu.\n", + (unsigned long long)(logical_offset / blocksize)); + warning_printed = 1; + free(buf); + + return 0; +} + +static int +check_hole(struct fiemap *fiemap, int fd, __u64 logical_offset, int blocksize) +{ + struct fiemap_extent *extent; + int c; + + for (c = 0; c < fiemap->fm_mapped_extents; c++) { + __u64 start, end; + extent = &fiemap->fm_extents[c]; + + start = extent->fe_logical; + end = extent->fe_logical + extent->fe_length; + + if (logical_offset > end) + continue; + if (logical_offset + blocksize < start) + break; + + if (logical_offset >= start && + logical_offset < end) { + + if (check_weird_fs_hole(fd, logical_offset, + blocksize) == 0) + break; + + printf("ERROR: found an allocated extent where a hole " + "should be: %llu\n", + (unsigned long long)(start / blocksize)); + return -1; + } + } + + return 0; +} + +static int +compare_fiemap_and_map(int fd, char *map, int blocks, int blocksize) +{ + struct fiemap *fiemap; + char *fiebuf; + int blocks_to_map, ret, cur_extent = 0, last_data; + __u64 map_start, map_length; + int i, c; + + blocks_to_map = (random() % blocks) + 1; + fiebuf = malloc(sizeof(struct fiemap) + + (blocks_to_map * sizeof(struct fiemap_extent))); + if (!fiebuf) { + perror("Could not allocate fiemap buffers"); + return -1; + } + + fiemap = (struct fiemap *)fiebuf; + map_start = 0; + map_length = blocks_to_map * blocksize; + + for (i = 0; i < blocks; i++) { + if (map[i] != 'H') + last_data = i; + } + + fiemap->fm_flags = FIEMAP_FLAG_SYNC; + fiemap->fm_extent_count = blocks_to_map; + fiemap->fm_mapped_extents = 0; + + do { + fiemap->fm_start = map_start; + fiemap->fm_length = map_length; + + ret = ioctl(fd, FS_IOC_FIEMAP, (unsigned long)fiemap); + if (ret < 0) { + perror("FIEMAP ioctl failed"); + free(fiemap); + return -1; + } + + if (check_flags(fiemap, blocksize)) + goto error; + + for (i = cur_extent, c = 1; i < blocks; i++, c++) { + __u64 logical_offset = i * blocksize; + + if (c > blocks_to_map) + break; + + switch (map[i]) { + case 'D': + if (check_data(fiemap, logical_offset, + blocksize, last_data == i, 0)) + goto error; + break; + case 'H': + if (check_hole(fiemap, fd, logical_offset, + blocksize)) + goto error; + break; + case 'P': + if (check_data(fiemap, logical_offset, + blocksize, last_data == i, 1)) + goto error; + break; + default: + printf("ERROR: weird value in map: %c\n", + map[i]); + goto error; + } + } + cur_extent = i; + map_start = i * blocksize; + } while (cur_extent < blocks); + + ret = 0; + return ret; +error: + printf("map is '%s'\n", map); + show_extents(fiemap, blocksize); + return -1; +} + +int +main(int argc, char **argv) +{ + int blocksize = 0; /* filesystem blocksize */ + int fd; /* file descriptor */ + int opt; + int rc; + char *fname; /* filename to map */ + char *map = NULL; /* file map to generate */ + int runs = -1; /* the number of runs to have */ + int blocks = 0; /* the number of blocks to generate */ + int maxblocks = 0; /* max # of blocks to create */ + int prealloc = 1; /* whether or not to do preallocation */ + int seed = 1; + + while ((opt = getopt(argc, argv, "m:r:s:p:q")) != -1) { + switch(opt) { + case 'm': + map = strdup(optarg); + break; + case 'p': + prealloc = atoi(optarg);; +#ifndef HAVE_FALLOCATE + if (prealloc) + printf("Not built with preallocation support\n"); + usage(); +#endif + break; + case 'q': + quiet = 1; + break; + /* sync file before mapping */ + case 'r': + runs = atoi(optarg); + break; + case 's': + seed = atoi(optarg); + break; + default: + usage(); + } + } + + if (runs != -1 && map) + usage(); + + fname = argv[optind++]; + if (!fname) + usage(); + + fd = open(fname, O_RDWR|O_CREAT|O_TRUNC, 0644); + if (fd < 0) { + perror("Can't open file"); + exit(1); + } + + if (ioctl(fd, FIGETBSZ, &blocksize) < 0) { + perror("Can't get filesystem block size"); + close(fd); + exit(1); + } + +#ifdef HAVE_FALLOCATE + /* if fallocate passes, then we can do preallocation, else not */ + if (prealloc) { + prealloc = !((int)fallocate(fd, 0, 0, blocksize)); + if (!prealloc) + printf("preallocation not supported, disabling\n"); + } +#else + prealloc = 0; +#endif + + if (ftruncate(fd, 0)) { + perror("Can't truncate file"); + close(fd); + exit(1); + } + + if (map) { + blocks = strlen(map); + runs = 0; + } + + srandom(seed); + + /* max file size 2mb / block size */ + maxblocks = (2 * 1024 * 1024) / blocksize; + + if (runs == -1) + printf("Starting infinite run, if you don't see any output " + "then its working properly.\n"); + do { + if (!map) { + blocks = random() % maxblocks; + if (blocks == 0) { + if (!quiet) + printf("Skipping 0 length file\n"); + continue; + } + + map = generate_file_mapping(blocks, prealloc); + if (!map) { + printf("Could not create map\n"); + exit(1); + } + } + + rc = create_file_from_mapping(fd, map, blocks, blocksize); + if (rc) { + perror("Could not create file\n"); + free(map); + close(fd); + exit(1); + } + + rc = compare_fiemap_and_map(fd, map, blocks, blocksize); + if (rc) { + printf("Problem comparing fiemap and map\n"); + free(map); + close(fd); + exit(1); + } + + free(map); + map = NULL; + + if (ftruncate(fd, 0)) { + perror("Could not truncate file\n"); + close(fd); + exit(1); + } + + if (lseek(fd, 0, SEEK_SET)) { + perror("Could not seek set\n"); + close(fd); + exit(1); + } + + if (runs) runs--; + } while (runs != 0); + + close(fd); + + return 0; +} From sandeen@sandeen.net Thu Jul 16 17:22:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GMMCLS040470 for ; Thu, 16 Jul 2009 17:22:12 -0500 X-ASG-Debug-ID: 1247782971-481602640000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 37F2D139EFC4; Thu, 16 Jul 2009 15:22:51 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id azBQ5rhs8c28dEfl; Thu, 16 Jul 2009 15:22:51 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6GMMfAB012371; Thu, 16 Jul 2009 18:22:41 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6GMMeZd011120; Thu, 16 Jul 2009 18:22:40 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6GMMdjZ003041; Thu, 16 Jul 2009 18:22:39 -0400 Message-ID: <4A5FA82F.6050903@sandeen.net> Date: Thu, 16 Jul 2009 17:22:39 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Christoph Hellwig CC: Felix Blyakher , linux-ia64@vger.kernel.org, Steven Rostedt , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH, RFC] xfs: event tracing support Subject: Re: [PATCH, RFC] xfs: event tracing support References: <20090616214844.GA12310@infradead.org> <4E752C93-A674-4725-AF23-C227C0A1E659@sgi.com> <20090622205904.GA1855@infradead.org> In-Reply-To: <20090622205904.GA1855@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247782972 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3596 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Mon, Jun 22, 2009 at 01:01:35PM -0500, Felix Blyakher wrote: >>> To use it make sure CONFIG_EVENT_TRACING is enabled and then enable >>> all >>> xfs trace channels by: >>> >>> echo 1 > /sys/kernel/debug/tracing/events/xfs/enable >> Does event tracing work on ia64 platform? >> I spent some time on it over weekend, but was not able even >> to force "CONFIG_EVENT_TRACING=y" setting in the .config. >> Seems to build ok on x86_64, which does have CONFIG_TRACING >> in defconfig, and allows to set CONFIG_EVENT_TRACING. > > IA64 ftrace support was added earlier this year, but it seems it can't > be enabled anymore since the big config option reshuffle. Now tracing > support requires the architecture to define the TRACE_IRQFLAGS_SUPPORT > and STACKTRACE_SUPPORT symbols, which seems to be missing on ia64. Where are we at with this one, I'd like to get this in for XFS but I agree w/ Felix that throwing out a "working" trace infrastructure w/ nothing to replace it on ia64 would not be great. Is this just config confusion, or is the functionality actually missing on ia64? Thanks, -Eric From rostedt@goodmis.org Thu Jul 16 17:34:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6GMYniQ041196 for ; Thu, 16 Jul 2009 17:34:49 -0500 X-ASG-Debug-ID: 1247783728-11d1033a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from hrndva-omtalb.mail.rr.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9203336AF16 for ; Thu, 16 Jul 2009 15:35:28 -0700 (PDT) Received: from hrndva-omtalb.mail.rr.com (hrndva-omtalb.mail.rr.com [71.74.56.122]) by cuda.sgi.com with ESMTP id XZqQpxvO2aEpVmiL for ; Thu, 16 Jul 2009 15:35:28 -0700 (PDT) Received: from gandalf ([74.67.89.75]) by hrndva-omta03.mail.rr.com with ESMTP id <20090716223528234.PMXK15636@hrndva-omta03.mail.rr.com>; Thu, 16 Jul 2009 22:35:28 +0000 Date: Thu, 16 Jul 2009 18:35:27 -0400 (EDT) From: Steven Rostedt X-X-Sender: rostedt@gandalf.stny.rr.com To: Eric Sandeen cc: Christoph Hellwig , Felix Blyakher , linux-ia64@vger.kernel.org, xfs@oss.sgi.com, Ingo Molnar X-ASG-Orig-Subj: Re: [PATCH, RFC] xfs: event tracing support Subject: Re: [PATCH, RFC] xfs: event tracing support In-Reply-To: <4A5FA82F.6050903@sandeen.net> Message-ID: References: <20090616214844.GA12310@infradead.org> <4E752C93-A674-4725-AF23-C227C0A1E659@sgi.com> <20090622205904.GA1855@infradead.org> <4A5FA82F.6050903@sandeen.net> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Barracuda-Connect: hrndva-omtalb.mail.rr.com[71.74.56.122] X-Barracuda-Start-Time: 1247783729 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3596 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Added Ingo as well. On Thu, 16 Jul 2009, Eric Sandeen wrote: > Christoph Hellwig wrote: > > On Mon, Jun 22, 2009 at 01:01:35PM -0500, Felix Blyakher wrote: > >>> To use it make sure CONFIG_EVENT_TRACING is enabled and then enable > >>> all > >>> xfs trace channels by: > >>> > >>> echo 1 > /sys/kernel/debug/tracing/events/xfs/enable > >> Does event tracing work on ia64 platform? > >> I spent some time on it over weekend, but was not able even > >> to force "CONFIG_EVENT_TRACING=y" setting in the .config. > >> Seems to build ok on x86_64, which does have CONFIG_TRACING > >> in defconfig, and allows to set CONFIG_EVENT_TRACING. > > > > IA64 ftrace support was added earlier this year, but it seems it can't > > be enabled anymore since the big config option reshuffle. Now tracing > > support requires the architecture to define the TRACE_IRQFLAGS_SUPPORT > > and STACKTRACE_SUPPORT symbols, which seems to be missing on ia64. > > Where are we at with this one, I'd like to get this in for XFS but I > agree w/ Felix that throwing out a "working" trace infrastructure w/ > nothing to replace it on ia64 would not be great. > > Is this just config confusion, or is the functionality actually missing > on ia64? For PPC32, we have stacktrace support but there was lots of issues with the IRQFLAGS support. Namely, issues with handling traces in assembly when interrupts are off. Hence, we have an exception for PPC32 with the IRQFLAGS config. Is there a reason that we can't have STACKTRACE_SUPPORT for ia64? Perhaps it should be implemented? Probably not that difficult. Then we can add an exception for ia64 too if there's a technical reason that IRQFLAGS is not supported. Otherwise, IRQFLAGS should also be ported. That way, ia64 would benefit from lockdep as well. -- Steve From michael.monnerie@is.it-management.at Fri Jul 17 01:14:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6H6ERMR068454 for ; Fri, 17 Jul 2009 01:14:28 -0500 X-ASG-Debug-ID: 1247811768-2f5702450000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0C533A84F65 for ; Thu, 16 Jul 2009 23:22:48 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id FBxPWNarlojZvXgi for ; Thu, 16 Jul 2009 23:22:48 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 8018F575B for ; Fri, 17 Jul 2009 08:15:45 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id E31FE400154 for ; Fri, 17 Jul 2009 08:15:02 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Who did Aberdeen name as 2009 PLM Champion? Subject: Re: Who did Aberdeen name as 2009 PLM Champion? Date: Fri, 17 Jul 2009 08:15:02 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907170815.02493@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247811771 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0879 1.0000 -1.4654 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.47 X-Barracuda-Spam-Status: No, SCORE=-1.47 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3625 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Donnerstag 16 Juli 2009 PTC Info wrote: > This email was sent to: xfs@oss.sgi.com > > PTC, 140 Kendrick Street, Needham, MA 02494 USA > > If you wish to unsubscribe from all PTC Emails, please send a blank > email to unsubscribe@ptc.com. Did someone try to unsubscribe from this? Maybe they do it really? mfg zmi -- // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From sandy@crosshandstraining.org.uk Fri Jul 17 04:12:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.7 required=5.0 tests=BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER,URI_HEX autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6H9CL1M077625 for ; Fri, 17 Jul 2009 04:12:21 -0500 X-ASG-Debug-ID: 1247821978-7953015f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from DS4386.ds4386.dedicated.turbodns.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7765213A352B for ; Fri, 17 Jul 2009 02:12:58 -0700 (PDT) Received: from DS4386.ds4386.dedicated.turbodns.co.uk (server4386.dedicated.webfusion.co.uk [212.241.182.110]) by cuda.sgi.com with ESMTP id RMEQvF4KpdE219bF for ; Fri, 17 Jul 2009 02:12:58 -0700 (PDT) Received: from host81-139-168-163.in-addr.btopenworld.com ([81.139.181.114]) by ds4386.dedicated.turbodns.co.uk with MailEnable ESMTP; Fri, 17 Jul 2009 09:40:57 +0100 From: "Sandra Keating" X-ASG-Orig-Subj: =?ISO-8859-1?B?cmU6IKM4OSBwLnAuL2xhc3QgbWludXRlIHRyYWluaW5nIHBsYWNlcw==?= Subject: =?ISO-8859-1?B?cmU6IKM4OSBwLnAuL2xhc3QgbWludXRlIHRyYWluaW5nIHBsYWNlcw==?= X-Direct-Mail-Bounce: 6B1368A6-B096-4C99-8841-FD947A270438; xfs@oss.sgi.com Message-id: MIME-Version: 1.0 Date: Fri, 17 Jul 2009 09:40:54 +0100 To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=Direct-Mail-MIME-Boundary-2 X-Barracuda-Connect: server4386.dedicated.webfusion.co.uk[212.241.182.110] X-Barracuda-Start-Time: 1247821980 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0027 1.0000 -2.0033 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.49 X-Barracuda-Spam-Status: No, SCORE=-1.49 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA161f, HTML_MESSAGE, URI_HEX X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3635 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.32 URI_HEX URI: URI hostname has long hexadecimal sequence 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC5_SA161f Custom Rule SA161f X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --Direct-Mail-MIME-Boundary-2 Content-Type: text/plain; format=flowed; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Hello We have some last minute places available on these practical one-day traini= ng courses running in July. Creative & Professional Writing Skills=A0=96 Manchester =5B21 July=5D; Lond= on =5B27 July=5D Facilitation Skills =96 London =5B23 July=5D Perfect Podcasts =96 London =5B23 July=5D Media Relations - London =5B24 July=5D Public Speaking & PowerPoint Presentation Skills =96 London =5B28 July=5D At =A389 p.p., this is excellent value. This discount rate is available onl= y when you book and pay online at www.crosshandstraining.org.uk and is incl= usive of lunch, refreshments, course materials, certificate of completion a= nd website membership. Full programme details, together with alternative da= tes and locations can also be found online. Our workshops run from 10am to 5pm and are located in central venues. If this workshop isn=92t convenient, you are also invited to take advantage= of our special offer of =A399 plus VAT for any training place booked by 15= July 2009. This is still great value, especially if you or your colleagues= are interested in affordable, effective and practical training from a prov= en supplier. During the past ten years we have worked with over 1,000 organ= isations and trained more than 10,000 individuals.=A0 All of our workshops run throughout the year in London, Birmingham, Manches= ter, Edinburgh, Brussels and Geneva and we can these in-house/on-site, at e= xtremely competitive rates - starting at =A3999 plus VAT for up to 12 deleg= ates. =A0Other training courses include: Writing Press Releases Media Strategies & Campaigns Vodcast Production Techniques=A0 Marketing & Customer Service Strategies Presentation & Communication Skills Effective Training Skills =96 train the trainer=A0 Handling Interviews Emergency Planning & Call Handling Teambuilding & Group Dynamics Please note, our rates are subject to VAT at the prevailing rate. Regards, =A0 Sandra Keating =A0=A0 crosshands ltd, coreley, shropshire sy8 3ar, t: 01584 890970; e: bookings= =40crosshandstraining.org.uk =A0 company registration: 3136393 VAT registration: 682 1126 51 =A0 You have been sent this email because we understand that you wish to receiv= e information about our training services, however, if you have received th= is email by mistake please accept our sincere apologies. If you no longer w= ish to receive information about our training services, please inform us im= mediately by email to remove=40crosshandstraining.org.uk. =A0 =A0 =A0 =A0 =A0 --Direct-Mail-MIME-Boundary-2 Content-Type: text/html; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable
H= ello
W= e have some last minute places available on these practical one-day trainin= g courses running in July.
<= b>Facilitation Skills &=23x2013; London =5B23 July=5D
<= b>Perfect Podcasts &=23x2013; London =5B23 July=5D
<= b>Media Relations - London =5B24 July=5D
<= b>Public Speaking & PowerPoint Presentation Skills &=23x2013; London = =5B28 July=5D
A= t &=23xa3;89 p.p., this is excellent value. This discount rate is av= ailable only when you book and pay online at www.crosshandstraining.org.uk and is inclusive of lunch, refresh= ments, course materials, certificate of completion and website membership. = Full programme details, together with alternative dates and locations can a= lso be found online.
O= ur workshops run from 10am to 5pm and are located in central venues.
=
I= f this workshop isn&=23x2019;t convenient, you are also invited to take adv= antage of our special offer of &=23xa3;99 plus VAT for any training place b= ooked by 15 July 2009. This is still great value, especially if you or your= colleagues are interested in affordable, effective and practical training = from a proven supplier. During the past ten years we have worked with over = 1,000 organisations and trained more than 10,000 individuals.&=23xa0;
<= b>All of our workshops run throughout the year in London, Birmingham, M= anchester, Edinburgh, Brussels and Geneva and we can these in-house/on-site= , at extremely competitive rates - starting at &=23xa3;999 plus VAT for up = to 12 delegates. &=23xa0;Other training courses include:
<= b>Writing Press Releases
<= b>Media Strategies & Campaigns
<= b>Vodcast Production Techniques&=23xa0;
<= b>Marketing & Customer Service Strategies
<= b>Presentation & Communication Skills
<= b>Effective Training Skills &=23x2013; train the trainer&=23xa0;
=
<= b>Handling Interviews
<= b>Emergency Planning & Call Handling
<= b>Teambuilding & Group Dynamics
Pl= ease note, our rates are subject to VAT at the prevailing rate.

Re= gards,
&= =23xa0;
Sa= ndra Keating
&=23xa0;&=23xa0;
cr= osshands ltd, coreley, shropshire sy8 3ar, t: 01584 890970; e: bookings=40crosshandstrai= ning.org.uk
&= =23xa0;
co= mpany registration: 3136393 VAT registration: 682 1126 51
&= =23xa0;
Yo= u have been sent this email because we understand that you wish to receive = information about our training services, however, if you have received this= email by mistake please accept our sincere apologies. If you no longer wis= h to receive information about our training services, please inform us imme= diately by email to remove=40crosshandstraining.org.uk. 
&= =23xa0;
&= =23xa0;
&= =23xa0;
&= =23xa0;
&= =23xa0;
= --Direct-Mail-MIME-Boundary-2-- From milind@gslab.com Fri Jul 17 04:27:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6H9Rg4U078271 for ; Fri, 17 Jul 2009 04:27:43 -0500 X-ASG-Debug-ID: 1247823365-054d00820000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from padma.gslab.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 47486A85400 for ; Fri, 17 Jul 2009 02:36:06 -0700 (PDT) Received: from padma.gslab.com (padma.gslab.com [59.163.66.102]) by cuda.sgi.com with SMTP id gpNVDIUTU41t8U7a for ; Fri, 17 Jul 2009 02:36:06 -0700 (PDT) Received: from [10.59.24.36] (unknown [63.82.105.227]) (Authenticated sender: milind) by padma.gslab.com (Postfix) with ESMTP id 8176B1770283; Fri, 17 Jul 2009 14:58:18 +0530 (IST) Message-ID: <4A60442E.7010206@gslab.com> Date: Fri, 17 Jul 2009 02:28:14 -0700 From: Milind Dumbare User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: xfs mailing list , linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Multi threaded random IO Subject: Multi threaded random IO Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: padma.gslab.com[59.163.66.102] X-Barracuda-Start-Time: 1247823368 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0111 1.0000 -1.9485 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.95 X-Barracuda-Spam-Status: No, SCORE=-1.95 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Any standard comparison between multi threaded random Write vs multi threaded random Read on XFS or any other filesystem? I see multi threaded random Write faster than multi threaded random Read. Which is contradictory to standard "Reads faster that Writes" law. My test setup is. 10MB record size, 2TB filesize, 8 threads.iozone Any comments? Thanks, Milind From xtc@pcuf.fi Fri Jul 17 05:35:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HAZae7081051 for ; Fri, 17 Jul 2009 05:35:37 -0500 X-ASG-Debug-ID: 1247826975-5d2d02a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from hattara.pcuf.fi (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9A98736BFEC for ; Fri, 17 Jul 2009 03:36:16 -0700 (PDT) Received: from hattara.pcuf.fi (hattara.pcuf.fi [194.100.34.36]) by cuda.sgi.com with ESMTP id v1GKnGNWaYWMxlpX for ; Fri, 17 Jul 2009 03:36:16 -0700 (PDT) Received: from pcuf.fi (pcuf.fi [194.100.34.1]) by hattara.pcuf.fi (Postfix) with ESMTP id 9A9531700BE for ; Fri, 17 Jul 2009 13:35:53 +0300 (EEST) Received: by pcuf.fi (Postfix, from userid 12998) id DDECD13F77D; Fri, 17 Jul 2009 13:35:52 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by pcuf.fi (Postfix) with ESMTP id C720B13F6F4 for ; Fri, 17 Jul 2009 13:35:52 +0300 (EEST) Date: Fri, 17 Jul 2009 13:35:52 +0300 (EEST) From: =?ISO-8859-15?Q?J_P=E4lve?= To: xfs@oss.sgi.com X-ASG-Orig-Subj: Write barriers and hardware RAID Subject: Write barriers and hardware RAID Message-ID: User-Agent: Alpine 1.10 (LRH 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII X-pcuf-MailScanner-Information: Please contact the ISP for more information X-MailScanner-ID: 9A9531700BE.72662 X-pcuf-MailScanner: Found to be clean X-pcuf-MailScanner-From: xtc@pcuf.fi X-Barracuda-Connect: hattara.pcuf.fi[194.100.34.36] X-Barracuda-Start-Time: 1247826976 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3641 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, I'm setting up a server to provide storage for a couple of VMware ESXi servers. I'm using the latest stable Debian and I'm leaning towards using NFS with XFS. However, I'm concerned about data integrity in the event of power-out (we have UPS but they only last so long). Here are the specific questions I have: - The XFS FAQ states that with battery backup'd RAID hardware, both write barriers and individual disk cache should be turned off. However, I'm getting better benchmark results with both turned on. What I'm wondering is, will write barriers work as intended when used with hardware RAID controller (PERC 6/E)? Googling only turned up results relating to software RAID. - The XFS FAQ also states that virtualization products prevent write barriers from working correctly. Is this still the case (specifically with ESXi 3.5 and later) and is there anything that can be done about it? Does VMFS somehow work around this, or is the problem then just "out of sight, out of mind"? Bregs, JPa From eflorac@intellique.com Fri Jul 17 06:10:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_BRBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HBA94A083133 for ; Fri, 17 Jul 2009 06:10:10 -0500 X-ASG-Debug-ID: 1247829512-5754008c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp2-g21.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EBDF8A863E9 for ; Fri, 17 Jul 2009 04:18:33 -0700 (PDT) Received: from smtp2-g21.free.fr (smtp2-g21.free.fr [212.27.42.2]) by cuda.sgi.com with ESMTP id 8palkHF7ZF8llU4n for ; Fri, 17 Jul 2009 04:18:33 -0700 (PDT) Received: from smtp2-g21.free.fr (localhost [127.0.0.1]) by smtp2-g21.free.fr (Postfix) with ESMTP id D66374B010C; Fri, 17 Jul 2009 13:10:43 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp2-g21.free.fr (Postfix) with ESMTP id 9791D4B0173; Fri, 17 Jul 2009 13:10:40 +0200 (CEST) Date: Fri, 17 Jul 2009 13:10:43 +0200 From: Emmanuel Florac To: Milind Dumbare Cc: xfs mailing list , linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: Multi threaded random IO Subject: Re: Multi threaded random IO Message-ID: <20090717131043.19b8e7de@harpe.intellique.com> In-Reply-To: <4A60442E.7010206@gslab.com> References: <4A60442E.7010206@gslab.com> Organization: Intellique X-Mailer: Claws Mail 3.7.1 (GTK+ 2.16.1; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp2-g21.free.fr[212.27.42.2] X-Barracuda-Start-Time: 1247829515 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3644 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Le Fri, 17 Jul 2009 02:28:14 -0700 Milind Dumbare =E9crivait: > I see multi threaded random Write faster than multi threaded random=20 > Read. Which is contradictory to standard "Reads faster that Writes" > law. >=20 > My test setup is. > 10MB record size, 2TB filesize, 8 threads.iozone >=20 > Any comments? Well it very much depends upon your underlying hardware. For instance 3Ware RAID cards with default settings read very poorly, they even get much slower in sequential read than sequential write. So basically you have to provide much more detailed hardware setup : storage hardware, attachment, number and type of drives, RAID level... --=20 ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From olaf@sgi.com Fri Jul 17 06:45:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HBjN4b085689 for ; Fri, 17 Jul 2009 06:45:23 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6HBk3Tx374617; Fri, 17 Jul 2009 13:46:03 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6HBk2xg374698; Fri, 17 Jul 2009 13:46:02 +0200 (MEST) To: Eric Sandeen Cc: xfs mailing list Subject: Re: [PATCH V3] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> <4A5F3DBA.9040005@sandeen.net> <4A5F7B7B.6020903@sandeen.net> From: Olaf Weber Date: Fri, 17 Jul 2009 13:46:02 +0200 In-Reply-To: <4A5F7B7B.6020903@sandeen.net> (Eric Sandeen's message of "Thu, 16 Jul 2009 14:11:55 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: > commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused > the full bmv_count's worth of getbmapx structures to get > allocated; telling it to do MAXEXTNUM was a bit insane, > resulting in ENOMEM every time. > Chop it down to something reasonable, the number of slots > in the caller's input buffer. If this is too large the > caller may get ENOMEM but the reason should not be a > mystery, and they can try again with something smaller. > We add 1 to the value because in the normal getbmap > world, bmv_count includes the header and xfs_getbmap does: > nex = bmv->bmv_count - 1; > if (nex <= 0) > return XFS_ERROR(EINVAL); > Signed-off-by: Eric Sandeen Reviewed-by: Olaf Weber > --- > V2: set it to the fiemap info's fi_extents_max > V3: bump up by one to accomodate expected bmv header in core > diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c > index 58973bb..954d701 100644 > --- a/fs/xfs/linux-2.6/xfs_iops.c > +++ b/fs/xfs/linux-2.6/xfs_iops.c > @@ -680,8 +680,7 @@ xfs_vn_fiemap( > else > bm.bmv_length = BTOBB(length); > - /* our formatter will tell xfs_getbmap when to stop. */ > - bm.bmv_count = MAXEXTNUM; > + bm.bmv_count = fieinfo->fi_extents_max + 1; > bm.bmv_iflags = BMV_IF_PREALLOC; > if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) > bm.bmv_iflags |= BMV_IF_ATTRFORK; -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From BATV+b7b85e6478aa297102a7+2154+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 17 09:09:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HE9G1e093468 for ; Fri, 17 Jul 2009 09:09:18 -0500 X-ASG-Debug-ID: 1247839796-3689017f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1A9121D4CFE2; Fri, 17 Jul 2009 07:09:56 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id CWGcKpTVjmkFPlin; Fri, 17 Jul 2009 07:09:56 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MRo8J-0007p2-IB; Fri, 17 Jul 2009 14:09:55 +0000 Date: Fri, 17 Jul 2009 10:09:55 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , Felix Blyakher , linux-ia64@vger.kernel.org, Steven Rostedt , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH, RFC] xfs: event tracing support Subject: Re: [PATCH, RFC] xfs: event tracing support Message-ID: <20090717140955.GA26050@infradead.org> References: <20090616214844.GA12310@infradead.org> <4E752C93-A674-4725-AF23-C227C0A1E659@sgi.com> <20090622205904.GA1855@infradead.org> <4A5FA82F.6050903@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A5FA82F.6050903@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247839797 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 16, 2009 at 05:22:39PM -0500, Eric Sandeen wrote: > Where are we at with this one, I'd like to get this in for XFS but I > agree w/ Felix that throwing out a "working" trace infrastructure w/ > nothing to replace it on ia64 would not be great. Well, it's not actuall working in these sense of that it isn't and never has been in mainline and also is utterly bit-rotted. I have absolutely no interested in keeping a tracing implementation away from mainline that just works out of the box (not just on x86 but also on powerpc and others) just because ia64 is too slow to get modern features. And it's not like we got any interesting amount of IA64 users, nor have does SGI who seems to be interested in IA64 do a lot of patches to XFS. From BATV+b7b85e6478aa297102a7+2154+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 17 09:49:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_44,J_CHICKENPOX_61,J_CHICKENPOX_62,J_CHICKENPOX_63, J_CHICKENPOX_65,J_CHICKENPOX_74,J_CHICKENPOX_81,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HEnqtY096160 for ; Fri, 17 Jul 2009 09:49:52 -0500 X-ASG-Debug-ID: 1247842232-0318003c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 938521D4D0AD for ; Fri, 17 Jul 2009 07:50:32 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id R1EGqZqrznyT3D5Q for ; Fri, 17 Jul 2009 07:50:32 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MRolb-0005Wt-L5; Fri, 17 Jul 2009 14:50:31 +0000 Date: Fri, 17 Jul 2009 10:50:31 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: Steven Rostedt , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: [PATCH] xfs: event tracing support Subject: [PATCH] xfs: event tracing support Message-ID: <20090717145031.GA17590@infradead.org> References: <20090616214844.GA12310@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090616214844.GA12310@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247842232 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Subject: xfs: event tracing support From: Christoph Hellwig Convert the old xfs tracing support that could only be used with the out of tree kdb and xfsidbg patches to use the generic event tracer. To use it make sure CONFIG_EVENT_TRACING is enabled and then enable all xfs trace channels by: echo 1 > /sys/kernel/debug/tracing/events/xfs/enable Alternatively you can also enable invivididual trace events in XFS or even filter on them. Take a look at Documentation/trace/events.txt for details. To reads the events do a cat /sys/kernel/debug/tracing/trace which will give output like this: # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | <...>-23195 [000] 1884167.739031: xfs_alloc_extent: dev 253:21 first agno 0 agbno 5448 minlen 1 maxlen 1 mod 0 prod 1 minleft 2 total 0 alignment 1 len 1 type NEAR_BNO otype START_BNO wasdel 0 wasfromfl 0 isfl 0 userdata 1 by trace_xfs_alloc_extent <...>-23195 [000] 1884167.739031: xfs_agf: dev 253:21 agno 0 flags FREEBLKS length 579819 roots b 1 c 2 levels b 1 c 1 flfirst 62 fllast 65 flcount 4 freeblks 574368 longest 531488 by xfs_alloc_ag_vextent <...>-23195 [000] 1884167.739031: xfs_buf_item: dev 253:21 BLOG bip 0xd6cb54a0 bp 0xf5a90bd8 flags |DIRTY|LOGGED recur 0 refcount 15 blkno 0x1 blen 0x200 bpflags |MAPPED|ASYNC|DONE|DELWRI|TRYLOCK|PAGE_CACHE|DELWRI_Q pincount 14 lockval 0 lidesc 0xeba5cb58 liflags IN_AIL <...>-23195 [000] 1884167.739032: xfs_alloc_busy: dev 253:21 notfound agno 0 agbno 5448 len 1 slot 0 by xfs_alloc_search_busy <...>-23195 [000] 1884167.739033: xfs_bmap: dev 253:21 ino 0x4349 pre xfs_bmap_add_extent_hole_real:LC df idx 15 offset1 67 block1 1675 count1 3773 flag1 0 offset2 0 block2 1675 count2 0 flag2 0 <...>-23195 [000] 1884167.739033: xfs_bmap: dev 253:21 ino 0x4349 post xfs_bmap_add_extent_hole_real:LC df idx 15 offset1 67 block1 1675 count1 3774 flag1 0 offset2 0 block2 1675 count2 0 flag2 0 <...>-23195 [000] 1884167.739035: xfs_buf: dev 253:21 got_lock hold 3 lock 0 val 0x0 offset 0x5f9000 size 0x1000 flags MAPPED|ASYNC|DONE|DELWRI|PAGE_CACHE|DELWRI_Q by xfs_buf_get_flags <...>-23195 [000] 1884167.739035: xfs_buf: dev 253:21 get hold 3 lock 0 val 0x14005 offset 0x5f9000 size 0x1000 flags MAPPED|ASYNC|DONE|DELWRI|PAGE_CACHE|DELWRI_Q by xfs_buf_read_flags This patch converts most existing trace points in XFS more or less fully to the event tracer. Note that the infrastructure already provides pid value (and theoretically the task name, although that's buggy currently) so we don't have to record them ourselves. There also are a couple of places where we provide information more usefull for general tracing instead of pointers for gdb, e.g. the inode number instead of the inode pointer address. A couple of tracers are not converted currently: - the log grant tracing is gone. There was just one callsite left with most state changes missing, indicating severe bitrot. I don't plan to re-introduce it for now. - the filestreams tracing is left as-is for now. It has some very funky tracers covering all kinds of special cases. If anyone cares enough about filestreams they should take a look. - the btree tracer. Due to the different record/key types we can't handle it with the current tracing infrastructure. I'm working with Steve to get some infrastructure to get this back. All this gives a quite massive patch of: 67 files changed, 1563 insertions(+), 2237 deletions(-) So while adding actual tracing support without xfsidbg we actually remove lots of lines of code. Signed-off-by: Christoph Hellwig -- Updates since v1: - move the TRACE_SYSTEM define out of the include guard - add a few missing xfs_trace.h inclusions that escaped quilt - fixed a couple of format string warnings on x86-64, now also tested on x86-64. Index: linux-2.6/fs/xfs/Makefile =================================================================== --- linux-2.6.orig/fs/xfs/Makefile 2009-06-16 22:37:56.088814606 +0200 +++ linux-2.6/fs/xfs/Makefile 2009-06-16 22:45:13.894814533 +0200 @@ -90,8 +90,7 @@ xfs-y += xfs_alloc.o \ xfs_rw.o \ xfs_dmops.o -xfs-$(CONFIG_XFS_TRACE) += xfs_btree_trace.o \ - xfs_dir2_trace.o +xfs-$(CONFIG_XFS_TRACE) += xfs_btree_trace.o # Objects in linux/ xfs-y += $(addprefix $(XFS_LINUX)/, \ @@ -113,6 +112,3 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ xfs-y += $(addprefix support/, \ debug.o \ uuid.o) - -xfs-$(CONFIG_XFS_TRACE) += support/ktrace.o - Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c 2009-06-16 22:37:56.092814347 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c 2009-06-16 22:37:58.194969357 +0200 @@ -38,6 +38,7 @@ #include "xfs_rw.h" #include "xfs_iomap.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include #include @@ -76,7 +77,7 @@ xfs_ioend_wake( wake_up(to_ioend_wq(ip)); } -STATIC void +void xfs_count_page_state( struct page *page, int *delalloc, @@ -98,48 +99,6 @@ xfs_count_page_state( } while ((bh = bh->b_this_page) != head); } -#if defined(XFS_RW_TRACE) -void -xfs_page_trace( - int tag, - struct inode *inode, - struct page *page, - unsigned long pgoff) -{ - xfs_inode_t *ip; - loff_t isize = i_size_read(inode); - loff_t offset = page_offset(page); - int delalloc = -1, unmapped = -1, unwritten = -1; - - if (page_has_buffers(page)) - xfs_count_page_state(page, &delalloc, &unmapped, &unwritten); - - ip = XFS_I(inode); - if (!ip->i_rwtrace) - return; - - ktrace_enter(ip->i_rwtrace, - (void *)((unsigned long)tag), - (void *)ip, - (void *)inode, - (void *)page, - (void *)pgoff, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)((unsigned long)((isize >> 32) & 0xffffffff)), - (void *)((unsigned long)(isize & 0xffffffff)), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)delalloc), - (void *)((unsigned long)unmapped), - (void *)((unsigned long)unwritten), - (void *)((unsigned long)current_pid()), - (void *)NULL); -} -#else -#define xfs_page_trace(tag, inode, page, pgoff) -#endif - STATIC struct block_device * xfs_find_bdev_for_inode( struct xfs_inode *ip) @@ -1232,7 +1191,7 @@ xfs_vm_writepage( int delalloc, unmapped, unwritten; struct inode *inode = page->mapping->host; - xfs_page_trace(XFS_WRITEPAGE_ENTER, inode, page, 0); + trace_xfs_page(inode, page, 0, "writepage"); /* * We need a transaction if: @@ -1329,7 +1288,7 @@ xfs_vm_releasepage( .nr_to_write = 1, }; - xfs_page_trace(XFS_RELEASEPAGE_ENTER, inode, page, 0); + trace_xfs_page(inode, page, 0, "releasepage"); if (!page_has_buffers(page)) return 0; @@ -1609,8 +1568,7 @@ xfs_vm_invalidatepage( struct page *page, unsigned long offset) { - xfs_page_trace(XFS_INVALIDPAGE_ENTER, - page->mapping->host, page, offset); + trace_xfs_page(page->mapping->host, page, offset, "invalidatepage"); block_invalidatepage(page, offset); } Index: linux-2.6/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_buf.c 2009-06-16 22:37:56.097814635 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_buf.c 2009-06-16 22:37:58.195968716 +0200 @@ -39,6 +39,7 @@ #include "xfs_ag.h" #include "xfs_dmapi.h" #include "xfs_mount.h" +#include "xfs_trace.h" static kmem_zone_t *xfs_buf_zone; STATIC int xfsbufd(void *); @@ -53,34 +54,6 @@ static struct workqueue_struct *xfslogd_ struct workqueue_struct *xfsdatad_workqueue; struct workqueue_struct *xfsconvertd_workqueue; -#ifdef XFS_BUF_TRACE -void -xfs_buf_trace( - xfs_buf_t *bp, - char *id, - void *data, - void *ra) -{ - ktrace_enter(xfs_buf_trace_buf, - bp, id, - (void *)(unsigned long)bp->b_flags, - (void *)(unsigned long)bp->b_hold.counter, - (void *)(unsigned long)bp->b_sema.count, - (void *)current, - data, ra, - (void *)(unsigned long)((bp->b_file_offset>>32) & 0xffffffff), - (void *)(unsigned long)(bp->b_file_offset & 0xffffffff), - (void *)(unsigned long)bp->b_buffer_length, - NULL, NULL, NULL, NULL, NULL); -} -ktrace_t *xfs_buf_trace_buf; -#define XFS_BUF_TRACE_SIZE 4096 -#define XB_TRACE(bp, id, data) \ - xfs_buf_trace(bp, id, (void *)data, (void *)__builtin_return_address(0)) -#else -#define XB_TRACE(bp, id, data) do { } while (0) -#endif - #ifdef XFS_BUF_LOCK_TRACKING # define XB_SET_OWNER(bp) ((bp)->b_last_holder = current->pid) # define XB_CLEAR_OWNER(bp) ((bp)->b_last_holder = -1) @@ -279,7 +252,7 @@ _xfs_buf_initialize( init_waitqueue_head(&bp->b_waiters); XFS_STATS_INC(xb_create); - XB_TRACE(bp, "initialize", target); + xfs_buftrace(bp, "initialize"); } /* @@ -332,7 +305,7 @@ void xfs_buf_free( xfs_buf_t *bp) { - XB_TRACE(bp, "free", 0); + xfs_buftrace(bp, "free"); ASSERT(list_empty(&bp->b_hash_list)); @@ -445,7 +418,7 @@ _xfs_buf_lookup_pages( if (page_count == bp->b_page_count) bp->b_flags |= XBF_DONE; - XB_TRACE(bp, "lookup_pages", (long)page_count); + xfs_buftrace_val(bp, "lookup_pages", page_count); return error; } @@ -548,7 +521,7 @@ found: if (down_trylock(&bp->b_sema)) { if (!(flags & XBF_TRYLOCK)) { /* wait for buffer ownership */ - XB_TRACE(bp, "get_lock", 0); + xfs_buftrace(bp, "get_lock"); xfs_buf_lock(bp); XFS_STATS_INC(xb_get_locked_waited); } else { @@ -571,7 +544,7 @@ found: ASSERT((bp->b_flags & _XBF_DELWRI_Q) == 0); bp->b_flags &= XBF_MAPPED; } - XB_TRACE(bp, "got_lock", 0); + xfs_buftrace(bp, "got_lock"); XFS_STATS_INC(xb_get_locked); return bp; } @@ -627,7 +600,7 @@ xfs_buf_get_flags( bp->b_bn = ioff; bp->b_count_desired = bp->b_buffer_length; - XB_TRACE(bp, "get", (unsigned long)flags); + xfs_buftrace_val(bp, "get", flags); return bp; no_buffer: @@ -644,7 +617,7 @@ _xfs_buf_read( { int status; - XB_TRACE(bp, "_xfs_buf_read", (unsigned long)flags); + xfs_buftrace_val(bp, "_xfs_buf_read", flags); ASSERT(!(flags & (XBF_DELWRI|XBF_WRITE))); ASSERT(bp->b_bn != XFS_BUF_DADDR_NULL); @@ -674,18 +647,18 @@ xfs_buf_read_flags( bp = xfs_buf_get_flags(target, ioff, isize, flags); if (bp) { if (!XFS_BUF_ISDONE(bp)) { - XB_TRACE(bp, "read", (unsigned long)flags); + xfs_buftrace_val(bp, "read", flags); XFS_STATS_INC(xb_get_read); _xfs_buf_read(bp, flags); } else if (flags & XBF_ASYNC) { - XB_TRACE(bp, "read_async", (unsigned long)flags); + xfs_buftrace_val(bp, "read_async", flags); /* * Read ahead call which is already satisfied, * drop the buffer */ goto no_buffer; } else { - XB_TRACE(bp, "read_done", (unsigned long)flags); + xfs_buftrace_val(bp, "read_done", flags); /* We do not want read in the flags */ bp->b_flags &= ~XBF_READ; } @@ -823,7 +796,7 @@ xfs_buf_get_noaddr( xfs_buf_unlock(bp); - XB_TRACE(bp, "no_daddr", len); + xfs_buftrace_val(bp, "no_daddr", len); return bp; fail_free_mem: @@ -846,7 +819,7 @@ xfs_buf_hold( xfs_buf_t *bp) { atomic_inc(&bp->b_hold); - XB_TRACE(bp, "hold", 0); + xfs_buftrace_val(bp, "hold", 0); } /* @@ -859,7 +832,7 @@ xfs_buf_rele( { xfs_bufhash_t *hash = bp->b_hash; - XB_TRACE(bp, "rele", bp->b_relse); + xfs_buftrace(bp, "rele"); if (unlikely(!hash)) { ASSERT(!bp->b_relse); @@ -911,19 +884,20 @@ xfs_buf_cond_lock( locked = down_trylock(&bp->b_sema) == 0; if (locked) { XB_SET_OWNER(bp); + xfs_buftrace(bp, "cond_lock"); + return 0; } - XB_TRACE(bp, "cond_lock", (long)locked); - return locked ? 0 : -EBUSY; + + xfs_buftrace(bp, "cond_lock_fail"); + return -EBUSY; } -#if defined(DEBUG) || defined(XFS_BLI_TRACE) int xfs_buf_lock_value( xfs_buf_t *bp) { return bp->b_sema.count; } -#endif /* * Locks a buffer object. @@ -935,12 +909,12 @@ void xfs_buf_lock( xfs_buf_t *bp) { - XB_TRACE(bp, "lock", 0); + xfs_buftrace(bp, "lock"); if (atomic_read(&bp->b_io_remaining)) blk_run_address_space(bp->b_target->bt_mapping); down(&bp->b_sema); XB_SET_OWNER(bp); - XB_TRACE(bp, "locked", 0); + xfs_buftrace(bp, "locked"); } /* @@ -962,7 +936,7 @@ xfs_buf_unlock( XB_CLEAR_OWNER(bp); up(&bp->b_sema); - XB_TRACE(bp, "unlock", 0); + xfs_buftrace(bp, "unlock"); } @@ -975,7 +949,7 @@ xfs_buf_pin( xfs_buf_t *bp) { atomic_inc(&bp->b_pin_count); - XB_TRACE(bp, "pin", (long)bp->b_pin_count.counter); + xfs_buftrace_val(bp, "pin", bp->b_pin_count.counter); } void @@ -984,7 +958,7 @@ xfs_buf_unpin( { if (atomic_dec_and_test(&bp->b_pin_count)) wake_up_all(&bp->b_waiters); - XB_TRACE(bp, "unpin", (long)bp->b_pin_count.counter); + xfs_buftrace_val(bp, "unpin", bp->b_pin_count.counter); } int @@ -1035,7 +1009,7 @@ xfs_buf_iodone_work( */ if ((bp->b_error == EOPNOTSUPP) && (bp->b_flags & (XBF_ORDERED|XBF_ASYNC)) == (XBF_ORDERED|XBF_ASYNC)) { - XB_TRACE(bp, "ordered_retry", bp->b_iodone); + xfs_buftrace(bp, "ordered_retry"); bp->b_flags &= ~XBF_ORDERED; bp->b_flags |= _XFS_BARRIER_FAILED; xfs_buf_iorequest(bp); @@ -1054,7 +1028,7 @@ xfs_buf_ioend( if (bp->b_error == 0) bp->b_flags |= XBF_DONE; - XB_TRACE(bp, "iodone", bp->b_iodone); + xfs_buftrace(bp, "iodone"); if ((bp->b_iodone) || (bp->b_flags & XBF_ASYNC)) { if (schedule) { @@ -1075,7 +1049,7 @@ xfs_buf_ioerror( { ASSERT(error >= 0 && error <= 0xffff); bp->b_error = (unsigned short)error; - XB_TRACE(bp, "ioerror", (unsigned long)error); + xfs_buftrace_val(bp, "ioerror", error); } int @@ -1083,7 +1057,7 @@ xfs_bawrite( void *mp, struct xfs_buf *bp) { - XB_TRACE(bp, "bawrite", 0); + xfs_buftrace(bp, "bawrite"); ASSERT(bp->b_bn != XFS_BUF_DADDR_NULL); @@ -1102,7 +1076,7 @@ xfs_bdwrite( void *mp, struct xfs_buf *bp) { - XB_TRACE(bp, "bdwrite", 0); + xfs_buftrace(bp, "bdwrite"); bp->b_strat = xfs_bdstrat_cb; bp->b_mount = mp; @@ -1253,7 +1227,7 @@ int xfs_buf_iorequest( xfs_buf_t *bp) { - XB_TRACE(bp, "iorequest", 0); + xfs_buftrace(bp, "iorequest"); if (bp->b_flags & XBF_DELWRI) { xfs_buf_delwri_queue(bp, 1); @@ -1287,11 +1261,11 @@ int xfs_buf_iowait( xfs_buf_t *bp) { - XB_TRACE(bp, "iowait", 0); + xfs_buftrace(bp, "iowait"); if (atomic_read(&bp->b_io_remaining)) blk_run_address_space(bp->b_target->bt_mapping); wait_for_completion(&bp->b_iowait); - XB_TRACE(bp, "iowaited", (long)bp->b_error); + xfs_buftrace_val(bp, "iowaited", bp->b_error); return bp->b_error; } @@ -1604,7 +1578,8 @@ xfs_buf_delwri_queue( struct list_head *dwq = &bp->b_target->bt_delwrite_queue; spinlock_t *dwlk = &bp->b_target->bt_delwrite_lock; - XB_TRACE(bp, "delwri_q", (long)unlock); + xfs_buftrace_val(bp, "delwri_q", unlock); + ASSERT((bp->b_flags&(XBF_DELWRI|XBF_ASYNC)) == (XBF_DELWRI|XBF_ASYNC)); spin_lock(dwlk); @@ -1644,7 +1619,7 @@ xfs_buf_delwri_dequeue( if (dequeued) xfs_buf_rele(bp); - XB_TRACE(bp, "delwri_dq", (long)dequeued); + xfs_buftrace_val(bp, "delwri_dq", dequeued); } STATIC void @@ -1692,7 +1667,7 @@ xfs_buf_delwri_split( INIT_LIST_HEAD(list); spin_lock(dwlk); list_for_each_entry_safe(bp, n, dwq, b_list) { - XB_TRACE(bp, "walkq1", (long)xfs_buf_ispin(bp)); + xfs_buftrace_val(bp, "walkq1", xfs_buf_ispin(bp)); ASSERT(bp->b_flags & XBF_DELWRI); if (!xfs_buf_ispin(bp) && !xfs_buf_cond_lock(bp)) { @@ -1816,14 +1791,10 @@ xfs_flush_buftarg( int __init xfs_buf_init(void) { -#ifdef XFS_BUF_TRACE - xfs_buf_trace_buf = ktrace_alloc(XFS_BUF_TRACE_SIZE, KM_NOFS); -#endif - xfs_buf_zone = kmem_zone_init_flags(sizeof(xfs_buf_t), "xfs_buf", KM_ZONE_HWALIGN, NULL); if (!xfs_buf_zone) - goto out_free_trace_buf; + goto out; xfslogd_workqueue = create_workqueue("xfslogd"); if (!xfslogd_workqueue) @@ -1846,10 +1817,7 @@ xfs_buf_init(void) destroy_workqueue(xfslogd_workqueue); out_free_buf_zone: kmem_zone_destroy(xfs_buf_zone); - out_free_trace_buf: -#ifdef XFS_BUF_TRACE - ktrace_free(xfs_buf_trace_buf); -#endif + out: return -ENOMEM; } @@ -1861,9 +1829,6 @@ xfs_buf_terminate(void) destroy_workqueue(xfsdatad_workqueue); destroy_workqueue(xfslogd_workqueue); kmem_zone_destroy(xfs_buf_zone); -#ifdef XFS_BUF_TRACE - ktrace_free(xfs_buf_trace_buf); -#endif } #ifdef CONFIG_KDB_MODULES Index: linux-2.6/fs/xfs/linux-2.6/xfs_buf.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_buf.h 2009-06-16 22:37:56.102814993 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_buf.h 2009-06-16 22:37:58.196969053 +0200 @@ -95,6 +95,28 @@ typedef enum { _XFS_BARRIER_FAILED = (1 << 23), } xfs_buf_flags_t; +#define XFS_BUF_FLAGS \ + { XBF_READ, "READ" }, \ + { XBF_WRITE, "WRITE" }, \ + { XBF_MAPPED, "MAPPED" }, \ + { XBF_ASYNC, "ASYNC" }, \ + { XBF_DONE, "DONE" }, \ + { XBF_DELWRI, "DELWRI" }, \ + { XBF_STALE, "STALE" }, \ + { XBF_FS_MANAGED, "FS_MANAGED" }, \ + { XBF_ORDERED, "ORDERED" }, \ + { XBF_READ_AHEAD, "READ_AHEAD" }, \ + { XBF_LOCK, "LOCK" }, /* should never be set */\ + { XBF_TRYLOCK, "TRYLOCK" }, /* ditto */\ + { XBF_DONT_BLOCK, "DONT_BLOCK" }, /* ditto */\ + { _XBF_PAGE_CACHE, "PAGE_CACHE" }, \ + { _XBF_PAGES, "PAGES" }, \ + { _XBF_RUN_QUEUES, "RUN_QUEUES" }, \ + { _XBF_DELWRI_Q, "DELWRI_Q" }, \ + { _XBF_PAGE_LOCKED, "PAGE_LOCKED" }, \ + { _XFS_BARRIER_FAILED, "BARRIER_FAILED" } + + typedef enum { XBT_FORCE_SLEEP = 0, XBT_FORCE_FLUSH = 1, @@ -248,13 +270,6 @@ extern void xfs_buf_delwri_dequeue(xfs_b extern int xfs_buf_init(void); extern void xfs_buf_terminate(void); -#ifdef XFS_BUF_TRACE -extern ktrace_t *xfs_buf_trace_buf; -extern void xfs_buf_trace(xfs_buf_t *, char *, void *, void *); -#else -#define xfs_buf_trace(bp,id,ptr,ra) do { } while (0) -#endif - #define xfs_buf_target_name(target) \ ({ char __b[BDEVNAME_SIZE]; bdevname((target)->bt_bdev, __b); __b; }) @@ -370,10 +385,6 @@ static inline void xfs_buf_relse(xfs_buf #define xfs_bpin(bp) xfs_buf_pin(bp) #define xfs_bunpin(bp) xfs_buf_unpin(bp) - -#define xfs_buftrace(id, bp) \ - xfs_buf_trace(bp, id, NULL, (void *)__builtin_return_address(0)) - #define xfs_biodone(bp) xfs_buf_ioend(bp, 0) #define xfs_biomove(bp, off, len, data, rw) \ Index: linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_lrw.c 2009-06-16 22:37:56.106814804 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c 2009-06-16 22:37:58.197990761 +0200 @@ -48,73 +48,12 @@ #include "xfs_utils.h" #include "xfs_iomap.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include -#if defined(XFS_RW_TRACE) -void -xfs_rw_enter_trace( - int tag, - xfs_inode_t *ip, - void *data, - size_t segs, - loff_t offset, - int ioflags) -{ - if (ip->i_rwtrace == NULL) - return; - ktrace_enter(ip->i_rwtrace, - (void *)(unsigned long)tag, - (void *)ip, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)data, - (void *)((unsigned long)segs), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)ioflags), - (void *)((unsigned long)((ip->i_new_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_new_size & 0xffffffff)), - (void *)((unsigned long)current_pid()), - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL); -} - -void -xfs_inval_cached_trace( - xfs_inode_t *ip, - xfs_off_t offset, - xfs_off_t len, - xfs_off_t first, - xfs_off_t last) -{ - - if (ip->i_rwtrace == NULL) - return; - ktrace_enter(ip->i_rwtrace, - (void *)(__psint_t)XFS_INVAL_CACHED, - (void *)ip, - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)((len >> 32) & 0xffffffff)), - (void *)((unsigned long)(len & 0xffffffff)), - (void *)((unsigned long)((first >> 32) & 0xffffffff)), - (void *)((unsigned long)(first & 0xffffffff)), - (void *)((unsigned long)((last >> 32) & 0xffffffff)), - (void *)((unsigned long)(last & 0xffffffff)), - (void *)((unsigned long)current_pid()), - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL); -} -#endif - /* * xfs_iozero * @@ -250,8 +189,7 @@ xfs_read( } } - xfs_rw_enter_trace(XFS_READ_ENTER, ip, - (void *)iovp, segs, *offset, ioflags); + trace_xfs_rw(ip, size, *offset, ioflags, "read"); iocb->ki_pos = *offset; ret = generic_file_aio_read(iocb, iovp, segs, *offset); @@ -294,8 +232,9 @@ xfs_splice_read( return -error; } } - xfs_rw_enter_trace(XFS_SPLICE_READ_ENTER, ip, - pipe, count, *ppos, ioflags); + + trace_xfs_rw(ip, count, *ppos, ioflags, "splice_read"); + ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); if (ret > 0) XFS_STATS_ADD(xs_read_bytes, ret); @@ -344,8 +283,8 @@ xfs_splice_write( ip->i_new_size = new_size; xfs_iunlock(ip, XFS_ILOCK_EXCL); - xfs_rw_enter_trace(XFS_SPLICE_WRITE_ENTER, ip, - pipe, count, *ppos, ioflags); + trace_xfs_rw(ip, count, *ppos, ioflags, "splice_write"); + ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); if (ret > 0) XFS_STATS_ADD(xs_write_bytes, ret); @@ -712,8 +651,6 @@ start: if ((ioflags & IO_ISDIRECT)) { if (mapping->nrpages) { WARN_ON(need_i_mutex == 0); - xfs_inval_cached_trace(xip, pos, -1, - (pos & PAGE_CACHE_MASK), -1); error = xfs_flushinval_pages(xip, (pos & PAGE_CACHE_MASK), -1, FI_REMAPF_LOCKED); @@ -730,8 +667,7 @@ start: need_i_mutex = 0; } - xfs_rw_enter_trace(XFS_DIOWR_ENTER, xip, (void *)iovp, segs, - *offset, ioflags); + trace_xfs_rw(xip, count, *offset, ioflags, "write"); ret = generic_file_direct_write(iocb, iovp, &segs, pos, offset, count, ocount); @@ -754,8 +690,7 @@ start: ssize_t ret2 = 0; write_retry: - xfs_rw_enter_trace(XFS_WRITE_ENTER, xip, (void *)iovp, segs, - *offset, ioflags); + trace_xfs_rw(xip, count, *offset, ioflags, "write"); ret2 = generic_file_buffered_write(iocb, iovp, segs, pos, offset, count, ret); /* @@ -860,7 +795,7 @@ int xfs_bdstrat_cb(struct xfs_buf *bp) { if (XFS_FORCED_SHUTDOWN(bp->b_mount)) { - xfs_buftrace("XFS__BDSTRAT IOERROR", bp); + xfs_buftrace(bp, "bdstrat_cb_shut"); /* * Metadata write that didn't get logged but * written delayed anyway. These aren't associated @@ -893,7 +828,7 @@ xfsbdstrat( return; } - xfs_buftrace("XFSBDSTRAT IOERROR", bp); + xfs_buftrace(bp, "bdstrat_shut"); xfs_bioerror_relse(bp); } Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.c 2009-06-16 22:37:56.111814253 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.c 2009-06-16 22:37:58.198969727 +0200 @@ -15,6 +15,7 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + #include "xfs.h" #include "xfs_bit.h" #include "xfs_log.h" @@ -52,11 +53,12 @@ #include "xfs_trans_priv.h" #include "xfs_filestream.h" #include "xfs_da_btree.h" -#include "xfs_dir2_trace.h" #include "xfs_extfree_item.h" #include "xfs_mru_cache.h" #include "xfs_inode_item.h" #include "xfs_sync.h" +#define CREATE_TRACE_POINTS +#include "xfs_trace.h" #include #include @@ -67,6 +69,8 @@ #include #include + + static struct super_operations xfs_super_operations; static kmem_zone_t *xfs_ioend_zone; mempool_t *xfs_ioend_pool; @@ -1554,94 +1558,6 @@ static struct file_system_type xfs_fs_ty }; STATIC int __init -xfs_alloc_trace_bufs(void) -{ -#ifdef XFS_ALLOC_TRACE - xfs_alloc_trace_buf = ktrace_alloc(XFS_ALLOC_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_alloc_trace_buf) - goto out; -#endif -#ifdef XFS_BMAP_TRACE - xfs_bmap_trace_buf = ktrace_alloc(XFS_BMAP_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_bmap_trace_buf) - goto out_free_alloc_trace; -#endif -#ifdef XFS_BTREE_TRACE - xfs_allocbt_trace_buf = ktrace_alloc(XFS_ALLOCBT_TRACE_SIZE, - KM_MAYFAIL); - if (!xfs_allocbt_trace_buf) - goto out_free_bmap_trace; - - xfs_inobt_trace_buf = ktrace_alloc(XFS_INOBT_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_inobt_trace_buf) - goto out_free_allocbt_trace; - - xfs_bmbt_trace_buf = ktrace_alloc(XFS_BMBT_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_bmbt_trace_buf) - goto out_free_inobt_trace; -#endif -#ifdef XFS_ATTR_TRACE - xfs_attr_trace_buf = ktrace_alloc(XFS_ATTR_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_attr_trace_buf) - goto out_free_bmbt_trace; -#endif -#ifdef XFS_DIR2_TRACE - xfs_dir2_trace_buf = ktrace_alloc(XFS_DIR2_GTRACE_SIZE, KM_MAYFAIL); - if (!xfs_dir2_trace_buf) - goto out_free_attr_trace; -#endif - - return 0; - -#ifdef XFS_DIR2_TRACE - out_free_attr_trace: -#endif -#ifdef XFS_ATTR_TRACE - ktrace_free(xfs_attr_trace_buf); - out_free_bmbt_trace: -#endif -#ifdef XFS_BTREE_TRACE - ktrace_free(xfs_bmbt_trace_buf); - out_free_inobt_trace: - ktrace_free(xfs_inobt_trace_buf); - out_free_allocbt_trace: - ktrace_free(xfs_allocbt_trace_buf); - out_free_bmap_trace: -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(xfs_bmap_trace_buf); - out_free_alloc_trace: -#endif -#ifdef XFS_ALLOC_TRACE - ktrace_free(xfs_alloc_trace_buf); - out: -#endif - return -ENOMEM; -} - -STATIC void -xfs_free_trace_bufs(void) -{ -#ifdef XFS_DIR2_TRACE - ktrace_free(xfs_dir2_trace_buf); -#endif -#ifdef XFS_ATTR_TRACE - ktrace_free(xfs_attr_trace_buf); -#endif -#ifdef XFS_BTREE_TRACE - ktrace_free(xfs_bmbt_trace_buf); - ktrace_free(xfs_inobt_trace_buf); - ktrace_free(xfs_allocbt_trace_buf); -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(xfs_bmap_trace_buf); -#endif -#ifdef XFS_ALLOC_TRACE - ktrace_free(xfs_alloc_trace_buf); -#endif -} - -STATIC int __init xfs_init_zones(void) { @@ -1782,7 +1698,6 @@ init_xfs_fs(void) printk(KERN_INFO XFS_VERSION_STRING " with " XFS_BUILD_OPTIONS " enabled\n"); - ktrace_init(64); xfs_ioend_init(); xfs_dir_startup(); @@ -1790,13 +1705,9 @@ init_xfs_fs(void) if (error) goto out; - error = xfs_alloc_trace_bufs(); - if (error) - goto out_destroy_zones; - error = xfs_mru_cache_init(); if (error) - goto out_free_trace_buffers; + goto out_destroy_zones; error = xfs_filestream_init(); if (error) @@ -1831,8 +1742,6 @@ init_xfs_fs(void) xfs_filestream_uninit(); out_mru_cache_uninit: xfs_mru_cache_uninit(); - out_free_trace_buffers: - xfs_free_trace_bufs(); out_destroy_zones: xfs_destroy_zones(); out: @@ -1849,9 +1758,7 @@ exit_xfs_fs(void) xfs_buf_terminate(); xfs_filestream_uninit(); xfs_mru_cache_uninit(); - xfs_free_trace_bufs(); xfs_destroy_zones(); - ktrace_uninit(); } module_init(init_xfs_fs); Index: linux-2.6/fs/xfs/quota/xfs_dquot.c =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_dquot.c 2009-06-16 22:37:56.168814460 +0200 +++ linux-2.6/fs/xfs/quota/xfs_dquot.c 2009-06-16 22:37:58.199972089 +0200 @@ -47,6 +47,7 @@ #include "xfs_trans_space.h" #include "xfs_trans_priv.h" #include "xfs_qm.h" +#include "xfs_trace.h" /* @@ -112,10 +113,7 @@ xfs_qm_dqinit( init_completion(&dqp->q_flush); complete(&dqp->q_flush); -#ifdef XFS_DQUOT_TRACE - dqp->q_trace = ktrace_alloc(DQUOT_TRACE_SIZE, KM_NOFS); xfs_dqtrace_entry(dqp, "DQINIT"); -#endif } else { /* * Only the q_core portion was zeroed in dqreclaim_one(). @@ -136,10 +134,7 @@ xfs_qm_dqinit( dqp->q_hash = NULL; ASSERT(dqp->dq_flnext == dqp->dq_flprev); -#ifdef XFS_DQUOT_TRACE - ASSERT(dqp->q_trace); xfs_dqtrace_entry(dqp, "DQRECLAIMED_INIT"); -#endif } /* @@ -167,13 +162,8 @@ xfs_qm_dqdestroy( mutex_destroy(&dqp->q_qlock); sv_destroy(&dqp->q_pinwait); - -#ifdef XFS_DQUOT_TRACE - if (dqp->q_trace) - ktrace_free(dqp->q_trace); - dqp->q_trace = NULL; -#endif kmem_zone_free(xfs_Gqm->qm_dqzone, dqp); + atomic_dec(&xfs_Gqm->qm_totaldquots); } @@ -195,49 +185,6 @@ xfs_qm_dqinit_core( d->dd_diskdq.d_flags = type; } - -#ifdef XFS_DQUOT_TRACE -/* - * Dquot tracing for debugging. - */ -/* ARGSUSED */ -void -__xfs_dqtrace_entry( - xfs_dquot_t *dqp, - char *func, - void *retaddr, - xfs_inode_t *ip) -{ - xfs_dquot_t *udqp = NULL; - xfs_ino_t ino = 0; - - ASSERT(dqp->q_trace); - if (ip) { - ino = ip->i_ino; - udqp = ip->i_udquot; - } - ktrace_enter(dqp->q_trace, - (void *)(__psint_t)DQUOT_KTRACE_ENTRY, - (void *)func, - (void *)(__psint_t)dqp->q_nrefs, - (void *)(__psint_t)dqp->dq_flags, - (void *)(__psint_t)dqp->q_res_bcount, - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_bcount), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_icount), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_blk_hardlimit), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_blk_softlimit), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_ino_hardlimit), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_ino_softlimit), - (void *)(__psint_t)be32_to_cpu(dqp->q_core.d_id), - (void *)(__psint_t)current_pid(), - (void *)(__psint_t)ino, - (void *)(__psint_t)retaddr, - (void *)(__psint_t)udqp); - return; -} -#endif - - /* * If default limits are in force, push them into the dquot now. * We overwrite the dquot limits only if they are zero and this Index: linux-2.6/fs/xfs/quota/xfs_dquot.h =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_dquot.h 2009-06-16 22:37:56.172814690 +0200 +++ linux-2.6/fs/xfs/quota/xfs_dquot.h 2009-06-16 22:37:58.200967188 +0200 @@ -85,9 +85,6 @@ typedef struct xfs_dquot { struct completion q_flush; /* flush completion queue */ atomic_t q_pincount; /* dquot pin count */ wait_queue_head_t q_pinwait; /* dquot pinning wait queue */ -#ifdef XFS_DQUOT_TRACE - struct ktrace *q_trace; /* trace header structure */ -#endif } xfs_dquot_t; @@ -144,24 +141,6 @@ static inline void xfs_dqfunlock(xfs_dqu (XFS_IS_UQUOTA_ON((d)->q_mount)) : \ (XFS_IS_OQUOTA_ON((d)->q_mount)))) -#ifdef XFS_DQUOT_TRACE -/* - * Dquot Tracing stuff. - */ -#define DQUOT_TRACE_SIZE 64 -#define DQUOT_KTRACE_ENTRY 1 - -extern void __xfs_dqtrace_entry(xfs_dquot_t *dqp, char *func, - void *, xfs_inode_t *); -#define xfs_dqtrace_entry_ino(a,b,ip) \ - __xfs_dqtrace_entry((a), (b), (void*)__return_address, (ip)) -#define xfs_dqtrace_entry(a,b) \ - __xfs_dqtrace_entry((a), (b), (void*)__return_address, NULL) -#else -#define xfs_dqtrace_entry(a,b) -#define xfs_dqtrace_entry_ino(a,b,ip) -#endif - #ifdef QUOTADEBUG extern void xfs_qm_dqprint(xfs_dquot_t *); #else Index: linux-2.6/fs/xfs/support/ktrace.c =================================================================== --- linux-2.6.orig/fs/xfs/support/ktrace.c 2009-06-16 22:37:56.186814867 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,323 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include - -static kmem_zone_t *ktrace_hdr_zone; -static kmem_zone_t *ktrace_ent_zone; -static int ktrace_zentries; - -void __init -ktrace_init(int zentries) -{ - ktrace_zentries = roundup_pow_of_two(zentries); - - ktrace_hdr_zone = kmem_zone_init(sizeof(ktrace_t), - "ktrace_hdr"); - ASSERT(ktrace_hdr_zone); - - ktrace_ent_zone = kmem_zone_init(ktrace_zentries - * sizeof(ktrace_entry_t), - "ktrace_ent"); - ASSERT(ktrace_ent_zone); -} - -void __exit -ktrace_uninit(void) -{ - kmem_zone_destroy(ktrace_hdr_zone); - kmem_zone_destroy(ktrace_ent_zone); -} - -/* - * ktrace_alloc() - * - * Allocate a ktrace header and enough buffering for the given - * number of entries. Round the number of entries up to a - * power of 2 so we can do fast masking to get the index from - * the atomic index counter. - */ -ktrace_t * -ktrace_alloc(int nentries, unsigned int __nocast sleep) -{ - ktrace_t *ktp; - ktrace_entry_t *ktep; - int entries; - - ktp = (ktrace_t*)kmem_zone_alloc(ktrace_hdr_zone, sleep); - - if (ktp == (ktrace_t*)NULL) { - /* - * KM_SLEEP callers don't expect failure. - */ - if (sleep & KM_SLEEP) - panic("ktrace_alloc: NULL memory on KM_SLEEP request!"); - - return NULL; - } - - /* - * Special treatment for buffers with the ktrace_zentries entries - */ - entries = roundup_pow_of_two(nentries); - if (entries == ktrace_zentries) { - ktep = (ktrace_entry_t*)kmem_zone_zalloc(ktrace_ent_zone, - sleep); - } else { - ktep = (ktrace_entry_t*)kmem_zalloc((entries * sizeof(*ktep)), - sleep | KM_LARGE); - } - - if (ktep == NULL) { - /* - * KM_SLEEP callers don't expect failure. - */ - if (sleep & KM_SLEEP) - panic("ktrace_alloc: NULL memory on KM_SLEEP request!"); - - kmem_free(ktp); - - return NULL; - } - - ktp->kt_entries = ktep; - ktp->kt_nentries = entries; - ASSERT(is_power_of_2(entries)); - ktp->kt_index_mask = entries - 1; - atomic_set(&ktp->kt_index, 0); - ktp->kt_rollover = 0; - return ktp; -} - - -/* - * ktrace_free() - * - * Free up the ktrace header and buffer. It is up to the caller - * to ensure that no-one is referencing it. - */ -void -ktrace_free(ktrace_t *ktp) -{ - if (ktp == (ktrace_t *)NULL) - return; - - /* - * Special treatment for the Vnode trace buffer. - */ - if (ktp->kt_nentries == ktrace_zentries) - kmem_zone_free(ktrace_ent_zone, ktp->kt_entries); - else - kmem_free(ktp->kt_entries); - - kmem_zone_free(ktrace_hdr_zone, ktp); -} - - -/* - * Enter the given values into the "next" entry in the trace buffer. - * kt_index is always the index of the next entry to be filled. - */ -void -ktrace_enter( - ktrace_t *ktp, - void *val0, - void *val1, - void *val2, - void *val3, - void *val4, - void *val5, - void *val6, - void *val7, - void *val8, - void *val9, - void *val10, - void *val11, - void *val12, - void *val13, - void *val14, - void *val15) -{ - int index; - ktrace_entry_t *ktep; - - ASSERT(ktp != NULL); - - /* - * Grab an entry by pushing the index up to the next one. - */ - index = atomic_add_return(1, &ktp->kt_index); - index = (index - 1) & ktp->kt_index_mask; - if (!ktp->kt_rollover && index == ktp->kt_nentries - 1) - ktp->kt_rollover = 1; - - ASSERT((index >= 0) && (index < ktp->kt_nentries)); - - ktep = &(ktp->kt_entries[index]); - - ktep->val[0] = val0; - ktep->val[1] = val1; - ktep->val[2] = val2; - ktep->val[3] = val3; - ktep->val[4] = val4; - ktep->val[5] = val5; - ktep->val[6] = val6; - ktep->val[7] = val7; - ktep->val[8] = val8; - ktep->val[9] = val9; - ktep->val[10] = val10; - ktep->val[11] = val11; - ktep->val[12] = val12; - ktep->val[13] = val13; - ktep->val[14] = val14; - ktep->val[15] = val15; -} - -/* - * Return the number of entries in the trace buffer. - */ -int -ktrace_nentries( - ktrace_t *ktp) -{ - int index; - if (ktp == NULL) - return 0; - - index = atomic_read(&ktp->kt_index) & ktp->kt_index_mask; - return (ktp->kt_rollover ? ktp->kt_nentries : index); -} - -/* - * ktrace_first() - * - * This is used to find the start of the trace buffer. - * In conjunction with ktrace_next() it can be used to - * iterate through the entire trace buffer. This code does - * not do any locking because it is assumed that it is called - * from the debugger. - * - * The caller must pass in a pointer to a ktrace_snap - * structure in which we will keep some state used to - * iterate through the buffer. This state must not touched - * by any code outside of this module. - */ -ktrace_entry_t * -ktrace_first(ktrace_t *ktp, ktrace_snap_t *ktsp) -{ - ktrace_entry_t *ktep; - int index; - int nentries; - - if (ktp->kt_rollover) - index = atomic_read(&ktp->kt_index) & ktp->kt_index_mask; - else - index = 0; - - ktsp->ks_start = index; - ktep = &(ktp->kt_entries[index]); - - nentries = ktrace_nentries(ktp); - index++; - if (index < nentries) { - ktsp->ks_index = index; - } else { - ktsp->ks_index = 0; - if (index > nentries) - ktep = NULL; - } - return ktep; -} - -/* - * ktrace_next() - * - * This is used to iterate through the entries of the given - * trace buffer. The caller must pass in the ktrace_snap_t - * structure initialized by ktrace_first(). The return value - * will be either a pointer to the next ktrace_entry or NULL - * if all of the entries have been traversed. - */ -ktrace_entry_t * -ktrace_next( - ktrace_t *ktp, - ktrace_snap_t *ktsp) -{ - int index; - ktrace_entry_t *ktep; - - index = ktsp->ks_index; - if (index == ktsp->ks_start) { - ktep = NULL; - } else { - ktep = &ktp->kt_entries[index]; - } - - index++; - if (index == ktrace_nentries(ktp)) { - ktsp->ks_index = 0; - } else { - ktsp->ks_index = index; - } - - return ktep; -} - -/* - * ktrace_skip() - * - * Skip the next "count" entries and return the entry after that. - * Return NULL if this causes us to iterate past the beginning again. - */ -ktrace_entry_t * -ktrace_skip( - ktrace_t *ktp, - int count, - ktrace_snap_t *ktsp) -{ - int index; - int new_index; - ktrace_entry_t *ktep; - int nentries = ktrace_nentries(ktp); - - index = ktsp->ks_index; - new_index = index + count; - while (new_index >= nentries) { - new_index -= nentries; - } - if (index == ktsp->ks_start) { - /* - * We've iterated around to the start, so we're done. - */ - ktep = NULL; - } else if ((new_index < index) && (index < ktsp->ks_index)) { - /* - * We've skipped past the start again, so we're done. - */ - ktep = NULL; - ktsp->ks_index = ktsp->ks_start; - } else { - ktep = &(ktp->kt_entries[new_index]); - new_index++; - if (new_index == nentries) { - ktsp->ks_index = 0; - } else { - ktsp->ks_index = new_index; - } - } - return ktep; -} Index: linux-2.6/fs/xfs/support/ktrace.h =================================================================== --- linux-2.6.orig/fs/xfs/support/ktrace.h 2009-06-16 22:37:56.192814584 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef __XFS_SUPPORT_KTRACE_H__ -#define __XFS_SUPPORT_KTRACE_H__ - -/* - * Trace buffer entry structure. - */ -typedef struct ktrace_entry { - void *val[16]; -} ktrace_entry_t; - -/* - * Trace buffer header structure. - */ -typedef struct ktrace { - int kt_nentries; /* number of entries in trace buf */ - atomic_t kt_index; /* current index in entries */ - unsigned int kt_index_mask; - int kt_rollover; - ktrace_entry_t *kt_entries; /* buffer of entries */ -} ktrace_t; - -/* - * Trace buffer snapshot structure. - */ -typedef struct ktrace_snap { - int ks_start; /* kt_index at time of snap */ - int ks_index; /* current index */ -} ktrace_snap_t; - - -#ifdef CONFIG_XFS_TRACE - -extern void ktrace_init(int zentries); -extern void ktrace_uninit(void); - -extern ktrace_t *ktrace_alloc(int, unsigned int __nocast); -extern void ktrace_free(ktrace_t *); - -extern void ktrace_enter( - ktrace_t *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *); - -extern ktrace_entry_t *ktrace_first(ktrace_t *, ktrace_snap_t *); -extern int ktrace_nentries(ktrace_t *); -extern ktrace_entry_t *ktrace_next(ktrace_t *, ktrace_snap_t *); -extern ktrace_entry_t *ktrace_skip(ktrace_t *, int, ktrace_snap_t *); - -#else -#define ktrace_init(x) do { } while (0) -#define ktrace_uninit() do { } while (0) -#endif /* CONFIG_XFS_TRACE */ - -#endif /* __XFS_SUPPORT_KTRACE_H__ */ Index: linux-2.6/fs/xfs/xfs_alloc.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_alloc.h 2009-06-16 22:37:56.196814395 +0200 +++ linux-2.6/fs/xfs/xfs_alloc.h 2009-06-16 22:37:58.201968503 +0200 @@ -37,6 +37,15 @@ typedef enum xfs_alloctype XFS_ALLOCTYPE_THIS_BNO /* at exactly this block */ } xfs_alloctype_t; +#define XFS_ALLOC_TYPES \ + { XFS_ALLOCTYPE_ANY_AG, "ANY_AG" }, \ + { XFS_ALLOCTYPE_FIRST_AG, "FIRST_AG" }, \ + { XFS_ALLOCTYPE_START_AG, "START_AG" }, \ + { XFS_ALLOCTYPE_THIS_AG, "THIS_AG" }, \ + { XFS_ALLOCTYPE_START_BNO, "START_BNO" }, \ + { XFS_ALLOCTYPE_NEAR_BNO, "NEAR_BNO" }, \ + { XFS_ALLOCTYPE_THIS_BNO, "THIS_BNO" } + /* * Flags for xfs_alloc_fix_freelist. */ @@ -109,13 +118,6 @@ xfs_alloc_longest_free_extent(struct xfs #ifdef __KERNEL__ -#if defined(XFS_ALLOC_TRACE) -/* - * Allocation tracing buffer size. - */ -#define XFS_ALLOC_TRACE_SIZE 4096 -extern ktrace_t *xfs_alloc_trace_buf; - /* * Types for alloc tracing. */ @@ -125,7 +127,7 @@ extern ktrace_t *xfs_alloc_trace_buf; #define XFS_ALLOC_KTRACE_BUSY 4 #define XFS_ALLOC_KTRACE_UNBUSY 5 #define XFS_ALLOC_KTRACE_BUSYSEARCH 6 -#endif + void xfs_alloc_mark_busy(xfs_trans_t *tp, Index: linux-2.6/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr.c 2009-06-16 22:37:56.201814123 +0200 +++ linux-2.6/fs/xfs/xfs_attr.c 2009-06-16 22:37:58.202968630 +0200 @@ -47,6 +47,7 @@ #include "xfs_trans_space.h" #include "xfs_rw.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" /* * xfs_attr.c @@ -89,10 +90,6 @@ STATIC int xfs_attr_rmtval_remove(xfs_da #define ATTR_RMTVALUE_MAPSIZE 1 /* # of map entries at once */ -#if defined(XFS_ATTR_TRACE) -ktrace_t *xfs_attr_trace_buf; -#endif - STATIC int xfs_attr_name_to_xname( struct xfs_name *xname, @@ -2265,17 +2262,13 @@ xfs_attr_rmtval_remove(xfs_da_args_t *ar return(0); } -#if defined(XFS_ATTR_TRACE) /* * Add a trace buffer entry for an attr_list context structure. */ void xfs_attr_trace_l_c(char *where, struct xfs_attr_list_context *context) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_C, where, context, - (__psunsigned_t)NULL, - (__psunsigned_t)NULL, - (__psunsigned_t)NULL); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_C, where, context, 0, 0, 0); } /* @@ -2285,11 +2278,11 @@ void xfs_attr_trace_l_cn(char *where, struct xfs_attr_list_context *context, struct xfs_da_intnode *node) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CN, where, context, - (__psunsigned_t)be16_to_cpu(node->hdr.count), - (__psunsigned_t)be32_to_cpu(node->btree[0].hashval), - (__psunsigned_t)be32_to_cpu(node->btree[ - be16_to_cpu(node->hdr.count)-1].hashval)); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_CN, where, context, + be16_to_cpu(node->hdr.count), + be32_to_cpu(node->btree[0].hashval), + be32_to_cpu(node->btree[ + be16_to_cpu(node->hdr.count)-1].hashval)); } /* @@ -2299,10 +2292,10 @@ void xfs_attr_trace_l_cb(char *where, struct xfs_attr_list_context *context, struct xfs_da_node_entry *btree) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CB, where, context, - (__psunsigned_t)be32_to_cpu(btree->hashval), - (__psunsigned_t)be32_to_cpu(btree->before), - (__psunsigned_t)NULL); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_CB, where, context, + be32_to_cpu(btree->hashval), + be32_to_cpu(btree->before), + 0); } /* @@ -2312,37 +2305,9 @@ void xfs_attr_trace_l_cl(char *where, struct xfs_attr_list_context *context, struct xfs_attr_leafblock *leaf) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CL, where, context, - (__psunsigned_t)be16_to_cpu(leaf->hdr.count), - (__psunsigned_t)be32_to_cpu(leaf->entries[0].hashval), - (__psunsigned_t)be32_to_cpu(leaf->entries[ - be16_to_cpu(leaf->hdr.count)-1].hashval)); -} - -/* - * Add a trace buffer entry for the arguments given to the routine, - * generic form. - */ -void -xfs_attr_trace_enter(int type, char *where, - struct xfs_attr_list_context *context, - __psunsigned_t a13, __psunsigned_t a14, - __psunsigned_t a15) -{ - ASSERT(xfs_attr_trace_buf); - ktrace_enter(xfs_attr_trace_buf, (void *)((__psunsigned_t)type), - (void *)((__psunsigned_t)where), - (void *)((__psunsigned_t)context->dp), - (void *)((__psunsigned_t)context->cursor->hashval), - (void *)((__psunsigned_t)context->cursor->blkno), - (void *)((__psunsigned_t)context->cursor->offset), - (void *)((__psunsigned_t)context->alist), - (void *)((__psunsigned_t)context->bufsize), - (void *)((__psunsigned_t)context->count), - (void *)((__psunsigned_t)context->firstu), - NULL, - (void *)((__psunsigned_t)context->dupcnt), - (void *)((__psunsigned_t)context->flags), - (void *)a13, (void *)a14, (void *)a15); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_CL, where, context, + be16_to_cpu(leaf->hdr.count), + be32_to_cpu(leaf->entries[0].hashval), + be32_to_cpu(leaf->entries[ + be16_to_cpu(leaf->hdr.count)-1].hashval)); } -#endif /* XFS_ATTR_TRACE */ Index: linux-2.6/fs/xfs/xfs_attr_sf.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr_sf.h 2009-06-16 22:37:56.206814342 +0200 +++ linux-2.6/fs/xfs/xfs_attr_sf.h 2009-06-16 22:37:58.203991526 +0200 @@ -25,6 +25,10 @@ * to fit into the literal area of the inode. */ +struct xfs_attr_list_context; +struct xfs_da_intnode; +struct xfs_da_node_entry; +struct xfs_attr_leafblock; struct xfs_inode; /* @@ -69,17 +73,9 @@ typedef struct xfs_attr_sf_sort { (be16_to_cpu(((xfs_attr_shortform_t *) \ ((dp)->i_afp->if_u1.if_data))->hdr.totsize)) -#if defined(XFS_ATTR_TRACE) /* * Kernel tracing support for attribute lists */ -struct xfs_attr_list_context; -struct xfs_da_intnode; -struct xfs_da_node_entry; -struct xfs_attr_leafblock; - -#define XFS_ATTR_TRACE_SIZE 4096 /* size of global trace buffer */ -extern ktrace_t *xfs_attr_trace_buf; /* * Trace record types. @@ -96,15 +92,5 @@ void xfs_attr_trace_l_cb(char *where, st struct xfs_da_node_entry *btree); void xfs_attr_trace_l_cl(char *where, struct xfs_attr_list_context *context, struct xfs_attr_leafblock *leaf); -void xfs_attr_trace_enter(int type, char *where, - struct xfs_attr_list_context *context, - __psunsigned_t a13, __psunsigned_t a14, - __psunsigned_t a15); -#else -#define xfs_attr_trace_l_c(w,c) -#define xfs_attr_trace_l_cn(w,c,n) -#define xfs_attr_trace_l_cb(w,c,b) -#define xfs_attr_trace_l_cl(w,c,l) -#endif /* XFS_ATTR_TRACE */ #endif /* __XFS_ATTR_SF_H__ */ Index: linux-2.6/fs/xfs/xfs_bmap.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap.c 2009-06-16 22:37:56.211814350 +0200 +++ linux-2.6/fs/xfs/xfs_bmap.c 2009-06-16 22:37:58.206964670 +0200 @@ -54,6 +54,7 @@ #include "xfs_buf_item.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #ifdef DEBUG @@ -272,71 +273,6 @@ xfs_bmap_isaeof( int whichfork, /* data or attribute fork */ char *aeof); /* return value */ -#ifdef XFS_BMAP_TRACE -/* - * Add bmap trace entry prior to a call to xfs_iext_remove. - */ -STATIC void -xfs_bmap_trace_delete( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) deleted */ - xfs_extnum_t cnt, /* count of entries deleted, 1 or 2 */ - int whichfork); /* data or attr fork */ - -/* - * Add bmap trace entry prior to a call to xfs_iext_insert, or - * reading in the extents list from the disk (in the btree). - */ -STATIC void -xfs_bmap_trace_insert( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) inserted */ - xfs_extnum_t cnt, /* count of entries inserted, 1 or 2 */ - xfs_bmbt_irec_t *r1, /* inserted record 1 */ - xfs_bmbt_irec_t *r2, /* inserted record 2 or null */ - int whichfork); /* data or attr fork */ - -/* - * Add bmap trace entry after updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_post_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry updated */ - int whichfork); /* data or attr fork */ - -/* - * Add bmap trace entry prior to updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_pre_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry to be updated */ - int whichfork); /* data or attr fork */ - -#define XFS_BMAP_TRACE_DELETE(d,ip,i,c,w) \ - xfs_bmap_trace_delete(__func__,d,ip,i,c,w) -#define XFS_BMAP_TRACE_INSERT(d,ip,i,c,r1,r2,w) \ - xfs_bmap_trace_insert(__func__,d,ip,i,c,r1,r2,w) -#define XFS_BMAP_TRACE_POST_UPDATE(d,ip,i,w) \ - xfs_bmap_trace_post_update(__func__,d,ip,i,w) -#define XFS_BMAP_TRACE_PRE_UPDATE(d,ip,i,w) \ - xfs_bmap_trace_pre_update(__func__,d,ip,i,w) -#else -#define XFS_BMAP_TRACE_DELETE(d,ip,i,c,w) -#define XFS_BMAP_TRACE_INSERT(d,ip,i,c,r1,r2,w) -#define XFS_BMAP_TRACE_POST_UPDATE(d,ip,i,w) -#define XFS_BMAP_TRACE_PRE_UPDATE(d,ip,i,w) -#endif /* XFS_BMAP_TRACE */ - /* * Compute the worst-case number of indirect blocks that will be used * for ip's delayed extent of length "len". @@ -363,18 +299,6 @@ xfs_bmap_validate_ret( #define xfs_bmap_validate_ret(bno,len,flags,mval,onmap,nmap) #endif /* DEBUG */ -#if defined(XFS_RW_TRACE) -STATIC void -xfs_bunmap_trace( - xfs_inode_t *ip, - xfs_fileoff_t bno, - xfs_filblks_t len, - int flags, - inst_t *ra); -#else -#define xfs_bunmap_trace(ip, bno, len, flags, ra) -#endif /* XFS_RW_TRACE */ - STATIC int xfs_bmap_count_tree( xfs_mount_t *mp, @@ -398,6 +322,54 @@ xfs_bmap_disk_count_leaves( int numrecs, int *count); + +STATIC void +xfs_bmap_trace_insert( + const char *fname, /* function name */ + char *desc, /* operation description */ + xfs_inode_t *ip, /* incore inode pointer */ + xfs_extnum_t idx, /* index of entry(entries) inserted */ + xfs_extnum_t cnt, /* count of entries inserted, 1 or 2 */ + xfs_bmbt_irec_t *r1, /* inserted record 1 */ + xfs_bmbt_irec_t *r2, /* inserted record 2 or null */ + int whichfork) /* data or attr fork */ +{ + trace_xfs_bmap(XFS_BMAP_KTRACE_INSERT, fname, desc, ip, idx, + r1, r2, whichfork); +} + +STATIC void +xfs_bmap_trace( + int op, + const char *fname, /* function name */ + char *desc, /* operation description */ + xfs_inode_t *ip, /* incore inode pointer */ + xfs_extnum_t idx, /* index of entry(entries) deleted */ + xfs_extnum_t cnt, /* count of entries deleted, 1 or 2 */ + int whichfork) /* data or attr fork */ +{ + xfs_ifork_t *ifp = XFS_IFORK_PTR(ip, whichfork); + xfs_bmbt_irec_t r1; + xfs_bmbt_irec_t r2; + + xfs_bmbt_get_all(xfs_iext_get_ext(ifp, idx), &r1); + if (cnt == 2) + xfs_bmbt_get_all(xfs_iext_get_ext(ifp, idx + 1), &r2); + + trace_xfs_bmap(op, fname, desc, ip, idx, &r1, + cnt == 2 ? &r2 : NULL, whichfork); +} + +#define XFS_BMAP_TRACE_INSERT(d,ip,i,c,r1,r2,w) \ + xfs_bmap_trace_insert(__func__,d,ip,i,c,r1,r2,w) +#define XFS_BMAP_TRACE_DELETE(d,ip,i,c,w) \ + xfs_bmap_trace(XFS_BMAP_KTRACE_DELETE, __func__,d,ip,i,c,w) +#define XFS_BMAP_TRACE_POST_UPDATE(d,ip,i,w) \ + xfs_bmap_trace(XFS_BMAP_KTRACE_POST_UP, __func__,d,ip,i,1,w) +#define XFS_BMAP_TRACE_PRE_UPDATE(d,ip,i,w) \ + xfs_bmap_trace(XFS_BMAP_KTRACE_PRE_UP, __func__,d,ip,i,1,w) + + /* * Bmap internal routines. */ @@ -3800,158 +3772,6 @@ xfs_bmap_search_extents( return ep; } - -#ifdef XFS_BMAP_TRACE -ktrace_t *xfs_bmap_trace_buf; - -/* - * Add a bmap trace buffer entry. Base routine for the others. - */ -STATIC void -xfs_bmap_trace_addentry( - int opcode, /* operation */ - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(ies) */ - xfs_extnum_t cnt, /* count of entries, 1 or 2 */ - xfs_bmbt_rec_host_t *r1, /* first record */ - xfs_bmbt_rec_host_t *r2, /* second record or null */ - int whichfork) /* data or attr fork */ -{ - xfs_bmbt_rec_host_t tr2; - - ASSERT(cnt == 1 || cnt == 2); - ASSERT(r1 != NULL); - if (cnt == 1) { - ASSERT(r2 == NULL); - r2 = &tr2; - memset(&tr2, 0, sizeof(tr2)); - } else - ASSERT(r2 != NULL); - ktrace_enter(xfs_bmap_trace_buf, - (void *)(__psint_t)(opcode | (whichfork << 16)), - (void *)fname, (void *)desc, (void *)ip, - (void *)(__psint_t)idx, - (void *)(__psint_t)cnt, - (void *)(__psunsigned_t)(ip->i_ino >> 32), - (void *)(__psunsigned_t)(unsigned)ip->i_ino, - (void *)(__psunsigned_t)(r1->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l0), - (void *)(__psunsigned_t)(r1->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l1), - (void *)(__psunsigned_t)(r2->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l0), - (void *)(__psunsigned_t)(r2->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l1) - ); - ASSERT(ip->i_xtrace); - ktrace_enter(ip->i_xtrace, - (void *)(__psint_t)(opcode | (whichfork << 16)), - (void *)fname, (void *)desc, (void *)ip, - (void *)(__psint_t)idx, - (void *)(__psint_t)cnt, - (void *)(__psunsigned_t)(ip->i_ino >> 32), - (void *)(__psunsigned_t)(unsigned)ip->i_ino, - (void *)(__psunsigned_t)(r1->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l0), - (void *)(__psunsigned_t)(r1->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l1), - (void *)(__psunsigned_t)(r2->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l0), - (void *)(__psunsigned_t)(r2->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l1) - ); -} - -/* - * Add bmap trace entry prior to a call to xfs_iext_remove. - */ -STATIC void -xfs_bmap_trace_delete( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) deleted */ - xfs_extnum_t cnt, /* count of entries deleted, 1 or 2 */ - int whichfork) /* data or attr fork */ -{ - xfs_ifork_t *ifp; /* inode fork pointer */ - - ifp = XFS_IFORK_PTR(ip, whichfork); - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_DELETE, fname, desc, ip, idx, - cnt, xfs_iext_get_ext(ifp, idx), - cnt == 2 ? xfs_iext_get_ext(ifp, idx + 1) : NULL, - whichfork); -} - -/* - * Add bmap trace entry prior to a call to xfs_iext_insert, or - * reading in the extents list from the disk (in the btree). - */ -STATIC void -xfs_bmap_trace_insert( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) inserted */ - xfs_extnum_t cnt, /* count of entries inserted, 1 or 2 */ - xfs_bmbt_irec_t *r1, /* inserted record 1 */ - xfs_bmbt_irec_t *r2, /* inserted record 2 or null */ - int whichfork) /* data or attr fork */ -{ - xfs_bmbt_rec_host_t tr1; /* compressed record 1 */ - xfs_bmbt_rec_host_t tr2; /* compressed record 2 if needed */ - - xfs_bmbt_set_all(&tr1, r1); - if (cnt == 2) { - ASSERT(r2 != NULL); - xfs_bmbt_set_all(&tr2, r2); - } else { - ASSERT(cnt == 1); - ASSERT(r2 == NULL); - } - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_INSERT, fname, desc, ip, idx, - cnt, &tr1, cnt == 2 ? &tr2 : NULL, whichfork); -} - -/* - * Add bmap trace entry after updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_post_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry updated */ - int whichfork) /* data or attr fork */ -{ - xfs_ifork_t *ifp; /* inode fork pointer */ - - ifp = XFS_IFORK_PTR(ip, whichfork); - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_POST_UP, fname, desc, ip, idx, - 1, xfs_iext_get_ext(ifp, idx), NULL, whichfork); -} - -/* - * Add bmap trace entry prior to updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_pre_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry to be updated */ - int whichfork) /* data or attr fork */ -{ - xfs_ifork_t *ifp; /* inode fork pointer */ - - ifp = XFS_IFORK_PTR(ip, whichfork); - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_PRE_UP, fname, desc, ip, idx, 1, - xfs_iext_get_ext(ifp, idx), NULL, whichfork); -} -#endif /* XFS_BMAP_TRACE */ - /* * Compute the worst-case number of indirect blocks that will be used * for ip's delayed extent of length "len". @@ -3983,37 +3803,6 @@ xfs_bmap_worst_indlen( return rval; } -#if defined(XFS_RW_TRACE) -STATIC void -xfs_bunmap_trace( - xfs_inode_t *ip, - xfs_fileoff_t bno, - xfs_filblks_t len, - int flags, - inst_t *ra) -{ - if (ip->i_rwtrace == NULL) - return; - ktrace_enter(ip->i_rwtrace, - (void *)(__psint_t)XFS_BUNMAP, - (void *)ip, - (void *)(__psint_t)((ip->i_d.di_size >> 32) & 0xffffffff), - (void *)(__psint_t)(ip->i_d.di_size & 0xffffffff), - (void *)(__psint_t)(((xfs_dfiloff_t)bno >> 32) & 0xffffffff), - (void *)(__psint_t)((xfs_dfiloff_t)bno & 0xffffffff), - (void *)(__psint_t)len, - (void *)(__psint_t)flags, - (void *)(unsigned long)current_cpu(), - (void *)ra, - (void *)0, - (void *)0, - (void *)0, - (void *)0, - (void *)0, - (void *)0); -} -#endif - /* * Convert inode from non-attributed to attributed. * Must not be in a transaction, ip must not be locked. @@ -4702,7 +4491,7 @@ error0: return XFS_ERROR(EFSCORRUPTED); } -#ifdef XFS_BMAP_TRACE +#ifdef DEBUG /* * Add bmap trace insert entries for all the contents of the extent records. */ @@ -4727,9 +4516,7 @@ xfs_bmap_trace_exlist( whichfork); } } -#endif -#ifdef DEBUG /* * Validate that the bmbt_irecs being returned from bmapi are valid * given the callers original parameters. Specifically check the @@ -5478,7 +5265,8 @@ xfs_bunmapi( int rsvd; /* OK to allocate reserved blocks */ xfs_fsblock_t sum; - xfs_bunmap_trace(ip, bno, len, flags, (inst_t *)__return_address); + xfs_bunmap_trace(ip, bno, len, flags); + whichfork = (flags & XFS_BMAPI_ATTRFORK) ? XFS_ATTR_FORK : XFS_DATA_FORK; ifp = XFS_IFORK_PTR(ip, whichfork); Index: linux-2.6/fs/xfs/xfs_bmap.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap.h 2009-06-16 22:37:56.215815348 +0200 +++ linux-2.6/fs/xfs/xfs_bmap.h 2009-06-16 22:37:58.207971502 +0200 @@ -95,6 +95,21 @@ typedef struct xfs_bmap_free /* need write cache flushing and no */ /* additional allocation alignments */ +#define XFS_BMAPI_FLAGS \ + { XFS_BMAPI_WRITE, "WRITE" }, \ + { XFS_BMAPI_DELAY, "DELAY" }, \ + { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ + { XFS_BMAPI_METADATA, "METADATA" }, \ + { XFS_BMAPI_EXACT, "EXACT" }, \ + { XFS_BMAPI_ATTRFORK, "ATTRFORK" }, \ + { XFS_BMAPI_ASYNC, "ASYNC" }, \ + { XFS_BMAPI_RSVBLOCKS, "RSVBLOCKS" }, \ + { XFS_BMAPI_PREALLOC, "PREALLOC" }, \ + { XFS_BMAPI_IGSTATE, "IGSTATE" }, \ + { XFS_BMAPI_CONTIG, "CONTIG" }, \ + { XFS_BMAPI_CONVERT, "CONVERT" } + + static inline int xfs_bmapi_aflag(int w) { return (w == XFS_ATTR_FORK ? XFS_BMAPI_ATTRFORK : 0); @@ -135,7 +150,6 @@ typedef struct xfs_bmalloca { char conv; /* overwriting unwritten extents */ } xfs_bmalloca_t; -#if defined(__KERNEL__) && defined(XFS_BMAP_TRACE) /* * Trace operations for bmap extent tracing */ @@ -144,13 +158,18 @@ typedef struct xfs_bmalloca { #define XFS_BMAP_KTRACE_PRE_UP 3 #define XFS_BMAP_KTRACE_POST_UP 4 -#define XFS_BMAP_TRACE_SIZE 4096 /* size of global trace buffer */ -#define XFS_BMAP_KTRACE_SIZE 32 /* size of per-inode trace buffer */ -extern ktrace_t *xfs_bmap_trace_buf; +#define XFS_BMAP_KTRACE_TYPES \ + { XFS_BMAP_KTRACE_DELETE, "delete" }, \ + { XFS_BMAP_KTRACE_INSERT, "insert" }, \ + { XFS_BMAP_KTRACE_PRE_UP, "pre" }, \ + { XFS_BMAP_KTRACE_POST_UP, "post"} /* * Add bmap trace insert entries for all the contents of the extent list. + * + * Quite excessive tracing. Only do this for debug builds. */ +#if defined(__KERNEL) && defined(DEBUG) void xfs_bmap_trace_exlist( const char *fname, /* function name */ @@ -159,12 +178,9 @@ xfs_bmap_trace_exlist( int whichfork); /* data or attr fork */ #define XFS_BMAP_TRACE_EXLIST(ip,c,w) \ xfs_bmap_trace_exlist(__func__,ip,c,w) - -#else /* __KERNEL__ && XFS_BMAP_TRACE */ - +#else #define XFS_BMAP_TRACE_EXLIST(ip,c,w) - -#endif /* __KERNEL__ && XFS_BMAP_TRACE */ +#endif /* * Convert inode from non-attributed to attributed. Index: linux-2.6/fs/xfs/xfs_bmap_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap_btree.c 2009-06-16 22:37:56.220814658 +0200 +++ linux-2.6/fs/xfs/xfs_bmap_btree.c 2009-06-16 22:37:58.208964436 +0200 @@ -779,12 +779,6 @@ xfs_bmbt_trace_enter( (void *)a0, (void *)a1, (void *)a2, (void *)a3, (void *)a4, (void *)a5, (void *)a6, (void *)a7, (void *)a8, (void *)a9, (void *)a10); - ktrace_enter(ip->i_btrace, - (void *)((__psint_t)type | (whichfork << 8) | (line << 16)), - (void *)func, (void *)s, (void *)ip, (void *)cur, - (void *)a0, (void *)a1, (void *)a2, (void *)a3, - (void *)a4, (void *)a5, (void *)a6, (void *)a7, - (void *)a8, (void *)a9, (void *)a10); } STATIC void Index: linux-2.6/fs/xfs/xfs_buf_item.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_buf_item.c 2009-06-16 22:37:56.225814666 +0200 +++ linux-2.6/fs/xfs/xfs_buf_item.c 2009-06-16 22:37:58.209976995 +0200 @@ -29,6 +29,7 @@ #include "xfs_buf_item.h" #include "xfs_trans_priv.h" #include "xfs_error.h" +#include "xfs_trace.h" kmem_zone_t *xfs_buf_item_zone; @@ -356,7 +357,6 @@ xfs_buf_item_pin( ASSERT((bip->bli_flags & XFS_BLI_LOGGED) || (bip->bli_flags & XFS_BLI_STALE)); xfs_buf_item_trace("PIN", bip); - xfs_buftrace("XFS_PIN", bp); xfs_bpin(bp); } @@ -384,7 +384,6 @@ xfs_buf_item_unpin( ASSERT(XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *) == bip); ASSERT(atomic_read(&bip->bli_refcount) > 0); xfs_buf_item_trace("UNPIN", bip); - xfs_buftrace("XFS_UNPIN", bp); freed = atomic_dec_and_test(&bip->bli_refcount); ailp = bip->bli_item.li_ailp; @@ -396,7 +395,7 @@ xfs_buf_item_unpin( ASSERT(XFS_BUF_ISSTALE(bp)); ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); xfs_buf_item_trace("UNPIN STALE", bip); - xfs_buftrace("XFS_UNPIN STALE", bp); + xfs_buftrace(bp, "item_unpin_stale"); /* * If we get called here because of an IO error, we may * or may not have the item on the AIL. xfs_trans_ail_delete() @@ -441,7 +440,7 @@ xfs_buf_item_unpin_remove( (bip->bli_flags & XFS_BLI_STALE)) { ASSERT(XFS_BUF_VALUSEMA(bip->bli_buf) <= 0); xfs_buf_item_trace("UNPIN REMOVE", bip); - xfs_buftrace("XFS_UNPIN_REMOVE", bp); + xfs_buftrace(bp, "item_unpin_remove"); /* * yes -- clear the xaction descriptor in-use flag * and free the chunk if required. We can safely @@ -524,7 +523,7 @@ xfs_buf_item_unlock( uint hold; bp = bip->bli_buf; - xfs_buftrace("XFS_UNLOCK", bp); + xfs_buftrace(bp, "item_unlock"); /* * Clear the buffer's association with this transaction. @@ -738,9 +737,6 @@ xfs_buf_item_init( bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); bip->bli_format.blf_map_size = map_size; -#ifdef XFS_BLI_TRACE - bip->bli_trace = ktrace_alloc(XFS_BLI_TRACE_SIZE, KM_NOFS); -#endif #ifdef XFS_TRANS_DEBUG /* @@ -878,9 +874,6 @@ xfs_buf_item_free( kmem_free(bip->bli_logged); #endif /* XFS_TRANS_DEBUG */ -#ifdef XFS_BLI_TRACE - ktrace_free(bip->bli_trace); -#endif kmem_zone_free(xfs_buf_item_zone, bip); } @@ -897,7 +890,7 @@ xfs_buf_item_relse( { xfs_buf_log_item_t *bip; - xfs_buftrace("XFS_RELSE", bp); + xfs_buftrace(bp, "item_relse"); bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); XFS_BUF_SET_FSPRIVATE(bp, bip->bli_item.li_bio_list); if ((XFS_BUF_FSPRIVATE(bp, void *) == NULL) && @@ -994,7 +987,7 @@ xfs_buf_iodone_callbacks( if (XFS_FORCED_SHUTDOWN(mp)) { ASSERT(XFS_BUF_TARGET(bp) == mp->m_ddev_targp); XFS_BUF_SUPER_STALE(bp); - xfs_buftrace("BUF_IODONE_CB", bp); + xfs_buftrace(bp, "item_iodone"); xfs_buf_do_callbacks(bp, lip); XFS_BUF_SET_FSPRIVATE(bp, NULL); XFS_BUF_CLR_IODONE_FUNC(bp); @@ -1030,7 +1023,7 @@ xfs_buf_iodone_callbacks( XFS_BUF_SET_START(bp); } ASSERT(XFS_BUF_IODONE_FUNC(bp)); - xfs_buftrace("BUF_IODONE ASYNC", bp); + xfs_buftrace(bp, "item_iodone_async"); xfs_buf_relse(bp); } else { /* @@ -1054,7 +1047,7 @@ xfs_buf_iodone_callbacks( return; } #ifdef XFSERRORDEBUG - xfs_buftrace("XFS BUFCB NOERR", bp); + xfs_buftrace(bp, "item_iodone_noerror"); #endif xfs_buf_do_callbacks(bp, lip); XFS_BUF_SET_FSPRIVATE(bp, NULL); @@ -1081,7 +1074,7 @@ xfs_buf_error_relse( XFS_BUF_DONE(bp); XFS_BUF_UNDELAYWRITE(bp); XFS_BUF_ERROR(bp,0); - xfs_buftrace("BUF_ERROR_RELSE", bp); + xfs_buftrace(bp, "item_error_relse"); if (! XFS_FORCED_SHUTDOWN(mp)) xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR); /* @@ -1128,34 +1121,3 @@ xfs_buf_iodone( xfs_trans_ail_delete(ailp, (xfs_log_item_t *)bip); xfs_buf_item_free(bip); } - -#if defined(XFS_BLI_TRACE) -void -xfs_buf_item_trace( - char *id, - xfs_buf_log_item_t *bip) -{ - xfs_buf_t *bp; - ASSERT(bip->bli_trace != NULL); - - bp = bip->bli_buf; - ktrace_enter(bip->bli_trace, - (void *)id, - (void *)bip->bli_buf, - (void *)((unsigned long)bip->bli_flags), - (void *)((unsigned long)bip->bli_recur), - (void *)((unsigned long)atomic_read(&bip->bli_refcount)), - (void *)((unsigned long) - (0xFFFFFFFF & XFS_BUF_ADDR(bp) >> 32)), - (void *)((unsigned long)(0xFFFFFFFF & XFS_BUF_ADDR(bp))), - (void *)((unsigned long)XFS_BUF_COUNT(bp)), - (void *)((unsigned long)XFS_BUF_BFLAGS(bp)), - XFS_BUF_FSPRIVATE(bp, void *), - XFS_BUF_FSPRIVATE2(bp, void *), - (void *)(unsigned long)XFS_BUF_ISPINNED(bp), - (void *)XFS_BUF_IODONE_FUNC(bp), - (void *)((unsigned long)(XFS_BUF_VALUSEMA(bp))), - (void *)bip->bli_item.li_desc, - (void *)((unsigned long)bip->bli_item.li_flags)); -} -#endif /* XFS_BLI_TRACE */ Index: linux-2.6/fs/xfs/xfs_buf_item.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_buf_item.h 2009-06-16 22:37:56.230814535 +0200 +++ linux-2.6/fs/xfs/xfs_buf_item.h 2009-06-16 22:37:58.209976995 +0200 @@ -70,22 +70,21 @@ typedef struct xfs_buf_log_format_t { #define XFS_BLI_INODE_ALLOC_BUF 0x10 #define XFS_BLI_STALE_INODE 0x20 +#define XFS_BLI_FLAGS \ + { XFS_BLI_HOLD, "HOLD" }, \ + { XFS_BLI_DIRTY, "DIRTY" }, \ + { XFS_BLI_STALE, "STALE" }, \ + { XFS_BLI_LOGGED, "LOGGED" }, \ + { XFS_BLI_INODE_ALLOC_BUF, "INODE_ALLOC" }, \ + { XFS_BLI_STALE_INODE, "STALE_INODE" } + #ifdef __KERNEL__ struct xfs_buf; -struct ktrace; struct xfs_mount; struct xfs_buf_log_item; -#if defined(XFS_BLI_TRACE) -#define XFS_BLI_TRACE_SIZE 32 - -void xfs_buf_item_trace(char *, struct xfs_buf_log_item *); -#else -#define xfs_buf_item_trace(id, bip) -#endif - /* * This is the in core log item structure used to track information * needed to log buffers. It tracks how many times the lock has been @@ -97,9 +96,6 @@ typedef struct xfs_buf_log_item { unsigned int bli_flags; /* misc flags */ unsigned int bli_recur; /* lock recursion count */ atomic_t bli_refcount; /* cnt of tp refs */ -#ifdef XFS_BLI_TRACE - struct ktrace *bli_trace; /* event trace buf */ -#endif #ifdef XFS_TRANS_DEBUG char *bli_orig; /* original buffer copy */ char *bli_logged; /* bytes logged (bitmap) */ Index: linux-2.6/fs/xfs/xfs_dir2_trace.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_trace.c 2009-06-16 22:37:56.234814346 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include "xfs.h" -#include "xfs_fs.h" -#include "xfs_types.h" -#include "xfs_inum.h" -#include "xfs_dir2.h" -#include "xfs_da_btree.h" -#include "xfs_bmap_btree.h" -#include "xfs_dir2_sf.h" -#include "xfs_attr_sf.h" -#include "xfs_dinode.h" -#include "xfs_inode.h" -#include "xfs_dir2_trace.h" - -#ifdef XFS_DIR2_TRACE -ktrace_t *xfs_dir2_trace_buf; - -/* - * Enter something in the trace buffers. - */ -static void -xfs_dir2_trace_enter( - xfs_inode_t *dp, - int type, - char *where, - char *name, - int namelen, - void *a0, - void *a1, - void *a2, - void *a3, - void *a4, - void *a5, - void *a6, - void *a7) -{ - void *n[5]; - - ASSERT(xfs_dir2_trace_buf); - ASSERT(dp->i_dir_trace); - if (name) - memcpy(n, name, min((int)sizeof(n), namelen)); - else - memset((char *)n, 0, sizeof(n)); - ktrace_enter(xfs_dir2_trace_buf, - (void *)(long)type, (void *)where, - (void *)a0, (void *)a1, (void *)a2, (void *)a3, - (void *)a4, (void *)a5, (void *)a6, (void *)a7, - (void *)(long)namelen, - (void *)n[0], (void *)n[1], (void *)n[2], - (void *)n[3], (void *)n[4]); - ktrace_enter(dp->i_dir_trace, - (void *)(long)type, (void *)where, - (void *)a0, (void *)a1, (void *)a2, (void *)a3, - (void *)a4, (void *)a5, (void *)a6, (void *)a7, - (void *)(long)namelen, - (void *)n[0], (void *)n[1], (void *)n[2], - (void *)n[3], (void *)n[4]); -} - -void -xfs_dir2_trace_args( - char *where, - xfs_da_args_t *args) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - NULL, NULL); -} - -void -xfs_dir2_trace_args_b( - char *where, - xfs_da_args_t *args, - xfs_dabuf_t *bp) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_B, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(bp ? bp->bps[0] : NULL), NULL); -} - -void -xfs_dir2_trace_args_bb( - char *where, - xfs_da_args_t *args, - xfs_dabuf_t *lbp, - xfs_dabuf_t *dbp) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BB, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(lbp ? lbp->bps[0] : NULL), - (void *)(dbp ? dbp->bps[0] : NULL)); -} - -void -xfs_dir2_trace_args_bibii( - char *where, - xfs_da_args_t *args, - xfs_dabuf_t *bs, - int ss, - xfs_dabuf_t *bd, - int sd, - int c) -{ - xfs_buf_t *bpbs = bs ? bs->bps[0] : NULL; - xfs_buf_t *bpbd = bd ? bd->bps[0] : NULL; - - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BIBII, where, - (char *)args->name, (int)args->namelen, - (void *)args->dp, (void *)args->trans, - (void *)bpbs, (void *)(long)ss, (void *)bpbd, (void *)(long)sd, - (void *)(long)c, NULL); -} - -void -xfs_dir2_trace_args_db( - char *where, - xfs_da_args_t *args, - xfs_dir2_db_t db, - xfs_dabuf_t *bp) -{ - xfs_buf_t *dbp = bp ? bp->bps[0] : NULL; - - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_DB, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(long)db, (void *)dbp); -} - -void -xfs_dir2_trace_args_i( - char *where, - xfs_da_args_t *args, - xfs_ino_t i) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_I, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)((unsigned long)(i >> 32)), - (void *)((unsigned long)(i & 0xFFFFFFFF))); -} - -void -xfs_dir2_trace_args_s( - char *where, - xfs_da_args_t *args, - int s) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_S, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(long)s, NULL); -} - -void -xfs_dir2_trace_args_sb( - char *where, - xfs_da_args_t *args, - int s, - xfs_dabuf_t *bp) -{ - xfs_buf_t *dbp = bp ? bp->bps[0] : NULL; - - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_SB, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(long)s, (void *)dbp); -} -#endif /* XFS_DIR2_TRACE */ Index: linux-2.6/fs/xfs/xfs_dir2_trace.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_trace.h 2009-06-16 22:37:56.238814786 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2000,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef __XFS_DIR2_TRACE_H__ -#define __XFS_DIR2_TRACE_H__ - -/* - * Tracing for xfs v2 directories. - */ - -#if defined(XFS_DIR2_TRACE) - -struct ktrace; -struct xfs_dabuf; -struct xfs_da_args; - -#define XFS_DIR2_GTRACE_SIZE 4096 /* global buffer */ -#define XFS_DIR2_KTRACE_SIZE 32 /* per-inode buffer */ -extern struct ktrace *xfs_dir2_trace_buf; - -#define XFS_DIR2_KTRACE_ARGS 1 /* args only */ -#define XFS_DIR2_KTRACE_ARGS_B 2 /* args + buffer */ -#define XFS_DIR2_KTRACE_ARGS_BB 3 /* args + 2 buffers */ -#define XFS_DIR2_KTRACE_ARGS_DB 4 /* args, db, buffer */ -#define XFS_DIR2_KTRACE_ARGS_I 5 /* args, inum */ -#define XFS_DIR2_KTRACE_ARGS_S 6 /* args, int */ -#define XFS_DIR2_KTRACE_ARGS_SB 7 /* args, int, buffer */ -#define XFS_DIR2_KTRACE_ARGS_BIBII 8 /* args, buf/int/buf/int/int */ - -void xfs_dir2_trace_args(char *where, struct xfs_da_args *args); -void xfs_dir2_trace_args_b(char *where, struct xfs_da_args *args, - struct xfs_dabuf *bp); -void xfs_dir2_trace_args_bb(char *where, struct xfs_da_args *args, - struct xfs_dabuf *lbp, struct xfs_dabuf *dbp); -void xfs_dir2_trace_args_bibii(char *where, struct xfs_da_args *args, - struct xfs_dabuf *bs, int ss, - struct xfs_dabuf *bd, int sd, int c); -void xfs_dir2_trace_args_db(char *where, struct xfs_da_args *args, - xfs_dir2_db_t db, struct xfs_dabuf *bp); -void xfs_dir2_trace_args_i(char *where, struct xfs_da_args *args, xfs_ino_t i); -void xfs_dir2_trace_args_s(char *where, struct xfs_da_args *args, int s); -void xfs_dir2_trace_args_sb(char *where, struct xfs_da_args *args, int s, - struct xfs_dabuf *bp); - -#else /* XFS_DIR2_TRACE */ - -#define xfs_dir2_trace_args(where, args) -#define xfs_dir2_trace_args_b(where, args, bp) -#define xfs_dir2_trace_args_bb(where, args, lbp, dbp) -#define xfs_dir2_trace_args_bibii(where, args, bs, ss, bd, sd, c) -#define xfs_dir2_trace_args_db(where, args, db, bp) -#define xfs_dir2_trace_args_i(where, args, i) -#define xfs_dir2_trace_args_s(where, args, s) -#define xfs_dir2_trace_args_sb(where, args, s, bp) - -#endif /* XFS_DIR2_TRACE */ - -#endif /* __XFS_DIR2_TRACE_H__ */ Index: linux-2.6/fs/xfs/xfs_filestream.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_filestream.c 2009-06-16 22:37:56.243815283 +0200 +++ linux-2.6/fs/xfs/xfs_filestream.c 2009-06-16 22:37:58.211964957 +0200 @@ -34,6 +34,7 @@ #include "xfs_utils.h" #include "xfs_mru_cache.h" #include "xfs_filestream.h" +#include "xfs_trace.h" #ifdef XFS_FILESTREAMS_TRACE @@ -394,9 +395,7 @@ xfs_filestream_init(void) item_zone = kmem_zone_init(sizeof(fstrm_item_t), "fstrm_item"); if (!item_zone) return -ENOMEM; -#ifdef XFS_FILESTREAMS_TRACE - xfs_filestreams_trace_buf = ktrace_alloc(XFS_FSTRM_KTRACE_SIZE, KM_NOFS); -#endif + return 0; } @@ -407,9 +406,6 @@ xfs_filestream_init(void) void xfs_filestream_uninit(void) { -#ifdef XFS_FILESTREAMS_TRACE - ktrace_free(xfs_filestreams_trace_buf); -#endif kmem_zone_destroy(item_zone); } Index: linux-2.6/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iget.c 2009-06-16 22:37:56.247814256 +0200 +++ linux-2.6/fs/xfs/xfs_iget.c 2009-06-16 22:37:58.211964957 +0200 @@ -43,7 +43,7 @@ #include "xfs_inode_item.h" #include "xfs_bmap.h" #include "xfs_btree_trace.h" -#include "xfs_dir2_trace.h" +#include "xfs_trace.h" /* @@ -86,27 +86,6 @@ xfs_inode_alloc( xfs_inode_init_acls(ip); /* - * Initialize inode's trace buffers. - */ -#ifdef XFS_INODE_TRACE - ip->i_trace = ktrace_alloc(INODE_TRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_BMAP_TRACE - ip->i_xtrace = ktrace_alloc(XFS_BMAP_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_BTREE_TRACE - ip->i_btrace = ktrace_alloc(XFS_BMBT_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_RW_TRACE - ip->i_rwtrace = ktrace_alloc(XFS_RW_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_ILOCK_TRACE - ip->i_lock_trace = ktrace_alloc(XFS_ILOCK_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_DIR2_TRACE - ip->i_dir_trace = ktrace_alloc(XFS_DIR2_KTRACE_SIZE, KM_NOFS); -#endif - /* * Now initialise the VFS inode. We do this after the xfs_inode * initialisation as internal failures will result in ->destroy_inode * being called and that will pass down through the reclaim path and @@ -160,7 +139,7 @@ xfs_iget_cache_hit( goto out_error; } - xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); + xfs_itrace_tag(ip, "xfs_iget.alloc"); /* * We need to re-initialise the VFS inode as it has been @@ -212,8 +191,8 @@ xfs_iget_cache_hit( xfs_ilock(ip, lock_flags); xfs_iflags_clear(ip, XFS_ISTALE); - xfs_itrace_exit_tag(ip, "xfs_iget.found"); XFS_STATS_INC(xs_ig_found); + xfs_itrace_tag(ip, "xfs_iget.found"); return 0; out_error: @@ -246,7 +225,7 @@ xfs_iget_cache_miss( if (error) goto out_destroy; - xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); + xfs_itrace_entry(ip); if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { error = ENOENT; @@ -516,24 +495,6 @@ xfs_ireclaim( if (ip->i_afp) xfs_idestroy_fork(ip, XFS_ATTR_FORK); -#ifdef XFS_INODE_TRACE - ktrace_free(ip->i_trace); -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(ip->i_xtrace); -#endif -#ifdef XFS_BTREE_TRACE - ktrace_free(ip->i_btrace); -#endif -#ifdef XFS_RW_TRACE - ktrace_free(ip->i_rwtrace); -#endif -#ifdef XFS_ILOCK_TRACE - ktrace_free(ip->i_lock_trace); -#endif -#ifdef XFS_DIR2_TRACE - ktrace_free(ip->i_dir_trace); -#endif if (ip->i_itemp) { /* * Only if we are shutting down the fs will we see an @@ -658,7 +619,7 @@ xfs_ilock( else if (lock_flags & XFS_ILOCK_SHARED) mraccess_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); - xfs_ilock_trace(ip, 1, lock_flags, (inst_t *)__return_address); + trace_xfs_ilock(ip, "lock", lock_flags, _RET_IP_); } /* @@ -703,7 +664,7 @@ xfs_ilock_nowait( if (!mrtryaccess(&ip->i_lock)) goto out_undo_iolock; } - xfs_ilock_trace(ip, 2, lock_flags, (inst_t *)__return_address); + trace_xfs_ilock(ip, "lock_nowait", lock_flags, _RET_IP_); return 1; out_undo_iolock: @@ -765,7 +726,7 @@ xfs_iunlock( xfs_trans_unlocked_item(ip->i_itemp->ili_item.li_ailp, (xfs_log_item_t*)(ip->i_itemp)); } - xfs_ilock_trace(ip, 3, lock_flags, (inst_t *)__return_address); + trace_xfs_ilock(ip, "unlock", lock_flags, _RET_IP_); } /* @@ -784,6 +745,8 @@ xfs_ilock_demote( mrdemote(&ip->i_lock); if (lock_flags & XFS_IOLOCK_EXCL) mrdemote(&ip->i_iolock); + + trace_xfs_ilock(ip, "demote", lock_flags, _RET_IP_); } #ifdef DEBUG @@ -814,52 +777,3 @@ xfs_isilocked( return 1; } #endif - -#ifdef XFS_INODE_TRACE - -#define KTRACE_ENTER(ip, vk, s, line, ra) \ - ktrace_enter((ip)->i_trace, \ -/* 0 */ (void *)(__psint_t)(vk), \ -/* 1 */ (void *)(s), \ -/* 2 */ (void *)(__psint_t) line, \ -/* 3 */ (void *)(__psint_t)atomic_read(&VFS_I(ip)->i_count), \ -/* 4 */ (void *)(ra), \ -/* 5 */ NULL, \ -/* 6 */ (void *)(__psint_t)current_cpu(), \ -/* 7 */ (void *)(__psint_t)current_pid(), \ -/* 8 */ (void *)__return_address, \ -/* 9 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL) - -/* - * Vnode tracing code. - */ -void -_xfs_itrace_entry(xfs_inode_t *ip, const char *func, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_ENTRY, func, 0, ra); -} - -void -_xfs_itrace_exit(xfs_inode_t *ip, const char *func, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_EXIT, func, 0, ra); -} - -void -xfs_itrace_hold(xfs_inode_t *ip, char *file, int line, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_HOLD, file, line, ra); -} - -void -_xfs_itrace_ref(xfs_inode_t *ip, char *file, int line, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_REF, file, line, ra); -} - -void -xfs_itrace_rele(xfs_inode_t *ip, char *file, int line, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_RELE, file, line, ra); -} -#endif /* XFS_INODE_TRACE */ Index: linux-2.6/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.c 2009-06-16 22:37:56.252814823 +0200 +++ linux-2.6/fs/xfs/xfs_inode.c 2009-06-16 22:37:58.213965422 +0200 @@ -47,10 +47,10 @@ #include "xfs_rw.h" #include "xfs_error.h" #include "xfs_utils.h" -#include "xfs_dir2_trace.h" #include "xfs_quota.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" kmem_zone_t *xfs_ifork_zone; kmem_zone_t *xfs_inode_zone; @@ -1281,42 +1281,6 @@ xfs_file_last_byte( return last_byte; } -#if defined(XFS_RW_TRACE) -STATIC void -xfs_itrunc_trace( - int tag, - xfs_inode_t *ip, - int flag, - xfs_fsize_t new_size, - xfs_off_t toss_start, - xfs_off_t toss_finish) -{ - if (ip->i_rwtrace == NULL) { - return; - } - - ktrace_enter(ip->i_rwtrace, - (void*)((long)tag), - (void*)ip, - (void*)(unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff), - (void*)(unsigned long)(ip->i_d.di_size & 0xffffffff), - (void*)((long)flag), - (void*)(unsigned long)((new_size >> 32) & 0xffffffff), - (void*)(unsigned long)(new_size & 0xffffffff), - (void*)(unsigned long)((toss_start >> 32) & 0xffffffff), - (void*)(unsigned long)(toss_start & 0xffffffff), - (void*)(unsigned long)((toss_finish >> 32) & 0xffffffff), - (void*)(unsigned long)(toss_finish & 0xffffffff), - (void*)(unsigned long)current_cpu(), - (void*)(unsigned long)current_pid(), - (void*)NULL, - (void*)NULL, - (void*)NULL); -} -#else -#define xfs_itrunc_trace(tag, ip, flag, new_size, toss_start, toss_finish) -#endif - /* * Start the truncation of the file to new_size. The new size * must be smaller than the current size. This routine will @@ -1399,8 +1363,7 @@ xfs_itruncate_start( return 0; } last_byte = xfs_file_last_byte(ip); - xfs_itrunc_trace(XFS_ITRUNC_START, ip, flags, new_size, toss_start, - last_byte); + trace_xfs_itrunc(ip, flags, new_size, toss_start, last_byte, "start"); if (last_byte > toss_start) { if (flags & XFS_ITRUNC_DEFINITE) { xfs_tosspages(ip, toss_start, @@ -1504,7 +1467,8 @@ xfs_itruncate_finish( new_size = 0LL; } first_unmap_block = XFS_B_TO_FSB(mp, (xfs_ufsize_t)new_size); - xfs_itrunc_trace(XFS_ITRUNC_FINISH1, ip, 0, new_size, 0, 0); + trace_xfs_itrunc(ip, 0, new_size, 0, 0, "finish1"); + /* * The first thing we do is set the size to new_size permanently * on disk. This way we don't have to worry about anyone ever @@ -1721,7 +1685,7 @@ xfs_itruncate_finish( ASSERT((new_size != 0) || (fork == XFS_ATTR_FORK) || (ip->i_d.di_nextents == 0)); - xfs_itrunc_trace(XFS_ITRUNC_FINISH2, ip, 0, new_size, 0, 0); + trace_xfs_itrunc(ip, 0, new_size, 0, 0, "finish2"); return 0; } @@ -3242,23 +3206,6 @@ corrupt_out: return XFS_ERROR(EFSCORRUPTED); } - - -#ifdef XFS_ILOCK_TRACE -void -xfs_ilock_trace(xfs_inode_t *ip, int lock, unsigned int lockflags, inst_t *ra) -{ - ktrace_enter(ip->i_lock_trace, - (void *)ip, - (void *)(unsigned long)lock, /* 1 = LOCK, 3=UNLOCK, etc */ - (void *)(unsigned long)lockflags, /* XFS_ILOCK_EXCL etc */ - (void *)ra, /* caller of ilock */ - (void *)(unsigned long)current_cpu(), - (void *)(unsigned long)current_pid(), - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -} -#endif - /* * Return a pointer to the extent record at file index idx. */ Index: linux-2.6/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.h 2009-06-16 22:37:56.256814425 +0200 +++ linux-2.6/fs/xfs/xfs_inode.h 2009-06-16 22:37:58.215964070 +0200 @@ -213,7 +213,6 @@ typedef struct xfs_icdinode { struct bhv_desc; struct cred; -struct ktrace; struct xfs_buf; struct xfs_bmap_free; struct xfs_bmbt_irec; @@ -222,13 +221,6 @@ struct xfs_mount; struct xfs_trans; struct xfs_dquot; -#if defined(XFS_ILOCK_TRACE) -#define XFS_ILOCK_KTRACE_SIZE 32 -extern void xfs_ilock_trace(struct xfs_inode *, int, unsigned int, inst_t *); -#else -#define xfs_ilock_trace(i,n,f,ra) -#endif - typedef struct dm_attrs_s { __uint32_t da_dmevmask; /* DMIG event mask */ __uint16_t da_dmstate; /* DMIG state info */ @@ -277,26 +269,6 @@ typedef struct xfs_inode { struct posix_acl *i_acl; struct posix_acl *i_default_acl; #endif - - /* Trace buffers per inode. */ -#ifdef XFS_INODE_TRACE - struct ktrace *i_trace; /* general inode trace */ -#endif -#ifdef XFS_BMAP_TRACE - struct ktrace *i_xtrace; /* inode extent list trace */ -#endif -#ifdef XFS_BTREE_TRACE - struct ktrace *i_btrace; /* inode bmap btree trace */ -#endif -#ifdef XFS_RW_TRACE - struct ktrace *i_rwtrace; /* inode read/write trace */ -#endif -#ifdef XFS_ILOCK_TRACE - struct ktrace *i_lock_trace; /* inode lock/unlock trace */ -#endif -#ifdef XFS_DIR2_TRACE - struct ktrace *i_dir_trace; /* inode directory trace */ -#endif } xfs_inode_t; #define XFS_ISIZE(ip) (((ip)->i_d.di_mode & S_IFMT) == S_IFREG) ? \ @@ -429,6 +401,14 @@ static inline void xfs_ifunlock(xfs_inod #define XFS_LOCK_MASK (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED \ | XFS_ILOCK_EXCL | XFS_ILOCK_SHARED) +#define XFS_LOCK_FLAGS \ + { XFS_IOLOCK_EXCL, "IOLOCK_EXCL" }, \ + { XFS_IOLOCK_SHARED, "IOLOCK_SHARED" }, \ + { XFS_ILOCK_EXCL, "ILOCK_EXCL" }, \ + { XFS_ILOCK_SHARED, "ILOCK_SHARED" }, \ + { XFS_IUNLOCK_NONOTIFY, "IUNLOCK_NONOTIFY" } + + /* * Flags for lockdep annotations. * @@ -478,6 +458,10 @@ static inline void xfs_ifunlock(xfs_inod #define XFS_ITRUNC_DEFINITE 0x1 #define XFS_ITRUNC_MAYBE 0x2 +#define XFS_ITRUNC_FLAGS \ + { XFS_ITRUNC_DEFINITE, "DEFINITE" }, \ + { XFS_ITRUNC_MAYBE, "MAYBE" } + /* * For multiple groups support: if S_ISGID bit is set in the parent * directory, group of new file is set to that of the parent, and @@ -533,48 +517,31 @@ void xfs_lock_two_inodes(xfs_inode_t *, void xfs_synchronize_atime(xfs_inode_t *); void xfs_mark_inode_dirty_sync(xfs_inode_t *); -#if defined(XFS_INODE_TRACE) - -#define INODE_TRACE_SIZE 16 /* number of trace entries */ #define INODE_KTRACE_ENTRY 1 #define INODE_KTRACE_EXIT 2 #define INODE_KTRACE_HOLD 3 #define INODE_KTRACE_REF 4 #define INODE_KTRACE_RELE 5 -extern void _xfs_itrace_entry(struct xfs_inode *, const char *, inst_t *); -extern void _xfs_itrace_exit(struct xfs_inode *, const char *, inst_t *); -extern void xfs_itrace_hold(struct xfs_inode *, char *, int, inst_t *); -extern void _xfs_itrace_ref(struct xfs_inode *, char *, int, inst_t *); -extern void xfs_itrace_rele(struct xfs_inode *, char *, int, inst_t *); #define xfs_itrace_entry(ip) \ - _xfs_itrace_entry(ip, __func__, (inst_t *)__return_address) + trace_xfs_inode(ip, "entry", _THIS_IP_) #define xfs_itrace_exit(ip) \ - _xfs_itrace_exit(ip, __func__, (inst_t *)__return_address) -#define xfs_itrace_exit_tag(ip, tag) \ - _xfs_itrace_exit(ip, tag, (inst_t *)__return_address) + trace_xfs_inode(ip, "exit", _THIS_IP_) +#define xfs_itrace_tag(ip, tag) \ + trace_xfs_inode((ip), (tag), _THIS_IP_); #define xfs_itrace_ref(ip) \ - _xfs_itrace_ref(ip, __FILE__, __LINE__, (inst_t *)__return_address) - -#else -#define xfs_itrace_entry(a) -#define xfs_itrace_exit(a) -#define xfs_itrace_exit_tag(a, b) -#define xfs_itrace_hold(a, b, c, d) -#define xfs_itrace_ref(a) -#define xfs_itrace_rele(a, b, c, d) -#endif + trace_xfs_inode((ip), "ref", _THIS_IP_); #define IHOLD(ip) \ do { \ ASSERT(atomic_read(&VFS_I(ip)->i_count) > 0) ; \ atomic_inc(&(VFS_I(ip)->i_count)); \ - xfs_itrace_hold((ip), __FILE__, __LINE__, (inst_t *)__return_address); \ + trace_xfs_inode((ip), "hold", _THIS_IP_); \ } while (0) #define IRELE(ip) \ do { \ - xfs_itrace_rele((ip), __FILE__, __LINE__, (inst_t *)__return_address); \ + trace_xfs_inode((ip), "rele", _THIS_IP_); \ iput(VFS_I(ip)); \ } while (0) Index: linux-2.6/fs/xfs/xfs_iomap.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iomap.c 2009-06-16 22:37:56.262814072 +0200 +++ linux-2.6/fs/xfs/xfs_iomap.c 2009-06-16 22:37:58.216972299 +0200 @@ -47,72 +47,8 @@ #include "xfs_trans_space.h" #include "xfs_utils.h" #include "xfs_iomap.h" +#include "xfs_trace.h" -#if defined(XFS_RW_TRACE) -void -xfs_iomap_enter_trace( - int tag, - xfs_inode_t *ip, - xfs_off_t offset, - ssize_t count) -{ - if (!ip->i_rwtrace) - return; - - ktrace_enter(ip->i_rwtrace, - (void *)((unsigned long)tag), - (void *)ip, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)count), - (void *)((unsigned long)((ip->i_new_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_new_size & 0xffffffff)), - (void *)((unsigned long)current_pid()), - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL); -} - -void -xfs_iomap_map_trace( - int tag, - xfs_inode_t *ip, - xfs_off_t offset, - ssize_t count, - xfs_iomap_t *iomapp, - xfs_bmbt_irec_t *imapp, - int flags) -{ - if (!ip->i_rwtrace) - return; - - ktrace_enter(ip->i_rwtrace, - (void *)((unsigned long)tag), - (void *)ip, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)count), - (void *)((unsigned long)flags), - (void *)((unsigned long)((iomapp->iomap_offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(iomapp->iomap_offset & 0xffffffff)), - (void *)((unsigned long)(iomapp->iomap_delta)), - (void *)((unsigned long)(iomapp->iomap_bsize)), - (void *)((unsigned long)(iomapp->iomap_bn)), - (void *)(__psint_t)(imapp->br_startoff), - (void *)((unsigned long)(imapp->br_blockcount)), - (void *)(__psint_t)(imapp->br_startblock)); -} -#else -#define xfs_iomap_enter_trace(tag, io, offset, count) -#define xfs_iomap_map_trace(tag, io, offset, count, iomapp, imapp, flags) -#endif #define XFS_WRITEIO_ALIGN(mp,off) (((off) >> mp->m_writeio_log) \ << mp->m_writeio_log) @@ -187,21 +123,20 @@ xfs_iomap( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); + trace_xfs_iomap(ip, offset, count, flags, NULL, "enter"); + switch (flags & (BMAPI_READ | BMAPI_WRITE | BMAPI_ALLOCATE)) { case BMAPI_READ: - xfs_iomap_enter_trace(XFS_IOMAP_READ_ENTER, ip, offset, count); lockmode = xfs_ilock_map_shared(ip); bmapi_flags = XFS_BMAPI_ENTIRE; break; case BMAPI_WRITE: - xfs_iomap_enter_trace(XFS_IOMAP_WRITE_ENTER, ip, offset, count); lockmode = XFS_ILOCK_EXCL; if (flags & BMAPI_IGNSTATE) bmapi_flags |= XFS_BMAPI_IGSTATE|XFS_BMAPI_ENTIRE; xfs_ilock(ip, lockmode); break; case BMAPI_ALLOCATE: - xfs_iomap_enter_trace(XFS_IOMAP_ALLOC_ENTER, ip, offset, count); lockmode = XFS_ILOCK_SHARED; bmapi_flags = XFS_BMAPI_ENTIRE; @@ -237,8 +172,8 @@ xfs_iomap( if (nimaps && (imap.br_startblock != HOLESTARTBLOCK) && (imap.br_startblock != DELAYSTARTBLOCK)) { - xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, ip, - offset, count, iomapp, &imap, flags); + trace_xfs_iomap(ip, offset, count, flags, + &imap, "map_found"); break; } @@ -250,8 +185,8 @@ xfs_iomap( &imap, &nimaps); } if (!error) { - xfs_iomap_map_trace(XFS_IOMAP_ALLOC_MAP, ip, - offset, count, iomapp, &imap, flags); + trace_xfs_iomap(ip, offset, count, flags, &imap, + "map_allocate"); } iomap_flags = IOMAP_NEW; break; @@ -261,8 +196,8 @@ xfs_iomap( lockmode = 0; if (nimaps && !isnullstartblock(imap.br_startblock)) { - xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, ip, - offset, count, iomapp, &imap, flags); + trace_xfs_iomap(ip, offset, count, flags, + &imap, "map_found"); break; } @@ -623,8 +558,7 @@ retry: * delalloc blocks and retry without EOF preallocation. */ if (nimaps == 0) { - xfs_iomap_enter_trace(XFS_IOMAP_WRITE_NOSPACE, - ip, offset, count); + trace_xfs_iomap(ip, offset, count, 0, NULL, "enospc"); if (flushed) return XFS_ERROR(ENOSPC); @@ -837,7 +771,7 @@ xfs_iomap_write_unwritten( int committed; int error; - xfs_iomap_enter_trace(XFS_IOMAP_UNWRITTEN, ip, offset, count); + trace_xfs_iomap(ip, offset, count, 0, NULL, "unwritten"); offset_fsb = XFS_B_TO_FSBT(mp, offset); count_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count); Index: linux-2.6/fs/xfs/xfs_log.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_log.c 2009-06-16 22:37:56.266814721 +0200 +++ linux-2.6/fs/xfs/xfs_log.c 2009-06-16 22:37:58.218940008 +0200 @@ -40,6 +40,7 @@ #include "xfs_dinode.h" #include "xfs_inode.h" #include "xfs_rw.h" +#include "xfs_trace.h" kmem_zone_t *xfs_log_ticket_zone; @@ -122,85 +123,6 @@ STATIC void xlog_verify_tail_lsn(xlog_t STATIC int xlog_iclogs_empty(xlog_t *log); -#if defined(XFS_LOG_TRACE) - -#define XLOG_TRACE_LOGGRANT_SIZE 2048 -#define XLOG_TRACE_ICLOG_SIZE 256 - -void -xlog_trace_loggrant_alloc(xlog_t *log) -{ - log->l_grant_trace = ktrace_alloc(XLOG_TRACE_LOGGRANT_SIZE, KM_NOFS); -} - -void -xlog_trace_loggrant_dealloc(xlog_t *log) -{ - ktrace_free(log->l_grant_trace); -} - -void -xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) -{ - unsigned long cnts; - - /* ticket counts are 1 byte each */ - cnts = ((unsigned long)tic->t_ocnt) | ((unsigned long)tic->t_cnt) << 8; - - ktrace_enter(log->l_grant_trace, - (void *)tic, - (void *)log->l_reserve_headq, - (void *)log->l_write_headq, - (void *)((unsigned long)log->l_grant_reserve_cycle), - (void *)((unsigned long)log->l_grant_reserve_bytes), - (void *)((unsigned long)log->l_grant_write_cycle), - (void *)((unsigned long)log->l_grant_write_bytes), - (void *)((unsigned long)log->l_curr_cycle), - (void *)((unsigned long)log->l_curr_block), - (void *)((unsigned long)CYCLE_LSN(log->l_tail_lsn)), - (void *)((unsigned long)BLOCK_LSN(log->l_tail_lsn)), - (void *)string, - (void *)((unsigned long)tic->t_trans_type), - (void *)cnts, - (void *)((unsigned long)tic->t_curr_res), - (void *)((unsigned long)tic->t_unit_res)); -} - -void -xlog_trace_iclog_alloc(xlog_in_core_t *iclog) -{ - iclog->ic_trace = ktrace_alloc(XLOG_TRACE_ICLOG_SIZE, KM_NOFS); -} - -void -xlog_trace_iclog_dealloc(xlog_in_core_t *iclog) -{ - ktrace_free(iclog->ic_trace); -} - -void -xlog_trace_iclog(xlog_in_core_t *iclog, uint state) -{ - ktrace_enter(iclog->ic_trace, - (void *)((unsigned long)state), - (void *)((unsigned long)current_pid()), - (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL, - (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL, - (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL, - (void *)NULL, (void *)NULL); -} -#else - -#define xlog_trace_loggrant_alloc(log) -#define xlog_trace_loggrant_dealloc(log) -#define xlog_trace_loggrant(log,tic,string) - -#define xlog_trace_iclog_alloc(iclog) -#define xlog_trace_iclog_dealloc(iclog) -#define xlog_trace_iclog(iclog,state) - -#endif /* XFS_LOG_TRACE */ - static void xlog_ins_ticketq(struct xlog_ticket **qp, struct xlog_ticket *tic) @@ -1030,7 +952,7 @@ xlog_iodone(xfs_buf_t *bp) xfs_fs_cmn_err(CE_WARN, l->l_mp, "xlog_iodone: Barriers are no longer supported" " by device. Disabling barriers\n"); - xfs_buftrace("XLOG_IODONE BARRIERS OFF", bp); + xfs_buftrace(bp, "barriers_off"); } /* @@ -1085,7 +1007,7 @@ xlog_bdstrat_cb(struct xfs_buf *bp) return 0; } - xfs_buftrace("XLOG__BDSTRAT IOERROR", bp); + xfs_buftrace(bp, "xlog_ioerror"); XFS_BUF_ERROR(bp, EIO); XFS_BUF_STALE(bp); xfs_biodone(bp); @@ -1246,7 +1168,6 @@ xlog_alloc_log(xfs_mount_t *mp, spin_lock_init(&log->l_grant_lock); sv_init(&log->l_flush_wait, 0, "flush_wait"); - xlog_trace_loggrant_alloc(log); /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); @@ -1305,8 +1226,6 @@ xlog_alloc_log(xfs_mount_t *mp, sv_init(&iclog->ic_force_wait, SV_DEFAULT, "iclog-force"); sv_init(&iclog->ic_write_wait, SV_DEFAULT, "iclog-write"); - xlog_trace_iclog_alloc(iclog); - iclogp = &iclog->ic_next; } *iclogp = log->l_iclog; /* complete ring */ @@ -1321,13 +1240,11 @@ out_free_iclog: sv_destroy(&iclog->ic_force_wait); sv_destroy(&iclog->ic_write_wait); xfs_buf_free(iclog->ic_bp); - xlog_trace_iclog_dealloc(iclog); } kmem_free(iclog); } spinlock_destroy(&log->l_icloglock); spinlock_destroy(&log->l_grant_lock); - xlog_trace_loggrant_dealloc(log); xfs_buf_free(log->l_xbuf); out_free_log: kmem_free(log); @@ -1607,7 +1524,6 @@ xlog_dealloc_log(xlog_t *log) sv_destroy(&iclog->ic_force_wait); sv_destroy(&iclog->ic_write_wait); xfs_buf_free(iclog->ic_bp); - xlog_trace_iclog_dealloc(iclog); next_iclog = iclog->ic_next; kmem_free(iclog); iclog = next_iclog; @@ -1616,7 +1532,6 @@ xlog_dealloc_log(xlog_t *log) spinlock_destroy(&log->l_grant_lock); xfs_buf_free(log->l_xbuf); - xlog_trace_loggrant_dealloc(log); log->l_mp->m_log = NULL; kmem_free(log); } /* xlog_dealloc_log */ @@ -2414,7 +2329,6 @@ restart: iclog = log->l_iclog; if (iclog->ic_state != XLOG_STATE_ACTIVE) { - xlog_trace_iclog(iclog, XLOG_TRACE_SLEEP_FLUSH); XFS_STATS_INC(xs_log_noiclogs); /* Wait for log writes to have flushed */ Index: linux-2.6/fs/xfs/xfs_log_priv.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_log_priv.h 2009-06-16 22:37:56.271814240 +0200 +++ linux-2.6/fs/xfs/xfs_log_priv.h 2009-06-16 22:37:58.219964999 +0200 @@ -19,7 +19,6 @@ #define __XFS_LOG_PRIV_H__ struct xfs_buf; -struct ktrace; struct log; struct xlog_ticket; struct xfs_buf_cancel; @@ -361,9 +360,6 @@ typedef struct xlog_in_core { int ic_bwritecnt; unsigned short ic_state; char *ic_datap; /* pointer to iclog data */ -#ifdef XFS_LOG_TRACE - struct ktrace *ic_trace; -#endif /* Callback structures need their own cacheline */ spinlock_t ic_callback_lock ____cacheline_aligned_in_smp; @@ -429,10 +425,6 @@ typedef struct log { int l_grant_write_cycle; int l_grant_write_bytes; -#ifdef XFS_LOG_TRACE - struct ktrace *l_grant_trace; -#endif - /* The following field are used for debugging; need to hold icloglock */ #ifdef DEBUG char *l_iclog_bak[XLOG_MAX_ICLOGS]; @@ -458,12 +450,6 @@ extern void xlog_put_bp(struct xfs_buf extern kmem_zone_t *xfs_log_ticket_zone; -/* iclog tracing */ -#define XLOG_TRACE_GRAB_FLUSH 1 -#define XLOG_TRACE_REL_FLUSH 2 -#define XLOG_TRACE_SLEEP_FLUSH 3 -#define XLOG_TRACE_WAKE_FLUSH 4 - /* * Unmount record type is used as a pseudo transaction type for the ticket. * It's value must be outside the range of XFS_TRANS_* values. Index: linux-2.6/fs/xfs/linux-2.6/xfs_trace.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/fs/xfs/linux-2.6/xfs_trace.h 2009-06-16 22:37:58.220964568 +0200 @@ -0,0 +1,1035 @@ +#if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_XFS_H + +#include + +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_types.h" +#include "xfs_bit.h" +#include "xfs_log.h" +#include "xfs_inum.h" +#include "xfs_trans.h" +#include "xfs_sb.h" +#include "xfs_ag.h" +#include "xfs_dir2.h" +#include "xfs_da_btree.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_dir2_sf.h" +#include "xfs_attr_sf.h" +#include "xfs_dinode.h" +#include "xfs_inode.h" +#include "xfs_btree.h" +#include "xfs_dmapi.h" +#include "xfs_mount.h" +#include "xfs_ialloc.h" +#include "xfs_itable.h" +#include "xfs_alloc.h" +#include "xfs_bmap.h" +#include "xfs_attr.h" +#include "xfs_attr_sf.h" +#include "xfs_attr_leaf.h" +#include "xfs_log_priv.h" +#include "xfs_buf_item.h" +#include "xfs_quota.h" +#include "xfs_iomap.h" +#include "quota/xfs_dquot_item.h" +#include "quota/xfs_dquot.h" + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM xfs + +char *xfs_fmtfsblock(xfs_fsblock_t bno); +void xfs_count_page_state(struct page *page, int *delalloc, + int *unmapped, int *unwritten); + + +/* + * Trace attr_list operations. + * + * XXX: Not updated to actually do anything with the different subtypes yet. + */ +TRACE_EVENT(xfs_attr_list, + TP_PROTO(int type, char *where, struct xfs_attr_list_context *ctx, + unsigned long a13, unsigned long a14, unsigned long a15), + TP_ARGS(type, where, ctx, a13, a14, a15), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(int, type) + __field(char *, where) + __field(u32, hashval) + __field(u32, blkno) + __field(u32, offset) + __field(void *, alist) + __field(int, bufsize) + __field(int, count) + __field(int, firstu) + __field(int, dupcnt) + __field(int, flags) + __field(unsigned long, a13) + __field(unsigned long, a14) + __field(unsigned long, a15) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; + __entry->ino = ctx->dp->i_ino; + __entry->type = type; + __entry->where = where; + __entry->hashval = ctx->cursor->hashval; + __entry->blkno = ctx->cursor->blkno; + __entry->offset = ctx->cursor->offset; + __entry->alist = ctx->alist; + __entry->bufsize = ctx->bufsize; + __entry->count = ctx->count; + __entry->firstu = ctx->firstu; + __entry->flags = ctx->flags; + __entry->a13 = a13; + __entry->a14 = a14; + __entry->a15 = a15; + ), + + TP_printk("dev %d:%d ino %llx %s cursor h/b/o 0x%x/0x%x/%u dupcnt %u " + "alist 0x%p size %u count %u firstu %u flags %d %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->where, + __entry->hashval, + __entry->blkno, + __entry->offset, + __entry->dupcnt, + __entry->alist, + __entry->bufsize, + __entry->count, + __entry->firstu, + __entry->flags, + __print_flags(__entry->flags, "|", XFS_ATTR_FLAGS) + /* we currently miss out on the per-type a13/14/15 here */ + ) +); + +/* + * Trace block mappings. + * + * r2 may be NULL if there is just one extent to trace. + */ +TRACE_EVENT(xfs_bmap, + TP_PROTO(int opcode, const char *fname, const char *desc, + struct xfs_inode *ip, xfs_extnum_t idx, + struct xfs_bmbt_irec *r1, struct xfs_bmbt_irec *r2, + int whichfork), + TP_ARGS(opcode, fname, desc, ip, idx, r1, r2, whichfork), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(short, opcode) + __field(short, whichfork) + __field(const char *, fname) + __field(const char *, desc) + __field(xfs_extnum_t, idx) + __field(xfs_fileoff_t, r1_startoff) + __field(xfs_fsblock_t, r1_startblock) + __field(xfs_filblks_t, r1_blockcount) + __field(xfs_exntst_t, r1_state) + __field(xfs_fileoff_t, r2_startoff) + __field(xfs_fsblock_t, r2_startblock) + __field(xfs_filblks_t, r2_blockcount) + __field(xfs_exntst_t, r2_state) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->opcode = opcode; + __entry->whichfork = whichfork; + __entry->fname = fname; + __entry->desc = desc; + __entry->idx = idx; + __entry->r1_startoff = r1->br_startoff; + __entry->r1_startblock = r1->br_startblock; + __entry->r1_blockcount = r1->br_blockcount; + __entry->r1_state = r1->br_state; + __entry->r2_startoff = r2 ? r2->br_startoff : 0; + __entry->r2_startblock = r2 ? r2->br_startblock : 0; + __entry->r2_blockcount = r2 ? r2->br_blockcount : 0; + __entry->r2_state = r2 ? r2->br_state : 0; + ), + + TP_printk("dev %d:%d ino 0x%lld %s %s:%s %cf idx %ld " + "offset1 %lld block1 %s count1 %lld flag1 %d " + "offset2 %lld block2 %s count2 %lld flag2 %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __print_symbolic(__entry->opcode, XFS_BMAP_KTRACE_TYPES), + __entry->fname, + __entry->desc, + "da"[!!__entry->whichfork], + (long)__entry->idx, + __entry->r1_startoff, + xfs_fmtfsblock(__entry->r1_startblock), + __entry->r1_blockcount, + __entry->r1_state, + __entry->r2_startoff, + xfs_fmtfsblock(__entry->r2_startblock), + __entry->r2_blockcount, + __entry->r2_state) +); + +/* + * Trace lots of strategic buffer points. + */ +TRACE_EVENT(xfs_buf, + TP_PROTO(struct xfs_buf *bp, char *id, unsigned long val, + unsigned long caller_ip), + TP_ARGS(bp, id, val, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(char *, id) + __field(unsigned, flags) + __field(int, hold) + __field(unsigned, lockval) + __field(unsigned long, val) + __field(xfs_off_t, file_offset) + __field(size_t, buffer_length) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = bp->b_target->bt_dev; + __entry->id = id; + __entry->hold = atomic_read(&bp->b_hold); + __entry->lockval = xfs_buf_lock_value(bp); + __entry->val = val; + __entry->file_offset = bp->b_file_offset; + __entry->buffer_length = bp->b_buffer_length; + __entry->flags = bp->b_flags; + __entry->caller_ip = caller_ip; + ), + + TP_printk("dev %d:%d %s hold %d lock %d val 0x%lx " + "offset 0x%llx size 0x%zx flags %s by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->id, + __entry->hold, + __entry->lockval, + __entry->val, + (unsigned long long)__entry->file_offset, + __entry->buffer_length, + __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), + (void *)__entry->caller_ip) +); + +#define xfs_buftrace_val(bp, id, val) \ + trace_xfs_buf((bp), (id), (val), _RET_IP_) +#define xfs_buftrace(bp, id) \ + trace_xfs_buf((bp), (id), 0, _RET_IP_) + + +TRACE_EVENT(xfs_buf_item, + TP_PROTO(char *id, struct xfs_buf_log_item *bip), + TP_ARGS(id, bip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(char *, id) + __field(void *, bip) + __field(void *, bp) + __field(unsigned, flags) + __field(unsigned, recur) + __field(int, refcount) + __field(xfs_daddr_t, buf_blkno) + __field(size_t, buf_len) + __field(unsigned, buf_flags) + __field(int, buf_pincount) + __field(int, buf_lockval) + __field(void *, li_desc) + __field(unsigned, li_flags) + ), + + TP_fast_assign( + __entry->dev = bip->bli_buf->b_target->bt_dev; + __entry->id = id; + __entry->bip = bip; + __entry->bp = bip->bli_buf; + __entry->flags = bip->bli_flags; + __entry->recur = bip->bli_recur; + __entry->refcount = atomic_read(&bip->bli_refcount); + __entry->buf_blkno = XFS_BUF_ADDR(bip->bli_buf); + __entry->buf_len = XFS_BUF_COUNT(bip->bli_buf); + __entry->buf_flags = bip->bli_buf->b_flags; + __entry->buf_pincount = XFS_BUF_ISPINNED(bip->bli_buf); + __entry->buf_lockval = XFS_BUF_VALUSEMA(bip->bli_buf); + __entry->li_desc = bip->bli_item.li_desc; + __entry->li_flags = bip->bli_item.li_flags; + ), + + TP_printk("dev %d:%d %s bip 0x%p bp 0x%p flags %s recur %d refcount %d " + "blkno 0x%llx blen 0x%x bpflags %s pincount %d " + "lockval %d lidesc 0x%p liflags %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->id, + __entry->bip, + __entry->bp, + __print_flags(__entry->flags, "|", XFS_BLI_FLAGS), + __entry->recur, + __entry->refcount, + (unsigned long long)__entry->buf_blkno, + __entry->buf_len, + __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS), + __entry->buf_pincount, + __entry->buf_lockval, + __entry->li_desc, + __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS)) +); + +#define xfs_buf_item_trace(id, bip) \ + trace_xfs_buf_item((id), (bip)); + +/* + * dquot tracer. + * + * Dump relevant information from the dquot structure in strategic places. + * + * XXX: figure out why id is 0 so often. + */ +TRACE_EVENT(xfs_dquot, + TP_PROTO(struct xfs_dquot *dqp, char *func, struct xfs_inode *ip), + TP_ARGS(dqp, func, ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino); + __field(__be32, id) + __field(char *, func) + __field(unsigned, flags) + __field(unsigned, nrefs) + __field(__u64, res_bcount) + __field(__be64, bcount) + __field(__be64, icount) + __field(__be64, blk_hardlimit) + __field(__be64, blk_softlimit) + __field(__be64, ino_hardlimit) + __field(__be64, ino_softlimit) + ), + + TP_fast_assign( + __entry->dev = dqp->q_mount->m_super->s_dev; + __entry->ino = ip ? ip->i_ino : 0; + __entry->id = dqp->q_core.d_id; + __entry->func = func; + __entry->flags = dqp->dq_flags; + __entry->nrefs = dqp->q_nrefs; + __entry->res_bcount = dqp->q_res_bcount; + __entry->bcount = dqp->q_core.d_bcount; + __entry->icount = dqp->q_core.d_icount; + __entry->blk_hardlimit = dqp->q_core.d_blk_hardlimit; + __entry->blk_softlimit = dqp->q_core.d_blk_softlimit; + __entry->ino_hardlimit = dqp->q_core.d_ino_hardlimit; + __entry->ino_softlimit = dqp->q_core.d_ino_softlimit; + ), + + TP_printk("dev %d:%d ino 0x%llx id 0x%x %s flags %s nrefs %u res_bc 0x%llx " + "bcnt 0x%llx [hard 0x%llx | soft 0x%llx] " + "icnt 0x%llx [hard 0x%llx | soft 0x%llx]", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + be32_to_cpu(__entry->id), + __entry->func, + __print_flags(__entry->flags, "|", XFS_DQ_FLAGS), + __entry->nrefs, + (unsigned long long)__entry->res_bcount, + (unsigned long long)be64_to_cpu(__entry->bcount), + (unsigned long long)be64_to_cpu(__entry->blk_hardlimit), + (unsigned long long)be64_to_cpu(__entry->blk_softlimit), + (unsigned long long)be64_to_cpu(__entry->icount), + (unsigned long long)be64_to_cpu(__entry->ino_hardlimit), + (unsigned long long)be64_to_cpu(__entry->ino_softlimit)) + +); + +#define xfs_dqtrace_entry_ino(dqp, func, ip) \ + trace_xfs_dquot((dqp), (func), (ip)); +#define xfs_dqtrace_entry(dqp, func) \ + trace_xfs_dquot((dqp), (func), NULL) + +/* + * ilock/iolock tracer + * + * Reports the inode, operation, flags and caller for each operation + * on the inode locks. + */ +TRACE_EVENT(xfs_ilock, + TP_PROTO(struct xfs_inode *ip, const char *op, unsigned lockflags, + unsigned long caller_ip), + TP_ARGS(ip, op, lockflags, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(const char *, op) + __field(int, lockflags) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->lockflags = lockflags; + __entry->caller_ip = caller_ip; + ), + + TP_printk("dev %d:%d ino 0x%lld %s %s by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __print_flags(__entry->lockflags, "|", XFS_LOCK_FLAGS), + (void *)__entry->caller_ip) +); + +/* + * Trace relevant inode operations. + * + * XXX: merge with the ilock tracer?? + */ +TRACE_EVENT(xfs_inode, + TP_PROTO(struct xfs_inode *ip, const char *op, unsigned long caller_ip), + TP_ARGS(ip, op, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(const char *, op) + __field(unsigned long, caller_ip) + __field(int, icount) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->caller_ip = caller_ip; + __entry->icount = atomic_read(&VFS_I(ip)->i_count); + ), + + TP_printk("dev %d:%d ino 0x%llx %s count %d by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->icount, + (char *)__entry->caller_ip) +); + +/* + * Trace log grants. + * + * XXX: string argument is rather unstructured + */ +TRACE_EVENT(xfs_loggrant, + TP_PROTO(struct log *log, struct xlog_ticket *tic, char *string), + TP_ARGS(log, tic, string), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(char *, string) + __field(unsigned, trans_type) + __field(char, ocnt) + __field(char, cnt) + __field(int, curr_res) + __field(int, unit_res) + __field(void *, reserve_headq) + __field(void *, write_headq) + __field(int, grant_reserve_cycle) + __field(int, grant_reserve_bytes) + __field(int, grant_write_cycle) + __field(int, grant_write_bytes) + __field(int, curr_cycle) + __field(int, curr_block) + __field(xfs_lsn_t, tail_lsn) + ), + + TP_fast_assign( + __entry->dev = log->l_mp->m_super->s_dev; + __entry->string = string; + __entry->trans_type = tic->t_trans_type; + __entry->ocnt = tic->t_ocnt; + __entry->cnt = tic->t_cnt; + __entry->curr_res = tic->t_curr_res; + __entry->unit_res = tic->t_unit_res; + __entry->reserve_headq = log->l_reserve_headq; + __entry->write_headq = log->l_write_headq; + __entry->grant_reserve_cycle = log->l_grant_reserve_cycle; + __entry->grant_reserve_bytes = log->l_grant_reserve_bytes; + __entry->grant_write_cycle = log->l_grant_write_cycle; + __entry->grant_write_bytes = log->l_grant_write_bytes; + __entry->curr_cycle = log->l_curr_cycle; + __entry->curr_block = log->l_curr_block; + __entry->tail_lsn = log->l_tail_lsn; + ), + + TP_printk("dev %d:%d %s %s t_ocnt %u t_cnt %u t_curr_res %u t_unit_res %u " + "reserve_headq 0x%p write_headq 0x%p grant_reserve_cycle %d " + "grant_reserve_bytes %d grant_write_cycle %d " + "grant_write_bytes %d curr_cycle %d curr_block %d " + "tail_cycle %d tail_block %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->string, + __print_symbolic(__entry->trans_type, XFS_TRANS_TYPES), + __entry->ocnt, + __entry->cnt, + __entry->curr_res, + __entry->unit_res, + __entry->reserve_headq, + __entry->write_headq, + __entry->grant_reserve_cycle, + __entry->grant_reserve_bytes, + __entry->grant_write_cycle, + __entry->grant_write_bytes, + __entry->curr_cycle, + __entry->curr_block, + CYCLE_LSN(__entry->tail_lsn), + BLOCK_LSN(__entry->tail_lsn) + ) +); + +#define xlog_trace_loggrant(log, tic, str) \ + trace_xfs_loggrant((log), (tic), (str)) + +/* + * Trace read/write/splice. + */ +TRACE_EVENT(xfs_rw, + TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset, + int ioflags, const char *op), + TP_ARGS(ip, count, offset, ioflags, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_fsize_t, new_size) + __field(loff_t, offset) + __field(size_t, count) + __field(int, ioflags) + __field(const char *, op) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->size = ip->i_d.di_size; + __entry->new_size = ip->i_new_size; + __entry->offset = offset; + __entry->count = count; + __entry->ioflags = ioflags; + ), + + TP_printk("dev %d:%d ino 0x%llx %s size 0x%llx new_size 0x%llx " + "offset 0x%llx count 0x%zx ioflags %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->size, + __entry->new_size, + __entry->offset, + __entry->count, + __print_flags(__entry->ioflags, "|", XFS_IO_FLAGS)) +); + +/* + * Trace addres space operations + */ +TRACE_EVENT(xfs_page, + TP_PROTO(struct inode *inode, struct page *page, unsigned long offset, + const char *op), + TP_ARGS(inode, page, offset, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(pgoff_t, pgoff) + __field(loff_t, size) + __field(unsigned long, offset) + __field(int, delalloc) + __field(int, unmapped) + __field(int, unwritten) + __field(const char *, op) + ), + + TP_fast_assign( + int delalloc = -1, unmapped = -1, unwritten = -1; + + if (page_has_buffers(page)) + xfs_count_page_state(page, &delalloc, + &unmapped, &unwritten); + + __entry->dev = inode->i_sb->s_dev; + __entry->ino = XFS_I(inode)->i_ino; + __entry->op = op; + __entry->pgoff = page_offset(page); + __entry->size = i_size_read(inode); + __entry->offset = offset; + __entry->delalloc = delalloc; + __entry->unmapped = unmapped; + __entry->unwritten = unwritten; + ), + + TP_printk("dev %d:%d ino 0x%llx %s pgoff 0x%lx size 0x%llx offset %lx " + "delalloc %d unmapped %d unwritten %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->pgoff, + __entry->size, + __entry->offset, + __entry->delalloc, + __entry->unmapped, + __entry->unwritten) +); + +TRACE_EVENT(xfs_iomap, + TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, + int flags, struct xfs_bmbt_irec *irec, const char *op), + TP_ARGS(ip, offset, count, flags, irec, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(const char *, op) + __field(loff_t, size) + __field(loff_t, new_size) + __field(loff_t, offset) + __field(size_t, count) + __field(int, flags) + __field(xfs_fileoff_t, startoff) + __field(xfs_fsblock_t, startblock) + __field(xfs_filblks_t, blockcount) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->size = ip->i_d.di_size; + __entry->new_size = ip->i_new_size; + __entry->offset = offset; + __entry->count = count; + __entry->flags = flags; + __entry->startoff = irec ? irec->br_startoff : 0; + __entry->startblock = irec ? irec->br_startblock : 0; + __entry->blockcount = irec ? irec->br_blockcount : 0; + + ), + + TP_printk("dev %d:%d ino 0x%llx %s size 0x%llx new_size 0x%llx " + "offset 0x%llx count 0x%x flags %s " + "startoff 0x%llx startblock 0x%llx blockcount 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->size, + __entry->new_size, + __entry->offset, + __entry->count, + __print_flags(__entry->flags, "|", BMAPI_FLAGS), + __entry->startoff, + __entry->startblock, + __entry->blockcount) +); + +TRACE_EVENT(xfs_itrunc, + TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size, int flag, + xfs_off_t toss_start, xfs_off_t toss_finish, const char *op), + TP_ARGS(ip, new_size, flag, toss_start, toss_finish, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_fsize_t, new_size) + __field(xfs_off_t, toss_start) + __field(xfs_off_t, toss_finish) + __field(const char *, op) + __field(int, flag) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->size = ip->i_d.di_size; + __entry->new_size = new_size; + __entry->toss_start = toss_start; + __entry->toss_finish = toss_finish; + __entry->op = op; + __entry->flag = flag; + ), + + TP_printk("dev %d:%d ino 0x%llx %s %s size 0x%llx new_size 0x%llx " + "toss start 0x%llx toss finish 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __print_flags(__entry->flag, "|", XFS_ITRUNC_FLAGS), + __entry->size, + __entry->new_size, + __entry->toss_start, + __entry->toss_finish) +); + +TRACE_EVENT(xfs_pagecache_inval, + TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish), + TP_ARGS(ip, start, finish), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_off_t, start) + __field(xfs_off_t, finish) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->size = ip->i_d.di_size; + __entry->start = start; + __entry->finish = finish; + ), + + TP_printk("dev %d:%d ino 0x%llx size 0x%llx start 0x%llx finish 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->size, + __entry->start, + __entry->finish) +); + +TRACE_EVENT(xfs_bunmap, + TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t bno, xfs_filblks_t len, + int flags, unsigned long caller_ip), + TP_ARGS(ip, bno, len, flags, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_fileoff_t, bno) + __field(xfs_filblks_t, len) + __field(unsigned long, caller_ip) + __field(int, flags) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->size = ip->i_d.di_size; + __entry->bno = bno; + __entry->len = len; + __entry->caller_ip = caller_ip; + __entry->flags = flags; + ), + + TP_printk("dev %d:%d ino 0x%llx size 0x%llx bno 0x%llx len 0x%llx" + "flags %s by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->size, + __entry->bno, + __entry->len, + __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS), + (void *)__entry->caller_ip) + +); + +#define xfs_bunmap_trace(ip, bno, len, flags) \ + trace_xfs_bunmap(ip, bno, len, flags, _RET_IP_) + +/* XXX: better even description instead of caller_ip + op?? */ +TRACE_EVENT(xfs_alloc_busy, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_extlen_t len, int slot, const char *op), + TP_ARGS(mp, agno, agbno, len, slot, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(const char *, op) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_extlen_t, len) + __field(int, slot) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->op = op; + __entry->agno = agno; + __entry->agbno = agbno; + __entry->len = len; + __entry->slot = slot; + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d %s agno %u agbno %u len %u slot %d by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->op, + __entry->agno, + __entry->agbno, + __entry->len, + __entry->slot, + (void *)__entry->caller_ip) + +); +#define xfs_trace_alloc_busy(mp, ag, agb, l, sl, op) \ + trace_xfs_alloc_busy(mp, ag, agb, l, sl, op) +#define xfs_trace_alloc_unbusy(mp, ag, sl, op) \ + trace_xfs_alloc_busy(mp, ag, -1, -1, sl, op) +#define xfs_trace_alloc_busysearch(mp, ag, agb, l, op) \ + trace_xfs_alloc_busy(mp, ag, agb, l, 0, op) + +/* + * Trace modifications to the AG freelist headers. + * + * XXX: maybe move to a single caller in xfs_alloc_log_agf? + */ +TRACE_EVENT(xfs_agf, + TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags), + TP_ARGS(mp, agf, flags), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(int, flags) + __field(__u32, length) + __field(__u32, bno_root) + __field(__u32, cnt_root) + __field(__u32, bno_level) + __field(__u32, cnt_level) + __field(__u32, flfirst) + __field(__u32, fllast) + __field(__u32, flcount) + __field(__u32, freeblks) + __field(__u32, longest) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = be32_to_cpu(agf->agf_seqno), + __entry->flags = flags; + __entry->length = be32_to_cpu(agf->agf_length), + __entry->bno_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), + __entry->cnt_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), + __entry->bno_level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), + __entry->cnt_level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), + __entry->flfirst = be32_to_cpu(agf->agf_flfirst), + __entry->fllast = be32_to_cpu(agf->agf_fllast), + __entry->flcount = be32_to_cpu(agf->agf_flcount), + __entry->freeblks = be32_to_cpu(agf->agf_freeblks), + __entry->longest = be32_to_cpu(agf->agf_longest); + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d agno %u flags %s length %u roots b %u c %u " + "levels b %u c %u flfirst %u fllast %u flcount %u " + "freeblks %u longest %u by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __print_flags(__entry->flags, "|", XFS_AGF_FLAGS), + __entry->length, + __entry->bno_root, + __entry->cnt_root, + __entry->bno_level, + __entry->cnt_level, + __entry->flfirst, + __entry->fllast, + __entry->flcount, + __entry->freeblks, + __entry->longest, + (void *)__entry->caller_ip) +); + +#define xfs_trace_agf(mp, agf, flags) \ + trace_xfs_agf(mp, agf, flags) + +TRACE_EVENT(xfs_free_extent, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_extlen_t len, bool isfl, int haveleft, int haveright), + TP_ARGS(mp, agno, agbno, len, isfl, haveleft, haveright), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_extlen_t, len) + __field(int, isfl) + __field(int, haveleft) + __field(int, haveright) + ), + + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->agbno = agbno; + __entry->len = len; + __entry->isfl = isfl; + __entry->haveleft = haveleft; + __entry->haveright = haveright; + ), + + TP_printk("dev %d:%d agno %u agbno %u len %u isfl %d %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->agbno, + __entry->len, + __entry->isfl, + __entry->haveleft ? + (__entry->haveright ? "both" : "left") : + (__entry->haveright ? "right" : "none")) + +); + +TRACE_EVENT(xfs_alloc_extent, + TP_PROTO(struct xfs_alloc_arg *args, char *op), + TP_ARGS(args, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_extlen_t, minlen) + __field(xfs_extlen_t, maxlen) + __field(xfs_extlen_t, mod) + __field(xfs_extlen_t, prod) + __field(xfs_extlen_t, minleft) + __field(xfs_extlen_t, total) + __field(xfs_extlen_t, alignment) + __field(xfs_extlen_t, len) + __field(short, type) + __field(short, otype) + __field(char, wasdel) + __field(char, wasfromfl) + __field(char, isfl) + __field(char, userdata) + __field(const char *, op) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = args->mp->m_super->s_dev; + __entry->agno = args->agno; + __entry->agbno = args->agbno; + __entry->minlen = args->minlen; + __entry->maxlen = args->maxlen; + __entry->mod = args->mod; + __entry->prod = args->prod; + __entry->minleft = args->minleft; + __entry->total = args->total; + __entry->alignment = args->alignment; + // minalignslop? + __entry->len = args->len; + __entry->type = args->type; + __entry->otype = args->otype; + __entry->wasdel = args->wasdel; + __entry->wasfromfl = args->wasfromfl; + __entry->isfl = args->isfl; + __entry->userdata = args->userdata; + // firstblock? + __entry->op = op; + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d %s agno %u agbno %u minlen %u maxlen %u mod %u prod %u " + "minleft %u total %u alignment %u len %u type %s otype %s " + "wasdel %d wasfromfl %d isfl %d userdata %d by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->op, + __entry->agno, + __entry->agbno, + __entry->minlen, + __entry->maxlen, + __entry->mod, + __entry->prod, + __entry->minleft, + __entry->total, + __entry->alignment, + __entry->len, + __print_symbolic(__entry->type, XFS_ALLOC_TYPES), + __print_symbolic(__entry->otype, XFS_ALLOC_TYPES), + __entry->wasdel, + __entry->wasfromfl, + __entry->isfl, + __entry->userdata, + (char *)__entry->caller_ip) +); + +#define xfs_trace_alloc_extent(args, str) \ + trace_xfs_alloc_extent(args, str) + +TRACE_EVENT(xfs_dir2, + TP_PROTO(struct xfs_da_args *args, int i, int j, int count), + TP_ARGS(args, i, j, count), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __dynamic_array(char, name, args->namelen) + __field(int, namelen) + __field(xfs_dahash_t, hashval) + __field(xfs_ino_t, inumber) + __field(int, op_flags) + __field(int, i) + __field(int, j) + __field(int, count) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = VFS_I(args->dp)->i_sb->s_dev; + __entry->ino = args->dp->i_ino; + if (args->namelen) + memcpy(__get_str(name), args->name, args->namelen); + __entry->namelen = args->namelen; + __entry->hashval = args->hashval; + __entry->inumber = args->inumber; + __entry->op_flags = args->op_flags; + __entry->i = i; + __entry->j = j; + __entry->count = count; + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d ino 0x%lld %pf name %.*s namelen %d hashval 0x%x " + "inumber 0x%llx op_flags %s i %d j %d count %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + (void *)__entry->caller_ip, + __entry->namelen, + __entry->namelen ? __get_str(name) : NULL, + __entry->namelen, + __entry->hashval, + __entry->inumber, + __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS), + __entry->i, + __entry->j, + __entry->count) +); + +#define __xfs_trace_dir2(args, i, j, count) \ + trace_xfs_dir2((args), (i), (j), (count)) +#define xfs_trace_dir2(args) \ + trace_xfs_dir2((args), 0, 0, 0) + +#endif /* _TRACE_XFS_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#define TRACE_INCLUDE_FILE xfs_trace +#include Index: linux-2.6/fs/xfs/xfs.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs.h 2009-06-16 22:37:56.275814820 +0200 +++ linux-2.6/fs/xfs/xfs.h 2009-06-16 22:37:58.221955126 +0200 @@ -25,21 +25,5 @@ /* #define QUOTADEBUG 1 */ #endif -#ifdef CONFIG_XFS_TRACE -#define XFS_ALLOC_TRACE 1 -#define XFS_ATTR_TRACE 1 -#define XFS_BLI_TRACE 1 -#define XFS_BMAP_TRACE 1 -#define XFS_BTREE_TRACE 1 -#define XFS_DIR2_TRACE 1 -#define XFS_DQUOT_TRACE 1 -#define XFS_ILOCK_TRACE 1 -#define XFS_LOG_TRACE 1 -#define XFS_RW_TRACE 1 -#define XFS_BUF_TRACE 1 -#define XFS_INODE_TRACE 1 -#define XFS_FILESTREAMS_TRACE 1 -#endif - #include #endif /* __XFS_H__ */ Index: linux-2.6/fs/xfs/quota/xfs_qm.c =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_qm.c 2009-06-16 22:37:56.177814628 +0200 +++ linux-2.6/fs/xfs/quota/xfs_qm.c 2009-06-16 22:37:58.222964962 +0200 @@ -47,6 +47,7 @@ #include "xfs_trans_space.h" #include "xfs_utils.h" #include "xfs_qm.h" +#include "xfs_trace.h" /* * The global quota manager. There is only one of these for the entire @@ -1350,7 +1351,8 @@ xfs_qm_reset_dqcounts( xfs_disk_dquot_t *ddq; int j; - xfs_buftrace("RESET DQUOTS", bp); + xfs_buftrace(bp, "reset_dquots"); + /* * Reset all counters and timers. They'll be * started afresh by xfs_qm_quotacheck. Index: linux-2.6/fs/xfs/quota/xfs_qm_syscalls.c =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_qm_syscalls.c 2009-06-16 22:37:56.182815196 +0200 +++ linux-2.6/fs/xfs/quota/xfs_qm_syscalls.c 2009-06-16 22:37:58.223966276 +0200 @@ -49,6 +49,7 @@ #include "xfs_buf_item.h" #include "xfs_utils.h" #include "xfs_qm.h" +#include "xfs_trace.h" #ifdef DEBUG # define qdprintk(s, args...) cmn_err(CE_DEBUG, s, ## args) Index: linux-2.6/fs/xfs/xfs_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_btree.c 2009-06-16 22:37:56.280813920 +0200 +++ linux-2.6/fs/xfs/xfs_btree.c 2009-06-16 22:37:58.225964785 +0200 @@ -39,6 +39,7 @@ #include "xfs_btree_trace.h" #include "xfs_ialloc.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Cursor allocation zone. @@ -81,7 +82,7 @@ xfs_btree_check_lblock( XFS_ERRTAG_BTREE_CHECK_LBLOCK, XFS_RANDOM_BTREE_CHECK_LBLOCK))) { if (bp) - xfs_buftrace("LBTREE ERROR", bp); + xfs_buftrace(bp, "lbtree_error"); XFS_ERROR_REPORT("xfs_btree_check_lblock", XFS_ERRLEVEL_LOW, mp); return XFS_ERROR(EFSCORRUPTED); @@ -119,7 +120,7 @@ xfs_btree_check_sblock( XFS_ERRTAG_BTREE_CHECK_SBLOCK, XFS_RANDOM_BTREE_CHECK_SBLOCK))) { if (bp) - xfs_buftrace("SBTREE ERROR", bp); + xfs_buftrace(bp, "sbtree_error"); XFS_ERROR_REPORT("xfs_btree_check_sblock", XFS_ERRLEVEL_LOW, cur->bc_mp); return XFS_ERROR(EFSCORRUPTED); Index: linux-2.6/fs/xfs/xfs_da_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_da_btree.c 2009-06-16 22:37:56.285814697 +0200 +++ linux-2.6/fs/xfs/xfs_da_btree.c 2009-06-16 22:37:58.227972862 +0200 @@ -46,6 +46,7 @@ #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * xfs_da_btree.c @@ -2107,7 +2108,7 @@ xfs_da_do_buf( (be32_to_cpu(free->hdr.magic) != XFS_DIR2_FREE_MAGIC), mp, XFS_ERRTAG_DA_READ_BUF, XFS_RANDOM_DA_READ_BUF))) { - xfs_buftrace("DA READ ERROR", rbp->bps[0]); + xfs_buftrace(rbp->bps[0], "da_read_error"); XFS_CORRUPTION_ERROR("xfs_da_do_buf(2)", XFS_ERRLEVEL_LOW, mp, info); error = XFS_ERROR(EFSCORRUPTED); Index: linux-2.6/fs/xfs/xfs_inode_item.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode_item.c 2009-06-16 22:37:56.290814565 +0200 +++ linux-2.6/fs/xfs/xfs_inode_item.c 2009-06-16 22:37:58.229964596 +0200 @@ -41,6 +41,7 @@ #include "xfs_ialloc.h" #include "xfs_rw.h" #include "xfs_error.h" +#include "xfs_trace.h" kmem_zone_t *xfs_ili_zone; /* inode log item zone */ @@ -806,7 +807,7 @@ xfs_inode_item_pushbuf( !completion_done(&ip->i_flush)); iip->ili_pushbuf_flag = 0; xfs_iunlock(ip, XFS_ILOCK_SHARED); - xfs_buftrace("INODE ITEM PUSH", bp); + xfs_buftrace(bp, "inode_item_push"); if (XFS_BUF_ISPINNED(bp)) { xfs_log_force(mp, (xfs_lsn_t)0, XFS_LOG_FORCE); Index: linux-2.6/fs/xfs/xfs_rw.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rw.c 2009-06-16 22:37:56.294814446 +0200 +++ linux-2.6/fs/xfs/xfs_rw.c 2009-06-16 22:37:58.230970311 +0200 @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_buf_item.h" #include "xfs_rw.h" +#include "xfs_trace.h" /* * This is a subroutine for xfs_write() and other writers (xfs_ioctl) @@ -255,7 +256,6 @@ xfs_bioerror( * No need to wait until the buffer is unpinned. * We aren't flushing it. */ - xfs_buftrace("XFS IOERROR", bp); XFS_BUF_ERROR(bp, EIO); /* * We're calling biodone, so delete B_DONE flag. Either way @@ -289,7 +289,6 @@ xfs_bioerror_relse( ASSERT(XFS_BUF_IODONE_FUNC(bp) != xfs_buf_iodone_callbacks); ASSERT(XFS_BUF_IODONE_FUNC(bp) != xlog_iodone); - xfs_buftrace("XFS IOERRELSE", bp); fl = XFS_BUF_BFLAGS(bp); /* * No need to wait until the buffer is unpinned. Index: linux-2.6/fs/xfs/xfs_trans_buf.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_trans_buf.c 2009-06-16 22:37:56.299814524 +0200 +++ linux-2.6/fs/xfs/xfs_trans_buf.c 2009-06-16 22:37:58.231964222 +0200 @@ -38,6 +38,7 @@ #include "xfs_trans_priv.h" #include "xfs_error.h" #include "xfs_rw.h" +#include "xfs_trace.h" STATIC xfs_buf_t *xfs_trans_buf_item_match(xfs_trans_t *, xfs_buftarg_t *, @@ -99,7 +100,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, if (bp != NULL) { ASSERT(XFS_BUF_VALUSEMA(bp) <= 0); if (XFS_FORCED_SHUTDOWN(tp->t_mountp)) { - xfs_buftrace("TRANS GET RECUR SHUT", bp); + xfs_buftrace(bp, "trans_get_recur_shut"); XFS_BUF_SUPER_STALE(bp); } /* @@ -108,7 +109,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, * caller isn't allowed to use the data anyway. */ else if (XFS_BUF_ISSTALE(bp)) { - xfs_buftrace("TRANS GET RECUR STALE", bp); + xfs_buftrace(bp, "trans_get_recur_stale"); ASSERT(!XFS_BUF_ISDELAYWRITE(bp)); } ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); @@ -116,7 +117,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, ASSERT(bip != NULL); ASSERT(atomic_read(&bip->bli_refcount) > 0); bip->bli_recur++; - xfs_buftrace("TRANS GET RECUR", bp); + xfs_buftrace(bp, "trans_get_recur"); xfs_buf_item_trace("GET RECUR", bip); return (bp); } @@ -169,7 +170,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, */ XFS_BUF_SET_FSPRIVATE2(bp, tp); - xfs_buftrace("TRANS GET", bp); + xfs_buftrace(bp, "trans_get"); xfs_buf_item_trace("GET", bip); return (bp); } @@ -350,7 +351,7 @@ xfs_trans_read_buf( ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); ASSERT((XFS_BUF_ISERROR(bp)) == 0); if (!(XFS_BUF_ISDONE(bp))) { - xfs_buftrace("READ_BUF_INCORE !DONE", bp); + xfs_buftrace(bp, "trans_read_buf_io"); ASSERT(!XFS_BUF_ISASYNC(bp)); XFS_BUF_READ(bp); xfsbdstrat(tp->t_mountp, bp); @@ -375,7 +376,7 @@ xfs_trans_read_buf( * brelse it either. Just get out. */ if (XFS_FORCED_SHUTDOWN(mp)) { - xfs_buftrace("READ_BUF_INCORE XFSSHUTDN", bp); + xfs_buftrace(bp, "trans_read_buf_shut_incore"); *bpp = NULL; return XFS_ERROR(EIO); } @@ -405,7 +406,7 @@ xfs_trans_read_buf( } if (XFS_BUF_GETERROR(bp) != 0) { XFS_BUF_SUPER_STALE(bp); - xfs_buftrace("READ ERROR", bp); + xfs_buftrace(bp, "trans_read_buf_error"); error = XFS_BUF_GETERROR(bp); xfs_ioerror_alert("xfs_trans_read_buf", mp, @@ -464,7 +465,7 @@ xfs_trans_read_buf( */ XFS_BUF_SET_FSPRIVATE2(bp, tp); - xfs_buftrace("TRANS READ", bp); + xfs_buftrace(bp, "trans_read_buf"); xfs_buf_item_trace("READ", bip); *bpp = bp; return 0; @@ -483,7 +484,7 @@ shutdown_abort: ASSERT((XFS_BUF_BFLAGS(bp) & (XFS_B_STALE|XFS_B_DELWRI)) != (XFS_B_STALE|XFS_B_DELWRI)); - xfs_buftrace("READ_BUF XFSSHUTDN", bp); + xfs_buftrace(bp, "trans_read_buf_shut"); xfs_buf_relse(bp); *bpp = NULL; return XFS_ERROR(EIO); @@ -843,7 +844,7 @@ xfs_trans_binval( ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); ASSERT(lidp->lid_flags & XFS_LID_DIRTY); ASSERT(tp->t_flags & XFS_TRANS_DIRTY); - xfs_buftrace("XFS_BINVAL RECUR", bp); + xfs_buftrace(bp, "trans_binval_recur"); xfs_buf_item_trace("BINVAL RECUR", bip); return; } @@ -878,7 +879,7 @@ xfs_trans_binval( (bip->bli_format.blf_map_size * sizeof(uint))); lidp->lid_flags |= XFS_LID_DIRTY|XFS_LID_BUF_STALE; tp->t_flags |= XFS_TRANS_DIRTY; - xfs_buftrace("XFS_BINVAL", bp); + xfs_buftrace(bp, "trans_binval"); xfs_buf_item_trace("BINVAL", bip); } Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.h 2009-06-16 22:37:56.120814701 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.h 2009-06-16 22:37:58.231964222 +0200 @@ -56,12 +56,6 @@ extern void xfs_qm_exit(void); # define XFS_BIGFS_STRING #endif -#ifdef CONFIG_XFS_TRACE -# define XFS_TRACE_STRING "tracing, " -#else -# define XFS_TRACE_STRING -#endif - #ifdef CONFIG_XFS_DMAPI # define XFS_DMAPI_STRING "dmapi support, " #else @@ -78,7 +72,6 @@ extern void xfs_qm_exit(void); XFS_SECURITY_STRING \ XFS_REALTIME_STRING \ XFS_BIGFS_STRING \ - XFS_TRACE_STRING \ XFS_DMAPI_STRING \ XFS_DBG_STRING /* DBG must be last */ Index: linux-2.6/fs/xfs/linux-2.6/xfs_ioctl.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_ioctl.c 2009-06-16 22:37:56.124814373 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_ioctl.c 2009-06-16 22:37:58.232964210 +0200 @@ -51,6 +51,7 @@ #include "xfs_quota.h" #include "xfs_inode_item.h" #include "xfs_export.h" +#include "xfs_trace.h" #include #include Index: linux-2.6/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_iops.c 2009-06-16 22:37:56.144814546 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_iops.c 2009-06-16 22:37:58.233964687 +0200 @@ -48,6 +48,7 @@ #include "xfs_buf_item.h" #include "xfs_utils.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include Index: linux-2.6/fs/xfs/xfs_dfrag.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dfrag.c 2009-06-16 22:37:56.303814475 +0200 +++ linux-2.6/fs/xfs/xfs_dfrag.c 2009-06-16 22:37:58.233964687 +0200 @@ -43,6 +43,7 @@ #include "xfs_error.h" #include "xfs_rw.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" /* * Syssgi interface for swapext @@ -168,7 +169,6 @@ xfs_swap_extents( } if (VN_CACHED(VFS_I(tip)) != 0) { - xfs_inval_cached_trace(tip, 0, -1, 0, -1); error = xfs_flushinval_pages(tip, 0, -1, FI_REMAPF_LOCKED); if (error) Index: linux-2.6/fs/xfs/xfs_dir2.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2.c 2009-06-16 22:37:56.308814693 +0200 +++ linux-2.6/fs/xfs/xfs_dir2.c 2009-06-16 22:37:58.234964744 +0200 @@ -40,9 +40,9 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" struct xfs_name xfs_name_dotdot = {"..", 2}; @@ -525,7 +525,8 @@ xfs_dir2_grow_inode( xfs_trans_t *tp; xfs_drfsbno_t nblks; - xfs_dir2_trace_args_s("grow_inode", args, space); + __xfs_trace_dir2(args, space, 0, 0); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -703,7 +704,8 @@ xfs_dir2_shrink_inode( xfs_mount_t *mp; xfs_trans_t *tp; - xfs_dir2_trace_args_db("shrink_inode", args, db, bp); + __xfs_trace_dir2(args, db, 0, 0); + dp = args->dp; mp = dp->i_mount; tp = args->trans; Index: linux-2.6/fs/xfs/xfs_log_recover.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_log_recover.c 2009-06-16 22:37:56.313814631 +0200 +++ linux-2.6/fs/xfs/xfs_log_recover.c 2009-06-16 22:37:58.236963323 +0200 @@ -46,6 +46,7 @@ #include "xfs_quota.h" #include "xfs_rw.h" #include "xfs_utils.h" +#include "xfs_trace.h" STATIC int xlog_find_zeroed(xlog_t *, xfs_daddr_t *); STATIC int xlog_clear_stale_blocks(xlog_t *, xfs_lsn_t); Index: linux-2.6/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_mount.c 2009-06-16 22:37:56.318814709 +0200 +++ linux-2.6/fs/xfs/xfs_mount.c 2009-06-16 22:37:58.238940390 +0200 @@ -44,6 +44,8 @@ #include "xfs_quota.h" #include "xfs_fsops.h" #include "xfs_utils.h" +#include "xfs_trace.h" + STATIC void xfs_unmountfs_wait(xfs_mount_t *); Index: linux-2.6/fs/xfs/xfs_rename.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rename.c 2009-06-16 22:37:56.323814648 +0200 +++ linux-2.6/fs/xfs/xfs_rename.c 2009-06-16 22:37:58.239964822 +0200 @@ -39,6 +39,7 @@ #include "xfs_utils.h" #include "xfs_trans_space.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" /* Index: linux-2.6/fs/xfs/xfs_rtalloc.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rtalloc.c 2009-06-16 22:37:56.327814668 +0200 +++ linux-2.6/fs/xfs/xfs_rtalloc.c 2009-06-16 22:37:58.241964029 +0200 @@ -45,6 +45,7 @@ #include "xfs_inode_item.h" #include "xfs_trans_space.h" #include "xfs_utils.h" +#include "xfs_trace.h" /* Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c 2009-06-16 22:37:56.332814607 +0200 +++ linux-2.6/fs/xfs/xfs_vnodeops.c 2009-06-16 22:37:58.243968754 +0200 @@ -53,6 +53,7 @@ #include "xfs_log_priv.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" int xfs_setattr( @@ -2877,7 +2878,6 @@ xfs_free_file_space( ioffset = offset & ~(rounding - 1); if (VN_CACHED(VFS_I(ip)) != 0) { - xfs_inval_cached_trace(ip, ioffset, -1, ioffset, -1); error = xfs_flushinval_pages(ip, ioffset, -1, FI_REMAPF_LOCKED); if (error) goto out_unlock_iolock; Index: linux-2.6/fs/xfs/xfs_btree_trace.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_btree_trace.h 2009-06-16 22:37:56.336814139 +0200 +++ linux-2.6/fs/xfs/xfs_btree_trace.h 2009-06-16 22:37:58.244972932 +0200 @@ -58,8 +58,6 @@ void xfs_btree_trace_argbi(const char *, struct xfs_buf *, int, int); void xfs_btree_trace_argbii(const char *, struct xfs_btree_cur *, struct xfs_buf *, int, int, int); -void xfs_btree_trace_argfffi(const char *, struct xfs_btree_cur *, - xfs_dfiloff_t, xfs_dfsbno_t, xfs_dfilblks_t, int, int); void xfs_btree_trace_argi(const char *, struct xfs_btree_cur *, int, int); void xfs_btree_trace_argipk(const char *, struct xfs_btree_cur *, int, union xfs_btree_ptr, union xfs_btree_key *, int); @@ -71,24 +69,10 @@ void xfs_btree_trace_argr(const char *, union xfs_btree_rec *, int); void xfs_btree_trace_cursor(const char *, struct xfs_btree_cur *, int, int); - -#define XFS_ALLOCBT_TRACE_SIZE 4096 /* size of global trace buffer */ -extern ktrace_t *xfs_allocbt_trace_buf; - -#define XFS_INOBT_TRACE_SIZE 4096 /* size of global trace buffer */ -extern ktrace_t *xfs_inobt_trace_buf; - -#define XFS_BMBT_TRACE_SIZE 4096 /* size of global trace buffer */ -#define XFS_BMBT_KTRACE_SIZE 32 /* size of per-inode trace buffer */ -extern ktrace_t *xfs_bmbt_trace_buf; - - #define XFS_BTREE_TRACE_ARGBI(c, b, i) \ xfs_btree_trace_argbi(__func__, c, b, i, __LINE__) #define XFS_BTREE_TRACE_ARGBII(c, b, i, j) \ xfs_btree_trace_argbii(__func__, c, b, i, j, __LINE__) -#define XFS_BTREE_TRACE_ARGFFFI(c, o, b, i, j) \ - xfs_btree_trace_argfffi(__func__, c, o, b, i, j, __LINE__) #define XFS_BTREE_TRACE_ARGI(c, i) \ xfs_btree_trace_argi(__func__, c, i, __LINE__) #define XFS_BTREE_TRACE_ARGIPK(c, i, p, k) \ @@ -104,7 +88,6 @@ extern ktrace_t *xfs_bmbt_trace_buf; #else #define XFS_BTREE_TRACE_ARGBI(c, b, i) #define XFS_BTREE_TRACE_ARGBII(c, b, i, j) -#define XFS_BTREE_TRACE_ARGFFFI(c, o, b, i, j) #define XFS_BTREE_TRACE_ARGI(c, i) #define XFS_BTREE_TRACE_ARGIPK(c, i, p, s) #define XFS_BTREE_TRACE_ARGIPR(c, i, p, r) Index: linux-2.6/fs/xfs/linux-2.6/xfs_lrw.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_lrw.h 2009-06-16 22:37:56.148814566 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_lrw.h 2009-06-16 22:37:58.245981510 +0200 @@ -20,52 +20,7 @@ struct xfs_mount; struct xfs_inode; -struct xfs_bmbt_irec; struct xfs_buf; -struct xfs_iomap; - -#if defined(XFS_RW_TRACE) -/* - * Defines for the trace mechanisms in xfs_lrw.c. - */ -#define XFS_RW_KTRACE_SIZE 128 - -#define XFS_READ_ENTER 1 -#define XFS_WRITE_ENTER 2 -#define XFS_IOMAP_READ_ENTER 3 -#define XFS_IOMAP_WRITE_ENTER 4 -#define XFS_IOMAP_READ_MAP 5 -#define XFS_IOMAP_WRITE_MAP 6 -#define XFS_IOMAP_WRITE_NOSPACE 7 -#define XFS_ITRUNC_START 8 -#define XFS_ITRUNC_FINISH1 9 -#define XFS_ITRUNC_FINISH2 10 -#define XFS_CTRUNC1 11 -#define XFS_CTRUNC2 12 -#define XFS_CTRUNC3 13 -#define XFS_CTRUNC4 14 -#define XFS_CTRUNC5 15 -#define XFS_CTRUNC6 16 -#define XFS_BUNMAP 17 -#define XFS_INVAL_CACHED 18 -#define XFS_DIORD_ENTER 19 -#define XFS_DIOWR_ENTER 20 -#define XFS_WRITEPAGE_ENTER 22 -#define XFS_RELEASEPAGE_ENTER 23 -#define XFS_INVALIDPAGE_ENTER 24 -#define XFS_IOMAP_ALLOC_ENTER 25 -#define XFS_IOMAP_ALLOC_MAP 26 -#define XFS_IOMAP_UNWRITTEN 27 -#define XFS_SPLICE_READ_ENTER 28 -#define XFS_SPLICE_WRITE_ENTER 29 -extern void xfs_rw_enter_trace(int, struct xfs_inode *, - void *, size_t, loff_t, int); -extern void xfs_inval_cached_trace(struct xfs_inode *, - xfs_off_t, xfs_off_t, xfs_off_t, xfs_off_t); -#else -#define xfs_rw_enter_trace(tag, ip, data, size, offset, ioflags) -#define xfs_inval_cached_trace(ip, offset, len, first, last) -#endif /* errors from xfsbdstrat() must be extracted from the buffer */ extern void xfsbdstrat(struct xfs_mount *, struct xfs_buf *); Index: linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_vnode.h 2009-06-16 22:37:56.153816809 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h 2009-06-16 22:37:58.245981510 +0200 @@ -40,6 +40,11 @@ struct attrlist_cursor_kern; #define IO_ISDIRECT 0x00004 /* bypass page cache */ #define IO_INVIS 0x00020 /* don't update inode timestamps */ +#define XFS_IO_FLAGS \ + { IO_ISAIO, "AIO" }, \ + { IO_ISDIRECT, "DIRECT" }, \ + { IO_INVIS, "INVIS"} + /* * Flush/Invalidate options for vop_toss/flush/flushinval_pages. */ Index: linux-2.6/fs/xfs/xfs_attr.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr.h 2009-06-16 22:37:56.342814833 +0200 +++ linux-2.6/fs/xfs/xfs_attr.h 2009-06-16 22:37:58.246939105 +0200 @@ -48,6 +48,16 @@ struct xfs_attr_list_context; #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */ #define ATTR_KERNOVAL 0x2000 /* [kernel] get attr size only, not value */ +#define XFS_ATTR_FLAGS \ + { ATTR_DONTFOLLOW, "DONTFOLLOW" }, \ + { ATTR_ROOT, "ROOT" }, \ + { ATTR_TRUST, "TRUST" }, \ + { ATTR_SECURE, "SECURE" }, \ + { ATTR_CREATE, "CREATE" }, \ + { ATTR_REPLACE, "REPLACE" }, \ + { ATTR_KERNOTIME, "KERNOTIME" }, \ + { ATTR_KERNOVAL, "KERNOVAL" } + /* * The maximum size (into the kernel or returned from the kernel) of an * attribute value or the buffer used for an attr_list() call. Larger Index: linux-2.6/fs/xfs/xfs_iomap.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iomap.h 2009-06-16 22:37:56.346814854 +0200 +++ linux-2.6/fs/xfs/xfs_iomap.h 2009-06-16 22:37:58.246939105 +0200 @@ -43,6 +43,14 @@ typedef enum { BMAPI_TRYLOCK = (1 << 7), /* non-blocking request */ } bmapi_flags_t; +#define BMAPI_FLAGS \ + { BMAPI_READ, "READ" }, \ + { BMAPI_WRITE, "WRITE" }, \ + { BMAPI_ALLOCATE, "ALLOCATE" }, \ + { BMAPI_IGNSTATE, "IGNSTATE" }, \ + { BMAPI_DIRECT, "DIRECT" }, \ + { BMAPI_MMAP, "MMAP" }, \ + { BMAPI_TRYLOCK, "TRYLOCK" } /* * xfs_iomap_t: File system I/O map Index: linux-2.6/fs/xfs/xfs_quota.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_quota.h 2009-06-16 22:37:56.351814443 +0200 +++ linux-2.6/fs/xfs/xfs_quota.h 2009-06-16 22:37:58.247965422 +0200 @@ -92,6 +92,14 @@ typedef struct xfs_dqblk { #define XFS_DQ_ALLTYPES (XFS_DQ_USER|XFS_DQ_PROJ|XFS_DQ_GROUP) +#define XFS_DQ_FLAGS \ + { XFS_DQ_USER, "USER" }, \ + { XFS_DQ_PROJ, "PROJ" }, \ + { XFS_DQ_GROUP, "GROUP" }, \ + { XFS_DQ_DIRTY, "DIRTY" }, \ + { XFS_DQ_WANT, "WANT" }, \ + { XFS_DQ_INACTIVE, "INACTIVE" } + /* * In the worst case, when both user and group quotas are on, * we can have a max of three dquots changing in a single transaction. Index: linux-2.6/fs/xfs/xfs_trans.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_trans.h 2009-06-16 22:37:56.356814591 +0200 +++ linux-2.6/fs/xfs/xfs_trans.h 2009-06-16 22:37:58.248969810 +0200 @@ -100,6 +100,50 @@ typedef struct xfs_trans_header { #define XFS_TRANS_TYPE_MAX 41 /* new transaction types need to be reflected in xfs_logprint(8) */ +#define XFS_TRANS_TYPES \ + { XFS_TRANS_SETATTR_NOT_SIZE, "SETATTR_NOT_SIZE" }, \ + { XFS_TRANS_SETATTR_SIZE, "SETATTR_SIZE" }, \ + { XFS_TRANS_INACTIVE, "INACTIVE" }, \ + { XFS_TRANS_CREATE, "CREATE" }, \ + { XFS_TRANS_CREATE_TRUNC, "CREATE_TRUNC" }, \ + { XFS_TRANS_TRUNCATE_FILE, "TRUNCATE_FILE" }, \ + { XFS_TRANS_REMOVE, "REMOVE" }, \ + { XFS_TRANS_LINK, "LINK" }, \ + { XFS_TRANS_RENAME, "RENAME" }, \ + { XFS_TRANS_MKDIR, "MKDIR" }, \ + { XFS_TRANS_RMDIR, "RMDIR" }, \ + { XFS_TRANS_SYMLINK, "SYMLINK" }, \ + { XFS_TRANS_SET_DMATTRS, "SET_DMATTRS" }, \ + { XFS_TRANS_GROWFS, "GROWFS" }, \ + { XFS_TRANS_STRAT_WRITE, "STRAT_WRITE" }, \ + { XFS_TRANS_DIOSTRAT, "DIOSTRAT" }, \ + { XFS_TRANS_WRITE_SYNC, "WRITE_SYNC" }, \ + { XFS_TRANS_WRITEID, "WRITEID" }, \ + { XFS_TRANS_ADDAFORK, "ADDAFORK" }, \ + { XFS_TRANS_ATTRINVAL, "ATTRINVAL" }, \ + { XFS_TRANS_ATRUNCATE, "ATRUNCATE" }, \ + { XFS_TRANS_ATTR_SET, "ATTR_SET" }, \ + { XFS_TRANS_ATTR_RM, "ATTR_RM" }, \ + { XFS_TRANS_ATTR_FLAG, "ATTR_FLAG" }, \ + { XFS_TRANS_CLEAR_AGI_BUCKET, "CLEAR_AGI_BUCKET" }, \ + { XFS_TRANS_QM_SBCHANGE, "QM_SBCHANGE" }, \ + { XFS_TRANS_QM_QUOTAOFF, "QM_QUOTAOFF" }, \ + { XFS_TRANS_QM_DQALLOC, "QM_DQALLOC" }, \ + { XFS_TRANS_QM_SETQLIM, "QM_SETQLIM" }, \ + { XFS_TRANS_QM_DQCLUSTER, "QM_DQCLUSTER" }, \ + { XFS_TRANS_QM_QINOCREATE, "QM_QINOCREATE" }, \ + { XFS_TRANS_QM_QUOTAOFF_END, "QM_QOFF_END" }, \ + { XFS_TRANS_SB_UNIT, "SB_UNIT" }, \ + { XFS_TRANS_FSYNC_TS, "FSYNC_TS" }, \ + { XFS_TRANS_GROWFSRT_ALLOC, "GROWFSRT_ALLOC" }, \ + { XFS_TRANS_GROWFSRT_ZERO, "GROWFSRT_ZERO" }, \ + { XFS_TRANS_GROWFSRT_FREE, "GROWFSRT_FREE" }, \ + { XFS_TRANS_SWAPEXT, "SWAPEXT" }, \ + { XFS_TRANS_SB_COUNT, "SB_COUNT" }, \ + { XFS_TRANS_DUMMY1, "DUMMY1" }, \ + { XFS_TRANS_DUMMY2, "DUMMY2" }, \ + { XLOG_UNMOUNT_REC_TYPE, "UNMOUNT" } + /* * This structure is used to track log items associated with * a transaction. It points to the log item and keeps some @@ -782,6 +826,10 @@ typedef struct xfs_log_item { #define XFS_LI_IN_AIL 0x1 #define XFS_LI_ABORTED 0x2 +#define XFS_LI_FLAGS \ + { XFS_LI_IN_AIL, "IN_AIL" }, \ + { XFS_LI_ABORTED, "ABORTED" } + typedef struct xfs_item_ops { uint (*iop_size)(xfs_log_item_t *); void (*iop_format)(xfs_log_item_t *, struct xfs_log_iovec *); Index: linux-2.6/fs/xfs/xfs_error.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_error.c 2009-06-16 22:37:56.360814332 +0200 +++ linux-2.6/fs/xfs/xfs_error.c 2009-06-16 22:37:58.248969810 +0200 @@ -217,3 +217,19 @@ xfs_corruption_error( xfs_hex_dump(p, 16); xfs_error_report(tag, level, mp, fname, linenum, ra); } + +/* + * Format fsblock number into a static buffer & return it. + */ +char *xfs_fmtfsblock(xfs_fsblock_t bno) +{ + static char rval[50]; + + if (bno == NULLFSBLOCK) + sprintf(rval, "NULLFSBLOCK"); + else if (isnullstartblock(bno)) + sprintf(rval, "NULLSTARTBLOCK(%Ld)", startblockval(bno)); + else + sprintf(rval, "%Ld", (xfs_dfsbno_t)bno); + return rval; +} Index: linux-2.6/fs/xfs/linux-2.6/xfs_fs_subr.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_fs_subr.c 2009-06-16 22:37:56.158815561 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_fs_subr.c 2009-06-16 22:37:58.249963302 +0200 @@ -19,6 +19,7 @@ #include "xfs_vnodeops.h" #include "xfs_bmap_btree.h" #include "xfs_inode.h" +#include "xfs_trace.h" int fs_noerr(void) { return 0; } int fs_nosys(void) { return ENOSYS; } @@ -51,6 +52,8 @@ xfs_flushinval_pages( struct address_space *mapping = VFS_I(ip)->i_mapping; int ret = 0; + trace_xfs_pagecache_inval(ip, first, last); + if (mapping->nrpages) { xfs_iflags_clear(ip, XFS_ITRUNCATED); ret = filemap_write_and_wait(mapping); Index: linux-2.6/fs/xfs/xfs_ag.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_ag.h 2009-06-16 22:37:56.365814061 +0200 +++ linux-2.6/fs/xfs/xfs_ag.h 2009-06-16 22:37:58.249963302 +0200 @@ -86,6 +86,20 @@ typedef struct xfs_agf { #define XFS_AGF_NUM_BITS 12 #define XFS_AGF_ALL_BITS ((1 << XFS_AGF_NUM_BITS) - 1) +#define XFS_AGF_FLAGS \ + { XFS_AGF_MAGICNUM, "MAGICNUM" }, \ + { XFS_AGF_VERSIONNUM, "VERSIONNUM" }, \ + { XFS_AGF_SEQNO, "SEQNO" }, \ + { XFS_AGF_LENGTH, "LENGTH" }, \ + { XFS_AGF_ROOTS, "ROOTS" }, \ + { XFS_AGF_LEVELS, "LEVELS" }, \ + { XFS_AGF_FLFIRST, "FLFIRST" }, \ + { XFS_AGF_FLLAST, "FLLAST" }, \ + { XFS_AGF_FLCOUNT, "FLCOUNT" }, \ + { XFS_AGF_FREEBLKS, "FREEBLKS" }, \ + { XFS_AGF_LONGEST, "LONGEST" }, \ + { XFS_AGF_BTREEBLKS, "BTREEBLKS" } + /* disk block (xfs_daddr_t) in the AG */ #define XFS_AGF_DADDR(mp) ((xfs_daddr_t)(1 << (mp)->m_sectbb_log)) #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) Index: linux-2.6/fs/xfs/xfs_alloc.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_alloc.c 2009-06-16 22:37:56.370814628 +0200 +++ linux-2.6/fs/xfs/xfs_alloc.c 2009-06-16 22:37:58.251964256 +0200 @@ -38,6 +38,7 @@ #include "xfs_ialloc.h" #include "xfs_alloc.h" #include "xfs_error.h" +#include "xfs_trace.h" #define XFS_ABSDIFF(a,b) (((a) <= (b)) ? ((b) - (a)) : ((a) - (b))) @@ -51,30 +52,6 @@ xfs_alloc_search_busy(xfs_trans_t *tp, xfs_agblock_t bno, xfs_extlen_t len); -#if defined(XFS_ALLOC_TRACE) -ktrace_t *xfs_alloc_trace_buf; - -#define TRACE_ALLOC(s,a) \ - xfs_alloc_trace_alloc(__func__, s, a, __LINE__) -#define TRACE_FREE(s,a,b,x,f) \ - xfs_alloc_trace_free(__func__, s, mp, a, b, x, f, __LINE__) -#define TRACE_MODAGF(s,a,f) \ - xfs_alloc_trace_modagf(__func__, s, mp, a, f, __LINE__) -#define TRACE_BUSY(__func__,s,ag,agb,l,sl,tp) \ - xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, sl, tp, XFS_ALLOC_KTRACE_BUSY, __LINE__) -#define TRACE_UNBUSY(__func__,s,ag,sl,tp) \ - xfs_alloc_trace_busy(__func__, s, mp, ag, -1, -1, sl, tp, XFS_ALLOC_KTRACE_UNBUSY, __LINE__) -#define TRACE_BUSYSEARCH(__func__,s,ag,agb,l,tp) \ - xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, 0, tp, XFS_ALLOC_KTRACE_BUSYSEARCH, __LINE__) -#else -#define TRACE_ALLOC(s,a) -#define TRACE_FREE(s,a,b,x,f) -#define TRACE_MODAGF(s,a,f) -#define TRACE_BUSY(s,a,ag,agb,l,sl,tp) -#define TRACE_UNBUSY(fname,s,ag,sl,tp) -#define TRACE_BUSYSEARCH(fname,s,ag,agb,l,tp) -#endif /* XFS_ALLOC_TRACE */ - /* * Prototypes for per-ag allocation routines */ @@ -498,124 +475,6 @@ xfs_alloc_read_agfl( return 0; } -#if defined(XFS_ALLOC_TRACE) -/* - * Add an allocation trace entry for an alloc call. - */ -STATIC void -xfs_alloc_trace_alloc( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_alloc_arg_t *args, /* allocation argument structure */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(XFS_ALLOC_KTRACE_ALLOC | (line << 16)), - (void *)name, - (void *)str, - (void *)args->mp, - (void *)(__psunsigned_t)args->agno, - (void *)(__psunsigned_t)args->agbno, - (void *)(__psunsigned_t)args->minlen, - (void *)(__psunsigned_t)args->maxlen, - (void *)(__psunsigned_t)args->mod, - (void *)(__psunsigned_t)args->prod, - (void *)(__psunsigned_t)args->minleft, - (void *)(__psunsigned_t)args->total, - (void *)(__psunsigned_t)args->alignment, - (void *)(__psunsigned_t)args->len, - (void *)((((__psint_t)args->type) << 16) | - (__psint_t)args->otype), - (void *)(__psint_t)((args->wasdel << 3) | - (args->wasfromfl << 2) | - (args->isfl << 1) | - (args->userdata << 0))); -} - -/* - * Add an allocation trace entry for a free call. - */ -STATIC void -xfs_alloc_trace_free( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_mount_t *mp, /* file system mount point */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* a.g. relative block number */ - xfs_extlen_t len, /* length of extent */ - int isfl, /* set if is freelist allocation/free */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(XFS_ALLOC_KTRACE_FREE | (line << 16)), - (void *)name, - (void *)str, - (void *)mp, - (void *)(__psunsigned_t)agno, - (void *)(__psunsigned_t)agbno, - (void *)(__psunsigned_t)len, - (void *)(__psint_t)isfl, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); -} - -/* - * Add an allocation trace entry for modifying an agf. - */ -STATIC void -xfs_alloc_trace_modagf( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_mount_t *mp, /* file system mount point */ - xfs_agf_t *agf, /* new agf value */ - int flags, /* logging flags for agf */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(XFS_ALLOC_KTRACE_MODAGF | (line << 16)), - (void *)name, - (void *)str, - (void *)mp, - (void *)(__psint_t)flags, - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_seqno), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_length), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_flfirst), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_fllast), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_flcount), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_freeblks), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_longest)); -} - -STATIC void -xfs_alloc_trace_busy( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_mount_t *mp, /* file system mount point */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* a.g. relative block number */ - xfs_extlen_t len, /* length of extent */ - int slot, /* perag Busy slot */ - xfs_trans_t *tp, - int trtype, /* type: add, delete, search */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(trtype | (line << 16)), - (void *)name, - (void *)str, - (void *)mp, - (void *)(__psunsigned_t)agno, - (void *)(__psunsigned_t)agbno, - (void *)(__psunsigned_t)len, - (void *)(__psint_t)slot, - (void *)tp, - NULL, NULL, NULL, NULL, NULL, NULL, NULL); -} -#endif /* XFS_ALLOC_TRACE */ - /* * Allocation group level functions. */ @@ -665,9 +524,7 @@ xfs_alloc_ag_vextent( */ if (args->agbno != NULLAGBLOCK) { xfs_agf_t *agf; /* allocation group freelist header */ -#ifdef XFS_ALLOC_TRACE xfs_mount_t *mp = args->mp; -#endif long slen = (long)args->len; ASSERT(args->len >= args->minlen && args->len <= args->maxlen); @@ -682,7 +539,7 @@ xfs_alloc_ag_vextent( args->pag->pagf_freeblks -= args->len; ASSERT(be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length)); - TRACE_MODAGF(NULL, agf, XFS_AGF_FREEBLKS); + xfs_trace_agf(mp, agf, XFS_AGF_FREEBLKS); xfs_alloc_log_agf(args->tp, args->agbp, XFS_AGF_FREEBLKS); /* search the busylist for these blocks */ @@ -792,13 +649,14 @@ xfs_alloc_ag_vextent_exact( } xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("normal", args); + + xfs_trace_alloc_extent(args, "normal"); args->wasfromfl = 0; return 0; error0: xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); return error; } @@ -958,7 +816,7 @@ xfs_alloc_ag_vextent_near( args->len = blen; if (!xfs_alloc_fix_minleft(args)) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("nominleft", args); + xfs_trace_alloc_extent(args, "nominleft"); return 0; } blen = args->len; @@ -981,7 +839,8 @@ xfs_alloc_ag_vextent_near( goto error0; xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); - TRACE_ALLOC("first", args); + + xfs_trace_alloc_extent(args, "first"); return 0; } /* @@ -1272,7 +1131,7 @@ xfs_alloc_ag_vextent_near( * If we couldn't get anything, give up. */ if (bno_cur_lt == NULL && bno_cur_gt == NULL) { - TRACE_ALLOC("neither", args); + xfs_trace_alloc_extent(args, "neither"); args->agbno = NULLAGBLOCK; return 0; } @@ -1299,7 +1158,7 @@ xfs_alloc_ag_vextent_near( args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); xfs_alloc_fix_len(args); if (!xfs_alloc_fix_minleft(args)) { - TRACE_ALLOC("nominleft", args); + xfs_trace_alloc_extent(args, "nominleft"); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); return 0; @@ -1314,13 +1173,14 @@ xfs_alloc_ag_vextent_near( if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur_lt, ltbno, ltlen, ltnew, rlen, XFSA_FIXUP_BNO_OK))) goto error0; - TRACE_ALLOC(j ? "gt" : "lt", args); + + xfs_trace_alloc_extent(args, j ? "gt" : "lt"); xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); return 0; error0: - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); if (cnt_cur != NULL) xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); if (bno_cur_lt != NULL) @@ -1371,7 +1231,7 @@ xfs_alloc_ag_vextent_size( goto error0; if (i == 0 || flen == 0) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("noentry", args); + xfs_trace_alloc_extent(args, "noentry"); return 0; } ASSERT(i == 1); @@ -1448,7 +1308,7 @@ xfs_alloc_ag_vextent_size( xfs_alloc_fix_len(args); if (rlen < args->minlen || !xfs_alloc_fix_minleft(args)) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("nominleft", args); + xfs_trace_alloc_extent(args, "nominleft"); args->agbno = NULLAGBLOCK; return 0; } @@ -1471,11 +1331,11 @@ xfs_alloc_ag_vextent_size( args->agbno + args->len <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), error0); - TRACE_ALLOC("normal", args); + xfs_trace_alloc_extent(args, "normal"); return 0; error0: - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); if (cnt_cur) xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); if (bno_cur) @@ -1534,7 +1394,7 @@ xfs_alloc_ag_vextent_small( be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), error0); args->wasfromfl = 1; - TRACE_ALLOC("freelist", args); + xfs_trace_alloc_extent(args, "freelist"); *stat = 0; return 0; } @@ -1556,17 +1416,17 @@ xfs_alloc_ag_vextent_small( */ if (flen < args->minlen) { args->agbno = NULLAGBLOCK; - TRACE_ALLOC("notenough", args); + xfs_trace_alloc_extent(args, "notenough"); flen = 0; } *fbnop = fbno; *flenp = flen; *stat = 1; - TRACE_ALLOC("normal", args); + xfs_trace_alloc_extent(args, "normal"); return 0; error0: - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); return error; } @@ -1809,17 +1669,15 @@ xfs_free_ag_extent( be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length), error0); - TRACE_MODAGF(NULL, agf, XFS_AGF_FREEBLKS); + xfs_trace_agf(mp, agf, XFS_AGF_FREEBLKS); xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS); if (!isfl) xfs_trans_mod_sb(tp, XFS_TRANS_SB_FDBLOCKS, (long)len); XFS_STATS_INC(xs_freex); XFS_STATS_ADD(xs_freeb, len); } - TRACE_FREE(haveleft ? - (haveright ? "both" : "left") : - (haveright ? "right" : "none"), - agno, bno, len, isfl); + + trace_xfs_free_extent(mp, agno, bno, len, isfl, haveleft, haveright); /* * Since blocks move to the free list without the coordination @@ -1836,7 +1694,7 @@ xfs_free_ag_extent( return 0; error0: - TRACE_FREE("error", agno, bno, len, isfl); +// trace_xfs_free_extent(agno, bno, len, isfl, "error"); if (bno_cur) xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); if (cnt_cur) @@ -2122,7 +1980,7 @@ xfs_alloc_get_freelist( logflags |= XFS_AGF_BTREEBLKS; } - TRACE_MODAGF(NULL, agf, logflags); + xfs_trace_agf(mp, agf, logflags); xfs_alloc_log_agf(tp, agbp, logflags); *bnop = bno; @@ -2230,13 +2088,13 @@ xfs_alloc_put_freelist( logflags |= XFS_AGF_BTREEBLKS; } - TRACE_MODAGF(NULL, agf, logflags); + xfs_trace_agf(mp, agf, logflags); xfs_alloc_log_agf(tp, agbp, logflags); ASSERT(be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp)); blockp = &agfl->agfl_bno[be32_to_cpu(agf->agf_fllast)]; *blockp = cpu_to_be32(bno); - TRACE_MODAGF(NULL, agf, logflags); + xfs_trace_agf(mp, agf, logflags); xfs_alloc_log_agf(tp, agbp, logflags); xfs_trans_log_buf(tp, agflbp, (int)((xfs_caddr_t)blockp - (xfs_caddr_t)agfl), @@ -2399,7 +2257,7 @@ xfs_alloc_vextent( args->minlen > args->maxlen || args->minlen > agsize || args->mod >= args->prod) { args->fsbno = NULLFSBLOCK; - TRACE_ALLOC("badargs", args); + xfs_trace_alloc_extent(args, "badargs"); return 0; } minleft = args->minleft; @@ -2418,12 +2276,12 @@ xfs_alloc_vextent( error = xfs_alloc_fix_freelist(args, 0); args->minleft = minleft; if (error) { - TRACE_ALLOC("nofix", args); + xfs_trace_alloc_extent(args, "nofix"); goto error0; } if (!args->agbp) { up_read(&mp->m_peraglock); - TRACE_ALLOC("noagbp", args); + xfs_trace_alloc_extent(args, "noagbp"); break; } args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); @@ -2488,7 +2346,7 @@ xfs_alloc_vextent( error = xfs_alloc_fix_freelist(args, flags); args->minleft = minleft; if (error) { - TRACE_ALLOC("nofix", args); + xfs_trace_alloc_extent(args, "nofix"); goto error0; } /* @@ -2499,7 +2357,9 @@ xfs_alloc_vextent( goto error0; break; } - TRACE_ALLOC("loopfailed", args); + + xfs_trace_alloc_extent(args, "loopfailed"); + /* * Didn't work, figure out the next iteration. */ @@ -2526,7 +2386,8 @@ xfs_alloc_vextent( if (args->agno == sagno) { if (no_min == 1) { args->agbno = NULLAGBLOCK; - TRACE_ALLOC("allfailed", args); + xfs_trace_alloc_extent(args, + "allfailed"); break; } if (flags == 0) { @@ -2645,13 +2506,13 @@ xfs_alloc_mark_busy(xfs_trans_t *tp, if (n < XFS_PAGB_NUM_SLOTS) { bsy = &mp->m_perag[agno].pagb_list[n]; mp->m_perag[agno].pagb_count++; - TRACE_BUSY("xfs_alloc_mark_busy", "got", agno, bno, len, n, tp); + xfs_trace_alloc_busy(mp, agno, bno, len, n, "got"); bsy->busy_start = bno; bsy->busy_length = len; bsy->busy_tp = tp; xfs_trans_add_busy(tp, agno, n); } else { - TRACE_BUSY("xfs_alloc_mark_busy", "FULL", agno, bno, len, -1, tp); + xfs_trace_alloc_busy(mp, agno, bno, len, -1, "full"); /* * The busy list is full! Since it is now not possible to * track the free block, make this a synchronous transaction @@ -2679,11 +2540,11 @@ xfs_alloc_clear_busy(xfs_trans_t *tp, ASSERT(idx < XFS_PAGB_NUM_SLOTS); if (list[idx].busy_tp == tp) { - TRACE_UNBUSY("xfs_alloc_clear_busy", "found", agno, idx, tp); + xfs_trace_alloc_unbusy(mp, agno, idx, "found"); list[idx].busy_tp = NULL; mp->m_perag[agno].pagb_count--; } else { - TRACE_UNBUSY("xfs_alloc_clear_busy", "missing", agno, idx, tp); + xfs_trace_alloc_unbusy(mp, agno, idx, "missing"); } spin_unlock(&mp->m_perag[agno].pagb_lock); @@ -2724,8 +2585,8 @@ xfs_alloc_search_busy(xfs_trans_t *tp, if ((bno > bend) || (uend < bsy->busy_start)) { cnt--; } else { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", - "found1", agno, bno, len, tp); + xfs_trace_alloc_busysearch(mp, agno, bno, len, + "found1"); break; } } @@ -2736,12 +2597,12 @@ xfs_alloc_search_busy(xfs_trans_t *tp, * transaction that freed the block */ if (cnt) { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", "found", agno, bno, len, tp); + xfs_trace_alloc_busysearch(mp, agno, bno, len, "found"); lsn = bsy->busy_tp->t_commit_lsn; spin_unlock(&mp->m_perag[agno].pagb_lock); xfs_log_force(mp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC); } else { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", "not-found", agno, bno, len, tp); + xfs_trace_alloc_busysearch(mp, agno, bno, len, "notfound"); spin_unlock(&mp->m_perag[agno].pagb_lock); } } Index: linux-2.6/fs/xfs/xfs_alloc_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_alloc_btree.c 2009-06-16 22:37:56.375814776 +0200 +++ linux-2.6/fs/xfs/xfs_alloc_btree.c 2009-06-16 22:37:58.253973171 +0200 @@ -39,6 +39,7 @@ #include "xfs_ialloc.h" #include "xfs_alloc.h" #include "xfs_error.h" +#include "xfs_trace.h" STATIC struct xfs_btree_cur * @@ -67,6 +68,7 @@ xfs_allocbt_set_root( be32_add_cpu(&agf->agf_levels[btnum], inc); cur->bc_mp->m_perag[seqno].pagf_levels[btnum] += inc; + xfs_trace_agf(cur->bc_mp, agf, XFS_AGF_ROOTS | XFS_AGF_LEVELS); xfs_alloc_log_agf(cur->bc_tp, agbp, XFS_AGF_ROOTS | XFS_AGF_LEVELS); } @@ -193,6 +195,7 @@ xfs_allocbt_update_lastrec( agf->agf_longest = len; cur->bc_mp->m_perag[seqno].pagf_longest = be32_to_cpu(len); + xfs_trace_agf(cur->bc_mp, agf, XFS_AGF_LONGEST); xfs_alloc_log_agf(cur->bc_tp, cur->bc_private.a.agbp, XFS_AGF_LONGEST); } Index: linux-2.6/fs/xfs/xfs_fsops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_fsops.c 2009-06-16 22:37:56.379814517 +0200 +++ linux-2.6/fs/xfs/xfs_fsops.c 2009-06-16 22:37:58.254967851 +0200 @@ -45,6 +45,7 @@ #include "xfs_rtalloc.h" #include "xfs_rw.h" #include "xfs_filestream.h" +#include "xfs_trace.h" /* * File system operations @@ -336,6 +337,8 @@ xfs_growfs_data_private( be32_add_cpu(&agf->agf_length, new); ASSERT(be32_to_cpu(agf->agf_length) == be32_to_cpu(agi->agi_length)); + + xfs_trace_agf(mp, agf, XFS_AGF_LENGTH); xfs_alloc_log_agf(tp, bp, XFS_AGF_LENGTH); /* * Free the new space. Index: linux-2.6/fs/xfs/xfs_da_btree.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_da_btree.h 2009-06-16 22:37:56.384814596 +0200 +++ linux-2.6/fs/xfs/xfs_da_btree.h 2009-06-16 22:37:58.255971889 +0200 @@ -125,6 +125,13 @@ typedef struct xfs_da_args { #define XFS_DA_OP_OKNOENT 0x0008 /* lookup/add op, ENOENT ok, else die */ #define XFS_DA_OP_CILOOKUP 0x0010 /* lookup to return CI name if found */ +#define XFS_DA_OP_FLAGS \ + { XFS_DA_OP_JUSTCHECK, "JUSTCHECK" }, \ + { XFS_DA_OP_RENAME, "RENAME" }, \ + { XFS_DA_OP_ADDNAME, "ADDNAME" }, \ + { XFS_DA_OP_OKNOENT, "OKNOENT" }, \ + { XFS_DA_OP_CILOOKUP, "CILOOKUP" } + /* * Structure to describe buffer(s) for a block. * This is needed in the directory version 2 format case, when Index: linux-2.6/fs/xfs/xfs_dir2_block.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_block.c 2009-06-16 22:37:56.388814616 +0200 +++ linux-2.6/fs/xfs/xfs_dir2_block.c 2009-06-16 22:37:58.256955394 +0200 @@ -36,8 +36,8 @@ #include "xfs_dir2_data.h" #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Local function prototypes. @@ -94,7 +94,8 @@ xfs_dir2_block_addname( __be16 *tagp; /* pointer to tag value */ xfs_trans_t *tp; /* transaction structure */ - xfs_dir2_trace_args("block_addname", args); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -590,7 +591,8 @@ xfs_dir2_block_lookup( int error; /* error return value */ xfs_mount_t *mp; /* filesystem mount point */ - xfs_dir2_trace_args("block_lookup", args); + xfs_trace_dir2(args); + /* * Get the buffer, look up the entry. * If not found (ENOENT) then return, have no buffer. @@ -747,7 +749,8 @@ xfs_dir2_block_removename( int size; /* shortform size */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("block_removename", args); + xfs_trace_dir2(args); + /* * Look up the entry in the block. Gets the buffer and entry index. * It will always be there, the vnodeops level does a lookup first. @@ -823,7 +826,8 @@ xfs_dir2_block_replace( int error; /* error return value */ xfs_mount_t *mp; /* filesystem mount point */ - xfs_dir2_trace_args("block_replace", args); + xfs_trace_dir2(args); + /* * Lookup the entry in the directory. Get buffer and entry index. * This will always succeed since the caller has already done a lookup. @@ -897,7 +901,8 @@ xfs_dir2_leaf_to_block( int to; /* block/leaf to index */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_bb("leaf_to_block", args, lbp, dbp); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -1044,7 +1049,8 @@ xfs_dir2_sf_to_block( xfs_trans_t *tp; /* transaction pointer */ struct xfs_name name; - xfs_dir2_trace_args("sf_to_block", args); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; Index: linux-2.6/fs/xfs/xfs_dir2_leaf.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_leaf.c 2009-06-16 22:37:56.394814473 +0200 +++ linux-2.6/fs/xfs/xfs_dir2_leaf.c 2009-06-16 22:37:58.257939318 +0200 @@ -38,8 +38,8 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Local function declarations. @@ -80,7 +80,8 @@ xfs_dir2_block_to_leaf( int needscan; /* need to rescan bestfree */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_b("block_to_leaf", args, dbp); + xfs_trace_dir2(args); + dp = args->dp; mp = dp->i_mount; tp = args->trans; @@ -188,7 +189,8 @@ xfs_dir2_leaf_addname( xfs_trans_t *tp; /* transaction pointer */ xfs_dir2_db_t use_block; /* data block number */ - xfs_dir2_trace_args("leaf_addname", args); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -1264,7 +1266,8 @@ xfs_dir2_leaf_lookup( xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("leaf_lookup", args); + xfs_trace_dir2(args); + /* * Look up name in the leaf block, returning both buffers and index. */ @@ -1452,7 +1455,8 @@ xfs_dir2_leaf_removename( xfs_dir2_data_off_t oldbest; /* old value of best free */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("leaf_removename", args); + xfs_trace_dir2(args); + /* * Lookup the leaf entry, get the leaf and data blocks read in. */ @@ -1584,7 +1588,8 @@ xfs_dir2_leaf_replace( xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("leaf_replace", args); + xfs_trace_dir2(args); + /* * Look up the entry. */ @@ -1764,7 +1769,9 @@ xfs_dir2_node_to_leaf( if (state->path.active > 1) return 0; args = state->args; - xfs_dir2_trace_args("node_to_leaf", args); + + xfs_trace_dir2(args); + mp = state->mp; dp = args->dp; tp = args->trans; Index: linux-2.6/fs/xfs/xfs_dir2_node.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_node.c 2009-06-16 22:37:56.398814703 +0200 +++ linux-2.6/fs/xfs/xfs_dir2_node.c 2009-06-16 22:37:58.259964576 +0200 @@ -37,8 +37,8 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Function declarations. @@ -123,7 +123,8 @@ xfs_dir2_leaf_to_node( __be16 *to; /* pointer to freespace entry */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_b("leaf_to_node", args, lbp); + xfs_trace_dir2(args); + dp = args->dp; mp = dp->i_mount; tp = args->trans; @@ -196,7 +197,8 @@ xfs_dir2_leafn_add( xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_sb("leafn_add", args, index, bp); + __xfs_trace_dir2(args, index, 0, 0); + dp = args->dp; mp = dp->i_mount; tp = args->trans; @@ -711,8 +713,8 @@ xfs_dir2_leafn_moveents( int stale; /* count stale leaves copied */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_bibii("leafn_moveents", args, bp_s, start_s, bp_d, - start_d, count); + __xfs_trace_dir2(args, start_s, start_d, count); + /* * Silently return if nothing to do. */ @@ -933,7 +935,8 @@ xfs_dir2_leafn_remove( int needscan; /* need to rescan data frees */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_sb("leafn_remove", args, index, bp); + __xfs_trace_dir2(args, index, 0, 0); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -1363,7 +1366,8 @@ xfs_dir2_node_addname( int rval; /* sub-return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_addname", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the state (btree cursor). */ @@ -1822,7 +1826,8 @@ xfs_dir2_node_lookup( int rval; /* operation return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_lookup", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the btree cursor. */ @@ -1875,7 +1880,8 @@ xfs_dir2_node_removename( int rval; /* operation return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_removename", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the btree cursor. */ @@ -1944,7 +1950,8 @@ xfs_dir2_node_replace( int rval; /* internal return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_replace", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the btree cursor. */ Index: linux-2.6/fs/xfs/xfs_dir2_sf.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_sf.c 2009-06-16 22:37:56.403815130 +0200 +++ linux-2.6/fs/xfs/xfs_dir2_sf.c 2009-06-16 22:37:58.259964576 +0200 @@ -37,7 +37,7 @@ #include "xfs_dir2_data.h" #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" -#include "xfs_dir2_trace.h" +#include "xfs_trace.h" /* * Prototypes for internal functions. @@ -169,7 +169,8 @@ xfs_dir2_block_to_sf( xfs_dir2_sf_t *sfp; /* shortform structure */ xfs_ino_t temp; - xfs_dir2_trace_args_sb("block_to_sf", args, size, bp); + __xfs_trace_dir2(args, size, 0, 0); + dp = args->dp; mp = dp->i_mount; @@ -281,7 +282,8 @@ xfs_dir2_sf_addname( xfs_dir2_sf_t *sfp; /* shortform structure */ xfs_dir2_sf_entry_t *sfep = NULL; /* shortform entry */ - xfs_dir2_trace_args("sf_addname", args); + xfs_trace_dir2(args); + ASSERT(xfs_dir2_sf_lookup(args) == ENOENT); dp = args->dp; ASSERT(dp->i_df.if_flags & XFS_IFINLINE); @@ -654,7 +656,8 @@ xfs_dir2_sf_create( xfs_dir2_sf_t *sfp; /* shortform structure */ int size; /* directory size */ - xfs_dir2_trace_args_i("sf_create", args, pino); + xfs_trace_dir2(args); + dp = args->dp; ASSERT(dp != NULL); @@ -808,7 +811,8 @@ xfs_dir2_sf_lookup( enum xfs_dacmp cmp; /* comparison result */ xfs_dir2_sf_entry_t *ci_sfep; /* case-insens. entry */ - xfs_dir2_trace_args("sf_lookup", args); + xfs_trace_dir2(args); + xfs_dir2_sf_check(args); dp = args->dp; @@ -891,7 +895,8 @@ xfs_dir2_sf_removename( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ - xfs_dir2_trace_args("sf_removename", args); + xfs_trace_dir2(args); + dp = args->dp; ASSERT(dp->i_df.if_flags & XFS_IFINLINE); @@ -982,7 +987,8 @@ xfs_dir2_sf_replace( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ - xfs_dir2_trace_args("sf_replace", args); + xfs_trace_dir2(args); + dp = args->dp; ASSERT(dp->i_df.if_flags & XFS_IFINLINE); @@ -1125,7 +1131,8 @@ xfs_dir2_sf_toino4( xfs_dir2_sf_entry_t *sfep; /* new sf entry */ xfs_dir2_sf_t *sfp; /* new sf directory */ - xfs_dir2_trace_args("sf_toino4", args); + xfs_trace_dir2(args); + dp = args->dp; /* @@ -1202,7 +1209,8 @@ xfs_dir2_sf_toino8( xfs_dir2_sf_entry_t *sfep; /* new sf entry */ xfs_dir2_sf_t *sfp; /* new sf directory */ - xfs_dir2_trace_args("sf_toino8", args); + xfs_trace_dir2(args); + dp = args->dp; /* Index: linux-2.6/fs/xfs/xfs_btree_trace.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_btree_trace.c 2009-06-16 22:37:56.409814916 +0200 +++ linux-2.6/fs/xfs/xfs_btree_trace.c 2009-06-16 22:37:58.260964424 +0200 @@ -76,28 +76,6 @@ xfs_btree_trace_argbii( } /* - * Add a trace buffer entry for arguments, for 3 block-length args - * and an integer arg. - */ -void -xfs_btree_trace_argfffi( - const char *func, - struct xfs_btree_cur *cur, - xfs_dfiloff_t o, - xfs_dfsbno_t b, - xfs_dfilblks_t i, - int j, - int line) -{ - cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGFFFI, - line, - o >> 32, (int)o, - b >> 32, (int)b, - i >> 32, (int)i, - (int)j, 0, 0, 0, 0); -} - -/* * Add a trace buffer entry for arguments, for one integer arg. */ void Index: linux-2.6/fs/xfs/linux-2.6/xfs_acl.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_acl.c 2009-06-16 22:37:56.163814591 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_acl.c 2009-06-16 22:37:58.261967834 +0200 @@ -21,6 +21,7 @@ #include "xfs_bmap_btree.h" #include "xfs_inode.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include Index: linux-2.6/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_linux.h 2009-06-16 22:38:10.769939937 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_linux.h 2009-06-16 22:38:20.904816654 +0200 @@ -40,7 +40,6 @@ #include #include -#include #include #include From sales@xittra.com Fri Jul 17 10:54:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HFsv47099263 for ; Fri, 17 Jul 2009 10:54:58 -0500 X-ASG-Debug-ID: 1247846603-4e9701300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from admin.xittra.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B0744A8F983 for ; Fri, 17 Jul 2009 09:03:23 -0700 (PDT) Received: from admin.xittra.com (alwatansyria.com [209.216.249.214]) by cuda.sgi.com with ESMTP id 1ErJuzNQsFbLDnbG for ; Fri, 17 Jul 2009 09:03:23 -0700 (PDT) Received: from prod00.pvpn.sfo.witopia.net ([216.93.191.240] helo=technobdf6c291) by admin.xittra.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1MRpmR-0004Cw-6L for xfs@oss.sgi.com; Fri, 17 Jul 2009 18:55:30 +0300 MIME-Version: 1.0 From: "Xittra Showrooms" Reply-To: sales@xittra.com To: xfs@oss.sgi.com X-ASG-Orig-Subj: NEW DELL 1545 at 28900SP from Xittra Subject: NEW DELL 1545 at 28900SP from Xittra Content-Type: multipart/alternative; boundary="----=_NextPart_001_6C63_58063D9A.44D732EA" X-Mailer: Default Date: Fri, 17 Jul 2009 18:55:13 +0300 Message-ID: <502066066160672122714@techno-bdf6c291> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - admin.xittra.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - xittra.com X-Source: X-Source-Args: X-Source-Dir: X-Barracuda-Connect: alwatansyria.com[209.216.249.214] X-Barracuda-Start-Time: 1247846604 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4973 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3662 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ------=_NextPart_001_6C63_58063D9A.44D732EA Content-Type: text/plain Content-Transfer-Encoding: quoted-printable =20 INSPIRON=99 15 SIMPLE, SMART AND SUPER AFFORDABLE DUAL CORE 2.0GHz T4200 DDR2 667MHz RAM 1GB 667MHz 15.6" Wide Screen XGA with True Life- WLED HD 15.6" Widescreen XGA (1366x768) =20 160GB SATA 8x DVD+/-RW "3x USB 8-1 Reader" ExpressCard WebCam 1.3MP =95 Long mobile life with 6-cell battery =95 Only 2.69 kg 28900.00SP =CF=E3=D4=DE : =E3=D2=C9 =C3=CA=E6=D3=CA=D1=C7=CF 6116616 |=C7=E1=C8=CD=D5= =C9 2323885 |=C7=E1=D3=C7=CD=C9 =E3=CD=ED=D82 2310403 |=C3=C8=E6 =D1=E3=C7= =E4=C9 3332902 |=E3=E1=DF =DA=C7=CF=E1 4427123 |=D1=E6=D6=C9 3323767 |=C7= =E1=E3=D2=D1=DA=C9 4423912 |=C8=D1=C7=E3=DF=C9 3007 |=CD=E3=D1=C7 3312895 = |=D4=DA=E1=C7=E4 3330764 |||=CD=E1=C8 : =E4=DE=C7=C8=C9 =C7=E1=DD=E4=C7=E4= =ED=E4 2124448 |=C7=E1=C8=CD=CA=D1=ED 2223667 |=D3=E1=E3=C7=E4=ED=C9 4642100 ------=_NextPart_001_6C63_58063D9A.44D732EA Content-Type: text/html Content-Transfer-Encoding: quoted-printable

3D""

 

 

 

INSPIRON=99 15
SIMPLE, SMART AND SUPER AFFORDABLE
= =95

DUAL CORE 2.0GHz T4200 DDR2 667MHzRAM 1GB 667MHz
15.6" Wide Screen XGA with True Life- WLED
HD 15.6" W= idescreen XGA (1366x768)  
160GB SATA
8x DVD+/-RW
"3x US= B
8-1 Reader" ExpressCard
WebCam 1.3MP

=95 = =95 2.69 kg
28900.00SP

3D=

3D""

=CF=E3=D4=DE : =E3=D2=C9 =C3=CA=E6=D3=CA=D1=C7=CF 6116616= |=C7=E1=C8=CD=D5=C9 2323885 |=C7=E1=D3=C7=CD=C9 =E3=CD=ED=D82 2310403 |=C3= =C8=E6 =D1=E3=C7=E4=C9 3332902  |=E3=E1=DF =DA=C7=CF=E1 4427123 |=D1= =E6=D6=C9 3323767 |=C7=E1=E3=D2=D1=DA=C9 4423912 |=C8=D1=C7=E3=DF=C9  = 3007 |=CD=E3=D1=C7 3312895 |=D4=DA=E1=C7=E4 3330764 |||=CD=E1=C8 : =E4=DE= =C7=C8=C9 =C7=E1=DD=E4=C7=E4=ED=E4 2124448 |=C7=E1=C8=CD=CA=D1=ED 2223667 |= =D3=E1=E3=C7=E4=ED=C9 4642100

Website : http://www.x= ittra.com/     MainOffice for Dealers : +9631123204= 91 Fax :+963112320493

for unsubscription Sign up Remove

------=_NextPart_001_6C63_58063D9A.44D732EA-- From BATV+b7b85e6478aa297102a7+2154+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 17 13:04:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_44,J_CHICKENPOX_61,J_CHICKENPOX_62,J_CHICKENPOX_63, J_CHICKENPOX_65,J_CHICKENPOX_74,J_CHICKENPOX_81,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HI3wPW104969 for ; Fri, 17 Jul 2009 13:04:00 -0500 X-ASG-Debug-ID: 1247854344-79b802290000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 12464A90378 for ; Fri, 17 Jul 2009 11:12:24 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id tKvGsS17fTdp8RIu for ; Fri, 17 Jul 2009 11:12:24 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MRrnQ-0001tf-7T; Fri, 17 Jul 2009 18:04:36 +0000 Date: Fri, 17 Jul 2009 14:04:36 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: linux-kernel@vger.kernel.org, Steven Rostedt X-ASG-Orig-Subj: [PATCH] xfs: event tracing support Subject: [PATCH] xfs: event tracing support Message-ID: <20090717180435.GA6561@infradead.org> References: <20090616214844.GA12310@infradead.org> <20090717145031.GA17590@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090717145031.GA17590@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247854346 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean [and now really the updated version instead of reposting the old one] Convert the old xfs tracing support that could only be used with the out of tree kdb and xfsidbg patches to use the generic event tracer. To use it make sure CONFIG_EVENT_TRACING is enabled and then enable all xfs trace channels by: echo 1 > /sys/kernel/debug/tracing/events/xfs/enable Alternatively you can also enable invivididual trace events in XFS or even filter on them. Take a look at Documentation/trace/events.txt for details. To reads the events do a cat /sys/kernel/debug/tracing/trace which will give output like this: # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | <...>-23195 [000] 1884167.739031: xfs_alloc_extent: dev 253:21 first agno 0 agbno 5448 minlen 1 maxlen 1 mod 0 prod 1 minleft 2 total 0 alignment 1 len 1 type NEAR_BNO otype START_BNO wasdel 0 wasfromfl 0 isfl 0 userdata 1 by trace_xfs_alloc_extent <...>-23195 [000] 1884167.739031: xfs_agf: dev 253:21 agno 0 flags FREEBLKS length 579819 roots b 1 c 2 levels b 1 c 1 flfirst 62 fllast 65 flcount 4 freeblks 574368 longest 531488 by xfs_alloc_ag_vextent <...>-23195 [000] 1884167.739031: xfs_buf_item: dev 253:21 BLOG bip 0xd6cb54a0 bp 0xf5a90bd8 flags |DIRTY|LOGGED recur 0 refcount 15 blkno 0x1 blen 0x200 bpflags |MAPPED|ASYNC|DONE|DELWRI|TRYLOCK|PAGE_CACHE|DELWRI_Q pincount 14 lockval 0 lidesc 0xeba5cb58 liflags IN_AIL <...>-23195 [000] 1884167.739032: xfs_alloc_busy: dev 253:21 notfound agno 0 agbno 5448 len 1 slot 0 by xfs_alloc_search_busy <...>-23195 [000] 1884167.739033: xfs_bmap: dev 253:21 ino 0x4349 pre xfs_bmap_add_extent_hole_real:LC df idx 15 offset1 67 block1 1675 count1 3773 flag1 0 offset2 0 block2 1675 count2 0 flag2 0 <...>-23195 [000] 1884167.739033: xfs_bmap: dev 253:21 ino 0x4349 post xfs_bmap_add_extent_hole_real:LC df idx 15 offset1 67 block1 1675 count1 3774 flag1 0 offset2 0 block2 1675 count2 0 flag2 0 <...>-23195 [000] 1884167.739035: xfs_buf: dev 253:21 got_lock hold 3 lock 0 val 0x0 offset 0x5f9000 size 0x1000 flags MAPPED|ASYNC|DONE|DELWRI|PAGE_CACHE|DELWRI_Q by xfs_buf_get_flags <...>-23195 [000] 1884167.739035: xfs_buf: dev 253:21 get hold 3 lock 0 val 0x14005 offset 0x5f9000 size 0x1000 flags MAPPED|ASYNC|DONE|DELWRI|PAGE_CACHE|DELWRI_Q by xfs_buf_read_flags This patch converts most existing trace points in XFS more or less fully to the event tracer. Note that the infrastructure already provides pid value (and theoretically the task name, although that's buggy currently) so we don't have to record them ourselves. There also are a couple of places where we provide information more usefull for general tracing instead of pointers for gdb, e.g. the inode number instead of the inode pointer address. A couple of tracers are not converted currently: - the log grant tracing is gone. There was just one callsite left with most state changes missing, indicating severe bitrot. I don't plan to re-introduce it for now. - the filestreams tracing is left as-is for now. It has some very funky tracers covering all kinds of special cases. If anyone cares enough about filestreams they should take a look. - the btree tracer. Due to the different record/key types we can't handle it with the current tracing infrastructure. I'm working with Steve to get some infrastructure to get this back. All this gives a quite massive patch of: 67 files changed, 1563 insertions(+), 2237 deletions(-) So while adding actual tracing support without xfsidbg we actually remove lots of lines of code. I'd love to get this out and into 2.6.31 still if possible so that we can have a tracing option out there in the field ASAP. Signed-off-by: Christoph Hellwig -- Updates since v1: - move the TRACE_SYSTEM define out of the include guard - add a few missing xfs_trace.h inclusions that escaped quilt - fixed a couple of format string warnings on x86-64, now also tested on x86-64. Index: linux-2.6/fs/xfs/Makefile =================================================================== --- linux-2.6.orig/fs/xfs/Makefile +++ linux-2.6/fs/xfs/Makefile @@ -90,8 +90,7 @@ xfs-y += xfs_alloc.o \ xfs_rw.o \ xfs_dmops.o -xfs-$(CONFIG_XFS_TRACE) += xfs_btree_trace.o \ - xfs_dir2_trace.o +xfs-$(CONFIG_XFS_TRACE) += xfs_btree_trace.o # Objects in linux/ xfs-y += $(addprefix $(XFS_LINUX)/, \ @@ -113,6 +112,3 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ xfs-y += $(addprefix support/, \ debug.o \ uuid.o) - -xfs-$(CONFIG_XFS_TRACE) += support/ktrace.o - Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c @@ -38,6 +38,7 @@ #include "xfs_rw.h" #include "xfs_iomap.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include #include @@ -76,7 +77,7 @@ xfs_ioend_wake( wake_up(to_ioend_wq(ip)); } -STATIC void +void xfs_count_page_state( struct page *page, int *delalloc, @@ -98,48 +99,6 @@ xfs_count_page_state( } while ((bh = bh->b_this_page) != head); } -#if defined(XFS_RW_TRACE) -void -xfs_page_trace( - int tag, - struct inode *inode, - struct page *page, - unsigned long pgoff) -{ - xfs_inode_t *ip; - loff_t isize = i_size_read(inode); - loff_t offset = page_offset(page); - int delalloc = -1, unmapped = -1, unwritten = -1; - - if (page_has_buffers(page)) - xfs_count_page_state(page, &delalloc, &unmapped, &unwritten); - - ip = XFS_I(inode); - if (!ip->i_rwtrace) - return; - - ktrace_enter(ip->i_rwtrace, - (void *)((unsigned long)tag), - (void *)ip, - (void *)inode, - (void *)page, - (void *)pgoff, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)((unsigned long)((isize >> 32) & 0xffffffff)), - (void *)((unsigned long)(isize & 0xffffffff)), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)delalloc), - (void *)((unsigned long)unmapped), - (void *)((unsigned long)unwritten), - (void *)((unsigned long)current_pid()), - (void *)NULL); -} -#else -#define xfs_page_trace(tag, inode, page, pgoff) -#endif - STATIC struct block_device * xfs_find_bdev_for_inode( struct xfs_inode *ip) @@ -1232,7 +1191,7 @@ xfs_vm_writepage( int delalloc, unmapped, unwritten; struct inode *inode = page->mapping->host; - xfs_page_trace(XFS_WRITEPAGE_ENTER, inode, page, 0); + trace_xfs_page(inode, page, 0, "writepage"); /* * We need a transaction if: @@ -1329,7 +1288,7 @@ xfs_vm_releasepage( .nr_to_write = 1, }; - xfs_page_trace(XFS_RELEASEPAGE_ENTER, inode, page, 0); + trace_xfs_page(inode, page, 0, "releasepage"); if (!page_has_buffers(page)) return 0; @@ -1609,8 +1568,7 @@ xfs_vm_invalidatepage( struct page *page, unsigned long offset) { - xfs_page_trace(XFS_INVALIDPAGE_ENTER, - page->mapping->host, page, offset); + trace_xfs_page(page->mapping->host, page, offset, "invalidatepage"); block_invalidatepage(page, offset); } Index: linux-2.6/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_buf.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_buf.c @@ -39,6 +39,7 @@ #include "xfs_ag.h" #include "xfs_dmapi.h" #include "xfs_mount.h" +#include "xfs_trace.h" static kmem_zone_t *xfs_buf_zone; STATIC int xfsbufd(void *); @@ -53,34 +54,6 @@ static struct workqueue_struct *xfslogd_ struct workqueue_struct *xfsdatad_workqueue; struct workqueue_struct *xfsconvertd_workqueue; -#ifdef XFS_BUF_TRACE -void -xfs_buf_trace( - xfs_buf_t *bp, - char *id, - void *data, - void *ra) -{ - ktrace_enter(xfs_buf_trace_buf, - bp, id, - (void *)(unsigned long)bp->b_flags, - (void *)(unsigned long)bp->b_hold.counter, - (void *)(unsigned long)bp->b_sema.count, - (void *)current, - data, ra, - (void *)(unsigned long)((bp->b_file_offset>>32) & 0xffffffff), - (void *)(unsigned long)(bp->b_file_offset & 0xffffffff), - (void *)(unsigned long)bp->b_buffer_length, - NULL, NULL, NULL, NULL, NULL); -} -ktrace_t *xfs_buf_trace_buf; -#define XFS_BUF_TRACE_SIZE 4096 -#define XB_TRACE(bp, id, data) \ - xfs_buf_trace(bp, id, (void *)data, (void *)__builtin_return_address(0)) -#else -#define XB_TRACE(bp, id, data) do { } while (0) -#endif - #ifdef XFS_BUF_LOCK_TRACKING # define XB_SET_OWNER(bp) ((bp)->b_last_holder = current->pid) # define XB_CLEAR_OWNER(bp) ((bp)->b_last_holder = -1) @@ -279,7 +252,7 @@ _xfs_buf_initialize( init_waitqueue_head(&bp->b_waiters); XFS_STATS_INC(xb_create); - XB_TRACE(bp, "initialize", target); + xfs_buftrace(bp, "initialize"); } /* @@ -332,7 +305,7 @@ void xfs_buf_free( xfs_buf_t *bp) { - XB_TRACE(bp, "free", 0); + xfs_buftrace(bp, "free"); ASSERT(list_empty(&bp->b_hash_list)); @@ -445,7 +418,7 @@ _xfs_buf_lookup_pages( if (page_count == bp->b_page_count) bp->b_flags |= XBF_DONE; - XB_TRACE(bp, "lookup_pages", (long)page_count); + xfs_buftrace_val(bp, "lookup_pages", page_count); return error; } @@ -548,7 +521,7 @@ found: if (down_trylock(&bp->b_sema)) { if (!(flags & XBF_TRYLOCK)) { /* wait for buffer ownership */ - XB_TRACE(bp, "get_lock", 0); + xfs_buftrace(bp, "get_lock"); xfs_buf_lock(bp); XFS_STATS_INC(xb_get_locked_waited); } else { @@ -571,7 +544,7 @@ found: ASSERT((bp->b_flags & _XBF_DELWRI_Q) == 0); bp->b_flags &= XBF_MAPPED; } - XB_TRACE(bp, "got_lock", 0); + xfs_buftrace(bp, "got_lock"); XFS_STATS_INC(xb_get_locked); return bp; } @@ -627,7 +600,7 @@ xfs_buf_get_flags( bp->b_bn = ioff; bp->b_count_desired = bp->b_buffer_length; - XB_TRACE(bp, "get", (unsigned long)flags); + xfs_buftrace_val(bp, "get", flags); return bp; no_buffer: @@ -644,7 +617,7 @@ _xfs_buf_read( { int status; - XB_TRACE(bp, "_xfs_buf_read", (unsigned long)flags); + xfs_buftrace_val(bp, "_xfs_buf_read", flags); ASSERT(!(flags & (XBF_DELWRI|XBF_WRITE))); ASSERT(bp->b_bn != XFS_BUF_DADDR_NULL); @@ -674,18 +647,18 @@ xfs_buf_read_flags( bp = xfs_buf_get_flags(target, ioff, isize, flags); if (bp) { if (!XFS_BUF_ISDONE(bp)) { - XB_TRACE(bp, "read", (unsigned long)flags); + xfs_buftrace_val(bp, "read", flags); XFS_STATS_INC(xb_get_read); _xfs_buf_read(bp, flags); } else if (flags & XBF_ASYNC) { - XB_TRACE(bp, "read_async", (unsigned long)flags); + xfs_buftrace_val(bp, "read_async", flags); /* * Read ahead call which is already satisfied, * drop the buffer */ goto no_buffer; } else { - XB_TRACE(bp, "read_done", (unsigned long)flags); + xfs_buftrace_val(bp, "read_done", flags); /* We do not want read in the flags */ bp->b_flags &= ~XBF_READ; } @@ -823,7 +796,7 @@ xfs_buf_get_noaddr( xfs_buf_unlock(bp); - XB_TRACE(bp, "no_daddr", len); + xfs_buftrace_val(bp, "no_daddr", len); return bp; fail_free_mem: @@ -846,7 +819,7 @@ xfs_buf_hold( xfs_buf_t *bp) { atomic_inc(&bp->b_hold); - XB_TRACE(bp, "hold", 0); + xfs_buftrace_val(bp, "hold", 0); } /* @@ -859,7 +832,7 @@ xfs_buf_rele( { xfs_bufhash_t *hash = bp->b_hash; - XB_TRACE(bp, "rele", bp->b_relse); + xfs_buftrace(bp, "rele"); if (unlikely(!hash)) { ASSERT(!bp->b_relse); @@ -911,19 +884,20 @@ xfs_buf_cond_lock( locked = down_trylock(&bp->b_sema) == 0; if (locked) { XB_SET_OWNER(bp); + xfs_buftrace(bp, "cond_lock"); + return 0; } - XB_TRACE(bp, "cond_lock", (long)locked); - return locked ? 0 : -EBUSY; + + xfs_buftrace(bp, "cond_lock_fail"); + return -EBUSY; } -#if defined(DEBUG) || defined(XFS_BLI_TRACE) int xfs_buf_lock_value( xfs_buf_t *bp) { return bp->b_sema.count; } -#endif /* * Locks a buffer object. @@ -935,12 +909,12 @@ void xfs_buf_lock( xfs_buf_t *bp) { - XB_TRACE(bp, "lock", 0); + xfs_buftrace(bp, "lock"); if (atomic_read(&bp->b_io_remaining)) blk_run_address_space(bp->b_target->bt_mapping); down(&bp->b_sema); XB_SET_OWNER(bp); - XB_TRACE(bp, "locked", 0); + xfs_buftrace(bp, "locked"); } /* @@ -962,7 +936,7 @@ xfs_buf_unlock( XB_CLEAR_OWNER(bp); up(&bp->b_sema); - XB_TRACE(bp, "unlock", 0); + xfs_buftrace(bp, "unlock"); } @@ -975,7 +949,7 @@ xfs_buf_pin( xfs_buf_t *bp) { atomic_inc(&bp->b_pin_count); - XB_TRACE(bp, "pin", (long)bp->b_pin_count.counter); + xfs_buftrace_val(bp, "pin", bp->b_pin_count.counter); } void @@ -984,7 +958,7 @@ xfs_buf_unpin( { if (atomic_dec_and_test(&bp->b_pin_count)) wake_up_all(&bp->b_waiters); - XB_TRACE(bp, "unpin", (long)bp->b_pin_count.counter); + xfs_buftrace_val(bp, "unpin", bp->b_pin_count.counter); } int @@ -1035,7 +1009,7 @@ xfs_buf_iodone_work( */ if ((bp->b_error == EOPNOTSUPP) && (bp->b_flags & (XBF_ORDERED|XBF_ASYNC)) == (XBF_ORDERED|XBF_ASYNC)) { - XB_TRACE(bp, "ordered_retry", bp->b_iodone); + xfs_buftrace(bp, "ordered_retry"); bp->b_flags &= ~XBF_ORDERED; bp->b_flags |= _XFS_BARRIER_FAILED; xfs_buf_iorequest(bp); @@ -1054,7 +1028,7 @@ xfs_buf_ioend( if (bp->b_error == 0) bp->b_flags |= XBF_DONE; - XB_TRACE(bp, "iodone", bp->b_iodone); + xfs_buftrace(bp, "iodone"); if ((bp->b_iodone) || (bp->b_flags & XBF_ASYNC)) { if (schedule) { @@ -1075,7 +1049,7 @@ xfs_buf_ioerror( { ASSERT(error >= 0 && error <= 0xffff); bp->b_error = (unsigned short)error; - XB_TRACE(bp, "ioerror", (unsigned long)error); + xfs_buftrace_val(bp, "ioerror", error); } int @@ -1083,7 +1057,7 @@ xfs_bawrite( void *mp, struct xfs_buf *bp) { - XB_TRACE(bp, "bawrite", 0); + xfs_buftrace(bp, "bawrite"); ASSERT(bp->b_bn != XFS_BUF_DADDR_NULL); @@ -1102,7 +1076,7 @@ xfs_bdwrite( void *mp, struct xfs_buf *bp) { - XB_TRACE(bp, "bdwrite", 0); + xfs_buftrace(bp, "bdwrite"); bp->b_strat = xfs_bdstrat_cb; bp->b_mount = mp; @@ -1253,7 +1227,7 @@ int xfs_buf_iorequest( xfs_buf_t *bp) { - XB_TRACE(bp, "iorequest", 0); + xfs_buftrace(bp, "iorequest"); if (bp->b_flags & XBF_DELWRI) { xfs_buf_delwri_queue(bp, 1); @@ -1287,11 +1261,11 @@ int xfs_buf_iowait( xfs_buf_t *bp) { - XB_TRACE(bp, "iowait", 0); + xfs_buftrace(bp, "iowait"); if (atomic_read(&bp->b_io_remaining)) blk_run_address_space(bp->b_target->bt_mapping); wait_for_completion(&bp->b_iowait); - XB_TRACE(bp, "iowaited", (long)bp->b_error); + xfs_buftrace_val(bp, "iowaited", bp->b_error); return bp->b_error; } @@ -1604,7 +1578,8 @@ xfs_buf_delwri_queue( struct list_head *dwq = &bp->b_target->bt_delwrite_queue; spinlock_t *dwlk = &bp->b_target->bt_delwrite_lock; - XB_TRACE(bp, "delwri_q", (long)unlock); + xfs_buftrace_val(bp, "delwri_q", unlock); + ASSERT((bp->b_flags&(XBF_DELWRI|XBF_ASYNC)) == (XBF_DELWRI|XBF_ASYNC)); spin_lock(dwlk); @@ -1644,7 +1619,7 @@ xfs_buf_delwri_dequeue( if (dequeued) xfs_buf_rele(bp); - XB_TRACE(bp, "delwri_dq", (long)dequeued); + xfs_buftrace_val(bp, "delwri_dq", dequeued); } STATIC void @@ -1692,7 +1667,7 @@ xfs_buf_delwri_split( INIT_LIST_HEAD(list); spin_lock(dwlk); list_for_each_entry_safe(bp, n, dwq, b_list) { - XB_TRACE(bp, "walkq1", (long)xfs_buf_ispin(bp)); + xfs_buftrace_val(bp, "walkq1", xfs_buf_ispin(bp)); ASSERT(bp->b_flags & XBF_DELWRI); if (!xfs_buf_ispin(bp) && !xfs_buf_cond_lock(bp)) { @@ -1816,14 +1791,10 @@ xfs_flush_buftarg( int __init xfs_buf_init(void) { -#ifdef XFS_BUF_TRACE - xfs_buf_trace_buf = ktrace_alloc(XFS_BUF_TRACE_SIZE, KM_NOFS); -#endif - xfs_buf_zone = kmem_zone_init_flags(sizeof(xfs_buf_t), "xfs_buf", KM_ZONE_HWALIGN, NULL); if (!xfs_buf_zone) - goto out_free_trace_buf; + goto out; xfslogd_workqueue = create_workqueue("xfslogd"); if (!xfslogd_workqueue) @@ -1846,10 +1817,7 @@ xfs_buf_init(void) destroy_workqueue(xfslogd_workqueue); out_free_buf_zone: kmem_zone_destroy(xfs_buf_zone); - out_free_trace_buf: -#ifdef XFS_BUF_TRACE - ktrace_free(xfs_buf_trace_buf); -#endif + out: return -ENOMEM; } @@ -1861,9 +1829,6 @@ xfs_buf_terminate(void) destroy_workqueue(xfsdatad_workqueue); destroy_workqueue(xfslogd_workqueue); kmem_zone_destroy(xfs_buf_zone); -#ifdef XFS_BUF_TRACE - ktrace_free(xfs_buf_trace_buf); -#endif } #ifdef CONFIG_KDB_MODULES Index: linux-2.6/fs/xfs/linux-2.6/xfs_buf.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_buf.h +++ linux-2.6/fs/xfs/linux-2.6/xfs_buf.h @@ -95,6 +95,28 @@ typedef enum { _XFS_BARRIER_FAILED = (1 << 23), } xfs_buf_flags_t; +#define XFS_BUF_FLAGS \ + { XBF_READ, "READ" }, \ + { XBF_WRITE, "WRITE" }, \ + { XBF_MAPPED, "MAPPED" }, \ + { XBF_ASYNC, "ASYNC" }, \ + { XBF_DONE, "DONE" }, \ + { XBF_DELWRI, "DELWRI" }, \ + { XBF_STALE, "STALE" }, \ + { XBF_FS_MANAGED, "FS_MANAGED" }, \ + { XBF_ORDERED, "ORDERED" }, \ + { XBF_READ_AHEAD, "READ_AHEAD" }, \ + { XBF_LOCK, "LOCK" }, /* should never be set */\ + { XBF_TRYLOCK, "TRYLOCK" }, /* ditto */\ + { XBF_DONT_BLOCK, "DONT_BLOCK" }, /* ditto */\ + { _XBF_PAGE_CACHE, "PAGE_CACHE" }, \ + { _XBF_PAGES, "PAGES" }, \ + { _XBF_RUN_QUEUES, "RUN_QUEUES" }, \ + { _XBF_DELWRI_Q, "DELWRI_Q" }, \ + { _XBF_PAGE_LOCKED, "PAGE_LOCKED" }, \ + { _XFS_BARRIER_FAILED, "BARRIER_FAILED" } + + typedef enum { XBT_FORCE_SLEEP = 0, XBT_FORCE_FLUSH = 1, @@ -248,13 +270,6 @@ extern void xfs_buf_delwri_dequeue(xfs_b extern int xfs_buf_init(void); extern void xfs_buf_terminate(void); -#ifdef XFS_BUF_TRACE -extern ktrace_t *xfs_buf_trace_buf; -extern void xfs_buf_trace(xfs_buf_t *, char *, void *, void *); -#else -#define xfs_buf_trace(bp,id,ptr,ra) do { } while (0) -#endif - #define xfs_buf_target_name(target) \ ({ char __b[BDEVNAME_SIZE]; bdevname((target)->bt_bdev, __b); __b; }) @@ -370,10 +385,6 @@ static inline void xfs_buf_relse(xfs_buf #define xfs_bpin(bp) xfs_buf_pin(bp) #define xfs_bunpin(bp) xfs_buf_unpin(bp) - -#define xfs_buftrace(id, bp) \ - xfs_buf_trace(bp, id, NULL, (void *)__builtin_return_address(0)) - #define xfs_biodone(bp) xfs_buf_ioend(bp, 0) #define xfs_biomove(bp, off, len, data, rw) \ Index: linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_lrw.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c @@ -48,73 +48,12 @@ #include "xfs_utils.h" #include "xfs_iomap.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include -#if defined(XFS_RW_TRACE) -void -xfs_rw_enter_trace( - int tag, - xfs_inode_t *ip, - void *data, - size_t segs, - loff_t offset, - int ioflags) -{ - if (ip->i_rwtrace == NULL) - return; - ktrace_enter(ip->i_rwtrace, - (void *)(unsigned long)tag, - (void *)ip, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)data, - (void *)((unsigned long)segs), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)ioflags), - (void *)((unsigned long)((ip->i_new_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_new_size & 0xffffffff)), - (void *)((unsigned long)current_pid()), - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL); -} - -void -xfs_inval_cached_trace( - xfs_inode_t *ip, - xfs_off_t offset, - xfs_off_t len, - xfs_off_t first, - xfs_off_t last) -{ - - if (ip->i_rwtrace == NULL) - return; - ktrace_enter(ip->i_rwtrace, - (void *)(__psint_t)XFS_INVAL_CACHED, - (void *)ip, - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)((len >> 32) & 0xffffffff)), - (void *)((unsigned long)(len & 0xffffffff)), - (void *)((unsigned long)((first >> 32) & 0xffffffff)), - (void *)((unsigned long)(first & 0xffffffff)), - (void *)((unsigned long)((last >> 32) & 0xffffffff)), - (void *)((unsigned long)(last & 0xffffffff)), - (void *)((unsigned long)current_pid()), - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL); -} -#endif - /* * xfs_iozero * @@ -250,8 +189,7 @@ xfs_read( } } - xfs_rw_enter_trace(XFS_READ_ENTER, ip, - (void *)iovp, segs, *offset, ioflags); + trace_xfs_rw(ip, size, *offset, ioflags, "read"); iocb->ki_pos = *offset; ret = generic_file_aio_read(iocb, iovp, segs, *offset); @@ -294,8 +232,9 @@ xfs_splice_read( return -error; } } - xfs_rw_enter_trace(XFS_SPLICE_READ_ENTER, ip, - pipe, count, *ppos, ioflags); + + trace_xfs_rw(ip, count, *ppos, ioflags, "splice_read"); + ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); if (ret > 0) XFS_STATS_ADD(xs_read_bytes, ret); @@ -344,8 +283,8 @@ xfs_splice_write( ip->i_new_size = new_size; xfs_iunlock(ip, XFS_ILOCK_EXCL); - xfs_rw_enter_trace(XFS_SPLICE_WRITE_ENTER, ip, - pipe, count, *ppos, ioflags); + trace_xfs_rw(ip, count, *ppos, ioflags, "splice_write"); + ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); if (ret > 0) XFS_STATS_ADD(xs_write_bytes, ret); @@ -712,8 +651,6 @@ start: if ((ioflags & IO_ISDIRECT)) { if (mapping->nrpages) { WARN_ON(need_i_mutex == 0); - xfs_inval_cached_trace(xip, pos, -1, - (pos & PAGE_CACHE_MASK), -1); error = xfs_flushinval_pages(xip, (pos & PAGE_CACHE_MASK), -1, FI_REMAPF_LOCKED); @@ -730,8 +667,7 @@ start: need_i_mutex = 0; } - xfs_rw_enter_trace(XFS_DIOWR_ENTER, xip, (void *)iovp, segs, - *offset, ioflags); + trace_xfs_rw(xip, count, *offset, ioflags, "write"); ret = generic_file_direct_write(iocb, iovp, &segs, pos, offset, count, ocount); @@ -754,8 +690,7 @@ start: ssize_t ret2 = 0; write_retry: - xfs_rw_enter_trace(XFS_WRITE_ENTER, xip, (void *)iovp, segs, - *offset, ioflags); + trace_xfs_rw(xip, count, *offset, ioflags, "write"); ret2 = generic_file_buffered_write(iocb, iovp, segs, pos, offset, count, ret); /* @@ -860,7 +795,7 @@ int xfs_bdstrat_cb(struct xfs_buf *bp) { if (XFS_FORCED_SHUTDOWN(bp->b_mount)) { - xfs_buftrace("XFS__BDSTRAT IOERROR", bp); + xfs_buftrace(bp, "bdstrat_cb_shut"); /* * Metadata write that didn't get logged but * written delayed anyway. These aren't associated @@ -893,7 +828,7 @@ xfsbdstrat( return; } - xfs_buftrace("XFSBDSTRAT IOERROR", bp); + xfs_buftrace(bp, "bdstrat_shut"); xfs_bioerror_relse(bp); } Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.c @@ -15,6 +15,7 @@ * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + #include "xfs.h" #include "xfs_bit.h" #include "xfs_log.h" @@ -52,11 +53,12 @@ #include "xfs_trans_priv.h" #include "xfs_filestream.h" #include "xfs_da_btree.h" -#include "xfs_dir2_trace.h" #include "xfs_extfree_item.h" #include "xfs_mru_cache.h" #include "xfs_inode_item.h" #include "xfs_sync.h" +#define CREATE_TRACE_POINTS +#include "xfs_trace.h" #include #include @@ -67,6 +69,8 @@ #include #include + + static struct super_operations xfs_super_operations; static kmem_zone_t *xfs_ioend_zone; mempool_t *xfs_ioend_pool; @@ -1554,94 +1558,6 @@ static struct file_system_type xfs_fs_ty }; STATIC int __init -xfs_alloc_trace_bufs(void) -{ -#ifdef XFS_ALLOC_TRACE - xfs_alloc_trace_buf = ktrace_alloc(XFS_ALLOC_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_alloc_trace_buf) - goto out; -#endif -#ifdef XFS_BMAP_TRACE - xfs_bmap_trace_buf = ktrace_alloc(XFS_BMAP_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_bmap_trace_buf) - goto out_free_alloc_trace; -#endif -#ifdef XFS_BTREE_TRACE - xfs_allocbt_trace_buf = ktrace_alloc(XFS_ALLOCBT_TRACE_SIZE, - KM_MAYFAIL); - if (!xfs_allocbt_trace_buf) - goto out_free_bmap_trace; - - xfs_inobt_trace_buf = ktrace_alloc(XFS_INOBT_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_inobt_trace_buf) - goto out_free_allocbt_trace; - - xfs_bmbt_trace_buf = ktrace_alloc(XFS_BMBT_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_bmbt_trace_buf) - goto out_free_inobt_trace; -#endif -#ifdef XFS_ATTR_TRACE - xfs_attr_trace_buf = ktrace_alloc(XFS_ATTR_TRACE_SIZE, KM_MAYFAIL); - if (!xfs_attr_trace_buf) - goto out_free_bmbt_trace; -#endif -#ifdef XFS_DIR2_TRACE - xfs_dir2_trace_buf = ktrace_alloc(XFS_DIR2_GTRACE_SIZE, KM_MAYFAIL); - if (!xfs_dir2_trace_buf) - goto out_free_attr_trace; -#endif - - return 0; - -#ifdef XFS_DIR2_TRACE - out_free_attr_trace: -#endif -#ifdef XFS_ATTR_TRACE - ktrace_free(xfs_attr_trace_buf); - out_free_bmbt_trace: -#endif -#ifdef XFS_BTREE_TRACE - ktrace_free(xfs_bmbt_trace_buf); - out_free_inobt_trace: - ktrace_free(xfs_inobt_trace_buf); - out_free_allocbt_trace: - ktrace_free(xfs_allocbt_trace_buf); - out_free_bmap_trace: -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(xfs_bmap_trace_buf); - out_free_alloc_trace: -#endif -#ifdef XFS_ALLOC_TRACE - ktrace_free(xfs_alloc_trace_buf); - out: -#endif - return -ENOMEM; -} - -STATIC void -xfs_free_trace_bufs(void) -{ -#ifdef XFS_DIR2_TRACE - ktrace_free(xfs_dir2_trace_buf); -#endif -#ifdef XFS_ATTR_TRACE - ktrace_free(xfs_attr_trace_buf); -#endif -#ifdef XFS_BTREE_TRACE - ktrace_free(xfs_bmbt_trace_buf); - ktrace_free(xfs_inobt_trace_buf); - ktrace_free(xfs_allocbt_trace_buf); -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(xfs_bmap_trace_buf); -#endif -#ifdef XFS_ALLOC_TRACE - ktrace_free(xfs_alloc_trace_buf); -#endif -} - -STATIC int __init xfs_init_zones(void) { @@ -1782,7 +1698,6 @@ init_xfs_fs(void) printk(KERN_INFO XFS_VERSION_STRING " with " XFS_BUILD_OPTIONS " enabled\n"); - ktrace_init(64); xfs_ioend_init(); xfs_dir_startup(); @@ -1790,13 +1705,9 @@ init_xfs_fs(void) if (error) goto out; - error = xfs_alloc_trace_bufs(); - if (error) - goto out_destroy_zones; - error = xfs_mru_cache_init(); if (error) - goto out_free_trace_buffers; + goto out_destroy_zones; error = xfs_filestream_init(); if (error) @@ -1831,8 +1742,6 @@ init_xfs_fs(void) xfs_filestream_uninit(); out_mru_cache_uninit: xfs_mru_cache_uninit(); - out_free_trace_buffers: - xfs_free_trace_bufs(); out_destroy_zones: xfs_destroy_zones(); out: @@ -1849,9 +1758,7 @@ exit_xfs_fs(void) xfs_buf_terminate(); xfs_filestream_uninit(); xfs_mru_cache_uninit(); - xfs_free_trace_bufs(); xfs_destroy_zones(); - ktrace_uninit(); } module_init(init_xfs_fs); Index: linux-2.6/fs/xfs/quota/xfs_dquot.c =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_dquot.c +++ linux-2.6/fs/xfs/quota/xfs_dquot.c @@ -47,6 +47,7 @@ #include "xfs_trans_space.h" #include "xfs_trans_priv.h" #include "xfs_qm.h" +#include "xfs_trace.h" /* @@ -112,10 +113,7 @@ xfs_qm_dqinit( init_completion(&dqp->q_flush); complete(&dqp->q_flush); -#ifdef XFS_DQUOT_TRACE - dqp->q_trace = ktrace_alloc(DQUOT_TRACE_SIZE, KM_NOFS); xfs_dqtrace_entry(dqp, "DQINIT"); -#endif } else { /* * Only the q_core portion was zeroed in dqreclaim_one(). @@ -136,10 +134,7 @@ xfs_qm_dqinit( dqp->q_hash = NULL; ASSERT(dqp->dq_flnext == dqp->dq_flprev); -#ifdef XFS_DQUOT_TRACE - ASSERT(dqp->q_trace); xfs_dqtrace_entry(dqp, "DQRECLAIMED_INIT"); -#endif } /* @@ -167,13 +162,8 @@ xfs_qm_dqdestroy( mutex_destroy(&dqp->q_qlock); sv_destroy(&dqp->q_pinwait); - -#ifdef XFS_DQUOT_TRACE - if (dqp->q_trace) - ktrace_free(dqp->q_trace); - dqp->q_trace = NULL; -#endif kmem_zone_free(xfs_Gqm->qm_dqzone, dqp); + atomic_dec(&xfs_Gqm->qm_totaldquots); } @@ -195,49 +185,6 @@ xfs_qm_dqinit_core( d->dd_diskdq.d_flags = type; } - -#ifdef XFS_DQUOT_TRACE -/* - * Dquot tracing for debugging. - */ -/* ARGSUSED */ -void -__xfs_dqtrace_entry( - xfs_dquot_t *dqp, - char *func, - void *retaddr, - xfs_inode_t *ip) -{ - xfs_dquot_t *udqp = NULL; - xfs_ino_t ino = 0; - - ASSERT(dqp->q_trace); - if (ip) { - ino = ip->i_ino; - udqp = ip->i_udquot; - } - ktrace_enter(dqp->q_trace, - (void *)(__psint_t)DQUOT_KTRACE_ENTRY, - (void *)func, - (void *)(__psint_t)dqp->q_nrefs, - (void *)(__psint_t)dqp->dq_flags, - (void *)(__psint_t)dqp->q_res_bcount, - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_bcount), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_icount), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_blk_hardlimit), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_blk_softlimit), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_ino_hardlimit), - (void *)(__psint_t)be64_to_cpu(dqp->q_core.d_ino_softlimit), - (void *)(__psint_t)be32_to_cpu(dqp->q_core.d_id), - (void *)(__psint_t)current_pid(), - (void *)(__psint_t)ino, - (void *)(__psint_t)retaddr, - (void *)(__psint_t)udqp); - return; -} -#endif - - /* * If default limits are in force, push them into the dquot now. * We overwrite the dquot limits only if they are zero and this Index: linux-2.6/fs/xfs/quota/xfs_dquot.h =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_dquot.h +++ linux-2.6/fs/xfs/quota/xfs_dquot.h @@ -85,9 +85,6 @@ typedef struct xfs_dquot { struct completion q_flush; /* flush completion queue */ atomic_t q_pincount; /* dquot pin count */ wait_queue_head_t q_pinwait; /* dquot pinning wait queue */ -#ifdef XFS_DQUOT_TRACE - struct ktrace *q_trace; /* trace header structure */ -#endif } xfs_dquot_t; @@ -144,24 +141,6 @@ static inline void xfs_dqfunlock(xfs_dqu (XFS_IS_UQUOTA_ON((d)->q_mount)) : \ (XFS_IS_OQUOTA_ON((d)->q_mount)))) -#ifdef XFS_DQUOT_TRACE -/* - * Dquot Tracing stuff. - */ -#define DQUOT_TRACE_SIZE 64 -#define DQUOT_KTRACE_ENTRY 1 - -extern void __xfs_dqtrace_entry(xfs_dquot_t *dqp, char *func, - void *, xfs_inode_t *); -#define xfs_dqtrace_entry_ino(a,b,ip) \ - __xfs_dqtrace_entry((a), (b), (void*)__return_address, (ip)) -#define xfs_dqtrace_entry(a,b) \ - __xfs_dqtrace_entry((a), (b), (void*)__return_address, NULL) -#else -#define xfs_dqtrace_entry(a,b) -#define xfs_dqtrace_entry_ino(a,b,ip) -#endif - #ifdef QUOTADEBUG extern void xfs_qm_dqprint(xfs_dquot_t *); #else Index: linux-2.6/fs/xfs/support/ktrace.c =================================================================== --- linux-2.6.orig/fs/xfs/support/ktrace.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include - -static kmem_zone_t *ktrace_hdr_zone; -static kmem_zone_t *ktrace_ent_zone; -static int ktrace_zentries; - -void __init -ktrace_init(int zentries) -{ - ktrace_zentries = roundup_pow_of_two(zentries); - - ktrace_hdr_zone = kmem_zone_init(sizeof(ktrace_t), - "ktrace_hdr"); - ASSERT(ktrace_hdr_zone); - - ktrace_ent_zone = kmem_zone_init(ktrace_zentries - * sizeof(ktrace_entry_t), - "ktrace_ent"); - ASSERT(ktrace_ent_zone); -} - -void __exit -ktrace_uninit(void) -{ - kmem_zone_destroy(ktrace_hdr_zone); - kmem_zone_destroy(ktrace_ent_zone); -} - -/* - * ktrace_alloc() - * - * Allocate a ktrace header and enough buffering for the given - * number of entries. Round the number of entries up to a - * power of 2 so we can do fast masking to get the index from - * the atomic index counter. - */ -ktrace_t * -ktrace_alloc(int nentries, unsigned int __nocast sleep) -{ - ktrace_t *ktp; - ktrace_entry_t *ktep; - int entries; - - ktp = (ktrace_t*)kmem_zone_alloc(ktrace_hdr_zone, sleep); - - if (ktp == (ktrace_t*)NULL) { - /* - * KM_SLEEP callers don't expect failure. - */ - if (sleep & KM_SLEEP) - panic("ktrace_alloc: NULL memory on KM_SLEEP request!"); - - return NULL; - } - - /* - * Special treatment for buffers with the ktrace_zentries entries - */ - entries = roundup_pow_of_two(nentries); - if (entries == ktrace_zentries) { - ktep = (ktrace_entry_t*)kmem_zone_zalloc(ktrace_ent_zone, - sleep); - } else { - ktep = (ktrace_entry_t*)kmem_zalloc((entries * sizeof(*ktep)), - sleep | KM_LARGE); - } - - if (ktep == NULL) { - /* - * KM_SLEEP callers don't expect failure. - */ - if (sleep & KM_SLEEP) - panic("ktrace_alloc: NULL memory on KM_SLEEP request!"); - - kmem_free(ktp); - - return NULL; - } - - ktp->kt_entries = ktep; - ktp->kt_nentries = entries; - ASSERT(is_power_of_2(entries)); - ktp->kt_index_mask = entries - 1; - atomic_set(&ktp->kt_index, 0); - ktp->kt_rollover = 0; - return ktp; -} - - -/* - * ktrace_free() - * - * Free up the ktrace header and buffer. It is up to the caller - * to ensure that no-one is referencing it. - */ -void -ktrace_free(ktrace_t *ktp) -{ - if (ktp == (ktrace_t *)NULL) - return; - - /* - * Special treatment for the Vnode trace buffer. - */ - if (ktp->kt_nentries == ktrace_zentries) - kmem_zone_free(ktrace_ent_zone, ktp->kt_entries); - else - kmem_free(ktp->kt_entries); - - kmem_zone_free(ktrace_hdr_zone, ktp); -} - - -/* - * Enter the given values into the "next" entry in the trace buffer. - * kt_index is always the index of the next entry to be filled. - */ -void -ktrace_enter( - ktrace_t *ktp, - void *val0, - void *val1, - void *val2, - void *val3, - void *val4, - void *val5, - void *val6, - void *val7, - void *val8, - void *val9, - void *val10, - void *val11, - void *val12, - void *val13, - void *val14, - void *val15) -{ - int index; - ktrace_entry_t *ktep; - - ASSERT(ktp != NULL); - - /* - * Grab an entry by pushing the index up to the next one. - */ - index = atomic_add_return(1, &ktp->kt_index); - index = (index - 1) & ktp->kt_index_mask; - if (!ktp->kt_rollover && index == ktp->kt_nentries - 1) - ktp->kt_rollover = 1; - - ASSERT((index >= 0) && (index < ktp->kt_nentries)); - - ktep = &(ktp->kt_entries[index]); - - ktep->val[0] = val0; - ktep->val[1] = val1; - ktep->val[2] = val2; - ktep->val[3] = val3; - ktep->val[4] = val4; - ktep->val[5] = val5; - ktep->val[6] = val6; - ktep->val[7] = val7; - ktep->val[8] = val8; - ktep->val[9] = val9; - ktep->val[10] = val10; - ktep->val[11] = val11; - ktep->val[12] = val12; - ktep->val[13] = val13; - ktep->val[14] = val14; - ktep->val[15] = val15; -} - -/* - * Return the number of entries in the trace buffer. - */ -int -ktrace_nentries( - ktrace_t *ktp) -{ - int index; - if (ktp == NULL) - return 0; - - index = atomic_read(&ktp->kt_index) & ktp->kt_index_mask; - return (ktp->kt_rollover ? ktp->kt_nentries : index); -} - -/* - * ktrace_first() - * - * This is used to find the start of the trace buffer. - * In conjunction with ktrace_next() it can be used to - * iterate through the entire trace buffer. This code does - * not do any locking because it is assumed that it is called - * from the debugger. - * - * The caller must pass in a pointer to a ktrace_snap - * structure in which we will keep some state used to - * iterate through the buffer. This state must not touched - * by any code outside of this module. - */ -ktrace_entry_t * -ktrace_first(ktrace_t *ktp, ktrace_snap_t *ktsp) -{ - ktrace_entry_t *ktep; - int index; - int nentries; - - if (ktp->kt_rollover) - index = atomic_read(&ktp->kt_index) & ktp->kt_index_mask; - else - index = 0; - - ktsp->ks_start = index; - ktep = &(ktp->kt_entries[index]); - - nentries = ktrace_nentries(ktp); - index++; - if (index < nentries) { - ktsp->ks_index = index; - } else { - ktsp->ks_index = 0; - if (index > nentries) - ktep = NULL; - } - return ktep; -} - -/* - * ktrace_next() - * - * This is used to iterate through the entries of the given - * trace buffer. The caller must pass in the ktrace_snap_t - * structure initialized by ktrace_first(). The return value - * will be either a pointer to the next ktrace_entry or NULL - * if all of the entries have been traversed. - */ -ktrace_entry_t * -ktrace_next( - ktrace_t *ktp, - ktrace_snap_t *ktsp) -{ - int index; - ktrace_entry_t *ktep; - - index = ktsp->ks_index; - if (index == ktsp->ks_start) { - ktep = NULL; - } else { - ktep = &ktp->kt_entries[index]; - } - - index++; - if (index == ktrace_nentries(ktp)) { - ktsp->ks_index = 0; - } else { - ktsp->ks_index = index; - } - - return ktep; -} - -/* - * ktrace_skip() - * - * Skip the next "count" entries and return the entry after that. - * Return NULL if this causes us to iterate past the beginning again. - */ -ktrace_entry_t * -ktrace_skip( - ktrace_t *ktp, - int count, - ktrace_snap_t *ktsp) -{ - int index; - int new_index; - ktrace_entry_t *ktep; - int nentries = ktrace_nentries(ktp); - - index = ktsp->ks_index; - new_index = index + count; - while (new_index >= nentries) { - new_index -= nentries; - } - if (index == ktsp->ks_start) { - /* - * We've iterated around to the start, so we're done. - */ - ktep = NULL; - } else if ((new_index < index) && (index < ktsp->ks_index)) { - /* - * We've skipped past the start again, so we're done. - */ - ktep = NULL; - ktsp->ks_index = ktsp->ks_start; - } else { - ktep = &(ktp->kt_entries[new_index]); - new_index++; - if (new_index == nentries) { - ktsp->ks_index = 0; - } else { - ktsp->ks_index = new_index; - } - } - return ktep; -} Index: linux-2.6/fs/xfs/support/ktrace.h =================================================================== --- linux-2.6.orig/fs/xfs/support/ktrace.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef __XFS_SUPPORT_KTRACE_H__ -#define __XFS_SUPPORT_KTRACE_H__ - -/* - * Trace buffer entry structure. - */ -typedef struct ktrace_entry { - void *val[16]; -} ktrace_entry_t; - -/* - * Trace buffer header structure. - */ -typedef struct ktrace { - int kt_nentries; /* number of entries in trace buf */ - atomic_t kt_index; /* current index in entries */ - unsigned int kt_index_mask; - int kt_rollover; - ktrace_entry_t *kt_entries; /* buffer of entries */ -} ktrace_t; - -/* - * Trace buffer snapshot structure. - */ -typedef struct ktrace_snap { - int ks_start; /* kt_index at time of snap */ - int ks_index; /* current index */ -} ktrace_snap_t; - - -#ifdef CONFIG_XFS_TRACE - -extern void ktrace_init(int zentries); -extern void ktrace_uninit(void); - -extern ktrace_t *ktrace_alloc(int, unsigned int __nocast); -extern void ktrace_free(ktrace_t *); - -extern void ktrace_enter( - ktrace_t *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *, - void *); - -extern ktrace_entry_t *ktrace_first(ktrace_t *, ktrace_snap_t *); -extern int ktrace_nentries(ktrace_t *); -extern ktrace_entry_t *ktrace_next(ktrace_t *, ktrace_snap_t *); -extern ktrace_entry_t *ktrace_skip(ktrace_t *, int, ktrace_snap_t *); - -#else -#define ktrace_init(x) do { } while (0) -#define ktrace_uninit() do { } while (0) -#endif /* CONFIG_XFS_TRACE */ - -#endif /* __XFS_SUPPORT_KTRACE_H__ */ Index: linux-2.6/fs/xfs/xfs_alloc.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_alloc.h +++ linux-2.6/fs/xfs/xfs_alloc.h @@ -37,6 +37,15 @@ typedef enum xfs_alloctype XFS_ALLOCTYPE_THIS_BNO /* at exactly this block */ } xfs_alloctype_t; +#define XFS_ALLOC_TYPES \ + { XFS_ALLOCTYPE_ANY_AG, "ANY_AG" }, \ + { XFS_ALLOCTYPE_FIRST_AG, "FIRST_AG" }, \ + { XFS_ALLOCTYPE_START_AG, "START_AG" }, \ + { XFS_ALLOCTYPE_THIS_AG, "THIS_AG" }, \ + { XFS_ALLOCTYPE_START_BNO, "START_BNO" }, \ + { XFS_ALLOCTYPE_NEAR_BNO, "NEAR_BNO" }, \ + { XFS_ALLOCTYPE_THIS_BNO, "THIS_BNO" } + /* * Flags for xfs_alloc_fix_freelist. */ @@ -109,13 +118,6 @@ xfs_alloc_longest_free_extent(struct xfs #ifdef __KERNEL__ -#if defined(XFS_ALLOC_TRACE) -/* - * Allocation tracing buffer size. - */ -#define XFS_ALLOC_TRACE_SIZE 4096 -extern ktrace_t *xfs_alloc_trace_buf; - /* * Types for alloc tracing. */ @@ -125,7 +127,7 @@ extern ktrace_t *xfs_alloc_trace_buf; #define XFS_ALLOC_KTRACE_BUSY 4 #define XFS_ALLOC_KTRACE_UNBUSY 5 #define XFS_ALLOC_KTRACE_BUSYSEARCH 6 -#endif + void xfs_alloc_mark_busy(xfs_trans_t *tp, Index: linux-2.6/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr.c +++ linux-2.6/fs/xfs/xfs_attr.c @@ -47,6 +47,7 @@ #include "xfs_trans_space.h" #include "xfs_rw.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" /* * xfs_attr.c @@ -89,10 +90,6 @@ STATIC int xfs_attr_rmtval_remove(xfs_da #define ATTR_RMTVALUE_MAPSIZE 1 /* # of map entries at once */ -#if defined(XFS_ATTR_TRACE) -ktrace_t *xfs_attr_trace_buf; -#endif - STATIC int xfs_attr_name_to_xname( struct xfs_name *xname, @@ -2265,17 +2262,13 @@ xfs_attr_rmtval_remove(xfs_da_args_t *ar return(0); } -#if defined(XFS_ATTR_TRACE) /* * Add a trace buffer entry for an attr_list context structure. */ void xfs_attr_trace_l_c(char *where, struct xfs_attr_list_context *context) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_C, where, context, - (__psunsigned_t)NULL, - (__psunsigned_t)NULL, - (__psunsigned_t)NULL); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_C, where, context, 0, 0, 0); } /* @@ -2285,11 +2278,11 @@ void xfs_attr_trace_l_cn(char *where, struct xfs_attr_list_context *context, struct xfs_da_intnode *node) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CN, where, context, - (__psunsigned_t)be16_to_cpu(node->hdr.count), - (__psunsigned_t)be32_to_cpu(node->btree[0].hashval), - (__psunsigned_t)be32_to_cpu(node->btree[ - be16_to_cpu(node->hdr.count)-1].hashval)); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_CN, where, context, + be16_to_cpu(node->hdr.count), + be32_to_cpu(node->btree[0].hashval), + be32_to_cpu(node->btree[ + be16_to_cpu(node->hdr.count)-1].hashval)); } /* @@ -2299,10 +2292,10 @@ void xfs_attr_trace_l_cb(char *where, struct xfs_attr_list_context *context, struct xfs_da_node_entry *btree) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CB, where, context, - (__psunsigned_t)be32_to_cpu(btree->hashval), - (__psunsigned_t)be32_to_cpu(btree->before), - (__psunsigned_t)NULL); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_CB, where, context, + be32_to_cpu(btree->hashval), + be32_to_cpu(btree->before), + 0); } /* @@ -2312,37 +2305,9 @@ void xfs_attr_trace_l_cl(char *where, struct xfs_attr_list_context *context, struct xfs_attr_leafblock *leaf) { - xfs_attr_trace_enter(XFS_ATTR_KTRACE_L_CL, where, context, - (__psunsigned_t)be16_to_cpu(leaf->hdr.count), - (__psunsigned_t)be32_to_cpu(leaf->entries[0].hashval), - (__psunsigned_t)be32_to_cpu(leaf->entries[ - be16_to_cpu(leaf->hdr.count)-1].hashval)); -} - -/* - * Add a trace buffer entry for the arguments given to the routine, - * generic form. - */ -void -xfs_attr_trace_enter(int type, char *where, - struct xfs_attr_list_context *context, - __psunsigned_t a13, __psunsigned_t a14, - __psunsigned_t a15) -{ - ASSERT(xfs_attr_trace_buf); - ktrace_enter(xfs_attr_trace_buf, (void *)((__psunsigned_t)type), - (void *)((__psunsigned_t)where), - (void *)((__psunsigned_t)context->dp), - (void *)((__psunsigned_t)context->cursor->hashval), - (void *)((__psunsigned_t)context->cursor->blkno), - (void *)((__psunsigned_t)context->cursor->offset), - (void *)((__psunsigned_t)context->alist), - (void *)((__psunsigned_t)context->bufsize), - (void *)((__psunsigned_t)context->count), - (void *)((__psunsigned_t)context->firstu), - NULL, - (void *)((__psunsigned_t)context->dupcnt), - (void *)((__psunsigned_t)context->flags), - (void *)a13, (void *)a14, (void *)a15); + trace_xfs_attr_list(XFS_ATTR_KTRACE_L_CL, where, context, + be16_to_cpu(leaf->hdr.count), + be32_to_cpu(leaf->entries[0].hashval), + be32_to_cpu(leaf->entries[ + be16_to_cpu(leaf->hdr.count)-1].hashval)); } -#endif /* XFS_ATTR_TRACE */ Index: linux-2.6/fs/xfs/xfs_attr_sf.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr_sf.h +++ linux-2.6/fs/xfs/xfs_attr_sf.h @@ -25,6 +25,10 @@ * to fit into the literal area of the inode. */ +struct xfs_attr_list_context; +struct xfs_da_intnode; +struct xfs_da_node_entry; +struct xfs_attr_leafblock; struct xfs_inode; /* @@ -69,17 +73,9 @@ typedef struct xfs_attr_sf_sort { (be16_to_cpu(((xfs_attr_shortform_t *) \ ((dp)->i_afp->if_u1.if_data))->hdr.totsize)) -#if defined(XFS_ATTR_TRACE) /* * Kernel tracing support for attribute lists */ -struct xfs_attr_list_context; -struct xfs_da_intnode; -struct xfs_da_node_entry; -struct xfs_attr_leafblock; - -#define XFS_ATTR_TRACE_SIZE 4096 /* size of global trace buffer */ -extern ktrace_t *xfs_attr_trace_buf; /* * Trace record types. @@ -96,15 +92,5 @@ void xfs_attr_trace_l_cb(char *where, st struct xfs_da_node_entry *btree); void xfs_attr_trace_l_cl(char *where, struct xfs_attr_list_context *context, struct xfs_attr_leafblock *leaf); -void xfs_attr_trace_enter(int type, char *where, - struct xfs_attr_list_context *context, - __psunsigned_t a13, __psunsigned_t a14, - __psunsigned_t a15); -#else -#define xfs_attr_trace_l_c(w,c) -#define xfs_attr_trace_l_cn(w,c,n) -#define xfs_attr_trace_l_cb(w,c,b) -#define xfs_attr_trace_l_cl(w,c,l) -#endif /* XFS_ATTR_TRACE */ #endif /* __XFS_ATTR_SF_H__ */ Index: linux-2.6/fs/xfs/xfs_bmap.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap.c +++ linux-2.6/fs/xfs/xfs_bmap.c @@ -54,6 +54,7 @@ #include "xfs_buf_item.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #ifdef DEBUG @@ -272,71 +273,6 @@ xfs_bmap_isaeof( int whichfork, /* data or attribute fork */ char *aeof); /* return value */ -#ifdef XFS_BMAP_TRACE -/* - * Add bmap trace entry prior to a call to xfs_iext_remove. - */ -STATIC void -xfs_bmap_trace_delete( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) deleted */ - xfs_extnum_t cnt, /* count of entries deleted, 1 or 2 */ - int whichfork); /* data or attr fork */ - -/* - * Add bmap trace entry prior to a call to xfs_iext_insert, or - * reading in the extents list from the disk (in the btree). - */ -STATIC void -xfs_bmap_trace_insert( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) inserted */ - xfs_extnum_t cnt, /* count of entries inserted, 1 or 2 */ - xfs_bmbt_irec_t *r1, /* inserted record 1 */ - xfs_bmbt_irec_t *r2, /* inserted record 2 or null */ - int whichfork); /* data or attr fork */ - -/* - * Add bmap trace entry after updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_post_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry updated */ - int whichfork); /* data or attr fork */ - -/* - * Add bmap trace entry prior to updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_pre_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry to be updated */ - int whichfork); /* data or attr fork */ - -#define XFS_BMAP_TRACE_DELETE(d,ip,i,c,w) \ - xfs_bmap_trace_delete(__func__,d,ip,i,c,w) -#define XFS_BMAP_TRACE_INSERT(d,ip,i,c,r1,r2,w) \ - xfs_bmap_trace_insert(__func__,d,ip,i,c,r1,r2,w) -#define XFS_BMAP_TRACE_POST_UPDATE(d,ip,i,w) \ - xfs_bmap_trace_post_update(__func__,d,ip,i,w) -#define XFS_BMAP_TRACE_PRE_UPDATE(d,ip,i,w) \ - xfs_bmap_trace_pre_update(__func__,d,ip,i,w) -#else -#define XFS_BMAP_TRACE_DELETE(d,ip,i,c,w) -#define XFS_BMAP_TRACE_INSERT(d,ip,i,c,r1,r2,w) -#define XFS_BMAP_TRACE_POST_UPDATE(d,ip,i,w) -#define XFS_BMAP_TRACE_PRE_UPDATE(d,ip,i,w) -#endif /* XFS_BMAP_TRACE */ - /* * Compute the worst-case number of indirect blocks that will be used * for ip's delayed extent of length "len". @@ -363,18 +299,6 @@ xfs_bmap_validate_ret( #define xfs_bmap_validate_ret(bno,len,flags,mval,onmap,nmap) #endif /* DEBUG */ -#if defined(XFS_RW_TRACE) -STATIC void -xfs_bunmap_trace( - xfs_inode_t *ip, - xfs_fileoff_t bno, - xfs_filblks_t len, - int flags, - inst_t *ra); -#else -#define xfs_bunmap_trace(ip, bno, len, flags, ra) -#endif /* XFS_RW_TRACE */ - STATIC int xfs_bmap_count_tree( xfs_mount_t *mp, @@ -398,6 +322,54 @@ xfs_bmap_disk_count_leaves( int numrecs, int *count); + +STATIC void +xfs_bmap_trace_insert( + const char *fname, /* function name */ + char *desc, /* operation description */ + xfs_inode_t *ip, /* incore inode pointer */ + xfs_extnum_t idx, /* index of entry(entries) inserted */ + xfs_extnum_t cnt, /* count of entries inserted, 1 or 2 */ + xfs_bmbt_irec_t *r1, /* inserted record 1 */ + xfs_bmbt_irec_t *r2, /* inserted record 2 or null */ + int whichfork) /* data or attr fork */ +{ + trace_xfs_bmap(XFS_BMAP_KTRACE_INSERT, fname, desc, ip, idx, + r1, r2, whichfork); +} + +STATIC void +xfs_bmap_trace( + int op, + const char *fname, /* function name */ + char *desc, /* operation description */ + xfs_inode_t *ip, /* incore inode pointer */ + xfs_extnum_t idx, /* index of entry(entries) deleted */ + xfs_extnum_t cnt, /* count of entries deleted, 1 or 2 */ + int whichfork) /* data or attr fork */ +{ + xfs_ifork_t *ifp = XFS_IFORK_PTR(ip, whichfork); + xfs_bmbt_irec_t r1; + xfs_bmbt_irec_t r2; + + xfs_bmbt_get_all(xfs_iext_get_ext(ifp, idx), &r1); + if (cnt == 2) + xfs_bmbt_get_all(xfs_iext_get_ext(ifp, idx + 1), &r2); + + trace_xfs_bmap(op, fname, desc, ip, idx, &r1, + cnt == 2 ? &r2 : NULL, whichfork); +} + +#define XFS_BMAP_TRACE_INSERT(d,ip,i,c,r1,r2,w) \ + xfs_bmap_trace_insert(__func__,d,ip,i,c,r1,r2,w) +#define XFS_BMAP_TRACE_DELETE(d,ip,i,c,w) \ + xfs_bmap_trace(XFS_BMAP_KTRACE_DELETE, __func__,d,ip,i,c,w) +#define XFS_BMAP_TRACE_POST_UPDATE(d,ip,i,w) \ + xfs_bmap_trace(XFS_BMAP_KTRACE_POST_UP, __func__,d,ip,i,1,w) +#define XFS_BMAP_TRACE_PRE_UPDATE(d,ip,i,w) \ + xfs_bmap_trace(XFS_BMAP_KTRACE_PRE_UP, __func__,d,ip,i,1,w) + + /* * Bmap internal routines. */ @@ -3800,158 +3772,6 @@ xfs_bmap_search_extents( return ep; } - -#ifdef XFS_BMAP_TRACE -ktrace_t *xfs_bmap_trace_buf; - -/* - * Add a bmap trace buffer entry. Base routine for the others. - */ -STATIC void -xfs_bmap_trace_addentry( - int opcode, /* operation */ - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(ies) */ - xfs_extnum_t cnt, /* count of entries, 1 or 2 */ - xfs_bmbt_rec_host_t *r1, /* first record */ - xfs_bmbt_rec_host_t *r2, /* second record or null */ - int whichfork) /* data or attr fork */ -{ - xfs_bmbt_rec_host_t tr2; - - ASSERT(cnt == 1 || cnt == 2); - ASSERT(r1 != NULL); - if (cnt == 1) { - ASSERT(r2 == NULL); - r2 = &tr2; - memset(&tr2, 0, sizeof(tr2)); - } else - ASSERT(r2 != NULL); - ktrace_enter(xfs_bmap_trace_buf, - (void *)(__psint_t)(opcode | (whichfork << 16)), - (void *)fname, (void *)desc, (void *)ip, - (void *)(__psint_t)idx, - (void *)(__psint_t)cnt, - (void *)(__psunsigned_t)(ip->i_ino >> 32), - (void *)(__psunsigned_t)(unsigned)ip->i_ino, - (void *)(__psunsigned_t)(r1->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l0), - (void *)(__psunsigned_t)(r1->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l1), - (void *)(__psunsigned_t)(r2->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l0), - (void *)(__psunsigned_t)(r2->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l1) - ); - ASSERT(ip->i_xtrace); - ktrace_enter(ip->i_xtrace, - (void *)(__psint_t)(opcode | (whichfork << 16)), - (void *)fname, (void *)desc, (void *)ip, - (void *)(__psint_t)idx, - (void *)(__psint_t)cnt, - (void *)(__psunsigned_t)(ip->i_ino >> 32), - (void *)(__psunsigned_t)(unsigned)ip->i_ino, - (void *)(__psunsigned_t)(r1->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l0), - (void *)(__psunsigned_t)(r1->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r1->l1), - (void *)(__psunsigned_t)(r2->l0 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l0), - (void *)(__psunsigned_t)(r2->l1 >> 32), - (void *)(__psunsigned_t)(unsigned)(r2->l1) - ); -} - -/* - * Add bmap trace entry prior to a call to xfs_iext_remove. - */ -STATIC void -xfs_bmap_trace_delete( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) deleted */ - xfs_extnum_t cnt, /* count of entries deleted, 1 or 2 */ - int whichfork) /* data or attr fork */ -{ - xfs_ifork_t *ifp; /* inode fork pointer */ - - ifp = XFS_IFORK_PTR(ip, whichfork); - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_DELETE, fname, desc, ip, idx, - cnt, xfs_iext_get_ext(ifp, idx), - cnt == 2 ? xfs_iext_get_ext(ifp, idx + 1) : NULL, - whichfork); -} - -/* - * Add bmap trace entry prior to a call to xfs_iext_insert, or - * reading in the extents list from the disk (in the btree). - */ -STATIC void -xfs_bmap_trace_insert( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry(entries) inserted */ - xfs_extnum_t cnt, /* count of entries inserted, 1 or 2 */ - xfs_bmbt_irec_t *r1, /* inserted record 1 */ - xfs_bmbt_irec_t *r2, /* inserted record 2 or null */ - int whichfork) /* data or attr fork */ -{ - xfs_bmbt_rec_host_t tr1; /* compressed record 1 */ - xfs_bmbt_rec_host_t tr2; /* compressed record 2 if needed */ - - xfs_bmbt_set_all(&tr1, r1); - if (cnt == 2) { - ASSERT(r2 != NULL); - xfs_bmbt_set_all(&tr2, r2); - } else { - ASSERT(cnt == 1); - ASSERT(r2 == NULL); - } - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_INSERT, fname, desc, ip, idx, - cnt, &tr1, cnt == 2 ? &tr2 : NULL, whichfork); -} - -/* - * Add bmap trace entry after updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_post_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry updated */ - int whichfork) /* data or attr fork */ -{ - xfs_ifork_t *ifp; /* inode fork pointer */ - - ifp = XFS_IFORK_PTR(ip, whichfork); - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_POST_UP, fname, desc, ip, idx, - 1, xfs_iext_get_ext(ifp, idx), NULL, whichfork); -} - -/* - * Add bmap trace entry prior to updating an extent record in place. - */ -STATIC void -xfs_bmap_trace_pre_update( - const char *fname, /* function name */ - char *desc, /* operation description */ - xfs_inode_t *ip, /* incore inode pointer */ - xfs_extnum_t idx, /* index of entry to be updated */ - int whichfork) /* data or attr fork */ -{ - xfs_ifork_t *ifp; /* inode fork pointer */ - - ifp = XFS_IFORK_PTR(ip, whichfork); - xfs_bmap_trace_addentry(XFS_BMAP_KTRACE_PRE_UP, fname, desc, ip, idx, 1, - xfs_iext_get_ext(ifp, idx), NULL, whichfork); -} -#endif /* XFS_BMAP_TRACE */ - /* * Compute the worst-case number of indirect blocks that will be used * for ip's delayed extent of length "len". @@ -3983,37 +3803,6 @@ xfs_bmap_worst_indlen( return rval; } -#if defined(XFS_RW_TRACE) -STATIC void -xfs_bunmap_trace( - xfs_inode_t *ip, - xfs_fileoff_t bno, - xfs_filblks_t len, - int flags, - inst_t *ra) -{ - if (ip->i_rwtrace == NULL) - return; - ktrace_enter(ip->i_rwtrace, - (void *)(__psint_t)XFS_BUNMAP, - (void *)ip, - (void *)(__psint_t)((ip->i_d.di_size >> 32) & 0xffffffff), - (void *)(__psint_t)(ip->i_d.di_size & 0xffffffff), - (void *)(__psint_t)(((xfs_dfiloff_t)bno >> 32) & 0xffffffff), - (void *)(__psint_t)((xfs_dfiloff_t)bno & 0xffffffff), - (void *)(__psint_t)len, - (void *)(__psint_t)flags, - (void *)(unsigned long)current_cpu(), - (void *)ra, - (void *)0, - (void *)0, - (void *)0, - (void *)0, - (void *)0, - (void *)0); -} -#endif - /* * Convert inode from non-attributed to attributed. * Must not be in a transaction, ip must not be locked. @@ -4702,7 +4491,7 @@ error0: return XFS_ERROR(EFSCORRUPTED); } -#ifdef XFS_BMAP_TRACE +#ifdef DEBUG /* * Add bmap trace insert entries for all the contents of the extent records. */ @@ -4727,9 +4516,7 @@ xfs_bmap_trace_exlist( whichfork); } } -#endif -#ifdef DEBUG /* * Validate that the bmbt_irecs being returned from bmapi are valid * given the callers original parameters. Specifically check the @@ -5478,7 +5265,8 @@ xfs_bunmapi( int rsvd; /* OK to allocate reserved blocks */ xfs_fsblock_t sum; - xfs_bunmap_trace(ip, bno, len, flags, (inst_t *)__return_address); + xfs_bunmap_trace(ip, bno, len, flags); + whichfork = (flags & XFS_BMAPI_ATTRFORK) ? XFS_ATTR_FORK : XFS_DATA_FORK; ifp = XFS_IFORK_PTR(ip, whichfork); Index: linux-2.6/fs/xfs/xfs_bmap.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap.h +++ linux-2.6/fs/xfs/xfs_bmap.h @@ -95,6 +95,21 @@ typedef struct xfs_bmap_free /* need write cache flushing and no */ /* additional allocation alignments */ +#define XFS_BMAPI_FLAGS \ + { XFS_BMAPI_WRITE, "WRITE" }, \ + { XFS_BMAPI_DELAY, "DELAY" }, \ + { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ + { XFS_BMAPI_METADATA, "METADATA" }, \ + { XFS_BMAPI_EXACT, "EXACT" }, \ + { XFS_BMAPI_ATTRFORK, "ATTRFORK" }, \ + { XFS_BMAPI_ASYNC, "ASYNC" }, \ + { XFS_BMAPI_RSVBLOCKS, "RSVBLOCKS" }, \ + { XFS_BMAPI_PREALLOC, "PREALLOC" }, \ + { XFS_BMAPI_IGSTATE, "IGSTATE" }, \ + { XFS_BMAPI_CONTIG, "CONTIG" }, \ + { XFS_BMAPI_CONVERT, "CONVERT" } + + static inline int xfs_bmapi_aflag(int w) { return (w == XFS_ATTR_FORK ? XFS_BMAPI_ATTRFORK : 0); @@ -135,7 +150,6 @@ typedef struct xfs_bmalloca { char conv; /* overwriting unwritten extents */ } xfs_bmalloca_t; -#if defined(__KERNEL__) && defined(XFS_BMAP_TRACE) /* * Trace operations for bmap extent tracing */ @@ -144,13 +158,18 @@ typedef struct xfs_bmalloca { #define XFS_BMAP_KTRACE_PRE_UP 3 #define XFS_BMAP_KTRACE_POST_UP 4 -#define XFS_BMAP_TRACE_SIZE 4096 /* size of global trace buffer */ -#define XFS_BMAP_KTRACE_SIZE 32 /* size of per-inode trace buffer */ -extern ktrace_t *xfs_bmap_trace_buf; +#define XFS_BMAP_KTRACE_TYPES \ + { XFS_BMAP_KTRACE_DELETE, "delete" }, \ + { XFS_BMAP_KTRACE_INSERT, "insert" }, \ + { XFS_BMAP_KTRACE_PRE_UP, "pre" }, \ + { XFS_BMAP_KTRACE_POST_UP, "post"} /* * Add bmap trace insert entries for all the contents of the extent list. + * + * Quite excessive tracing. Only do this for debug builds. */ +#if defined(__KERNEL) && defined(DEBUG) void xfs_bmap_trace_exlist( const char *fname, /* function name */ @@ -159,12 +178,9 @@ xfs_bmap_trace_exlist( int whichfork); /* data or attr fork */ #define XFS_BMAP_TRACE_EXLIST(ip,c,w) \ xfs_bmap_trace_exlist(__func__,ip,c,w) - -#else /* __KERNEL__ && XFS_BMAP_TRACE */ - +#else #define XFS_BMAP_TRACE_EXLIST(ip,c,w) - -#endif /* __KERNEL__ && XFS_BMAP_TRACE */ +#endif /* * Convert inode from non-attributed to attributed. Index: linux-2.6/fs/xfs/xfs_bmap_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap_btree.c +++ linux-2.6/fs/xfs/xfs_bmap_btree.c @@ -779,12 +779,6 @@ xfs_bmbt_trace_enter( (void *)a0, (void *)a1, (void *)a2, (void *)a3, (void *)a4, (void *)a5, (void *)a6, (void *)a7, (void *)a8, (void *)a9, (void *)a10); - ktrace_enter(ip->i_btrace, - (void *)((__psint_t)type | (whichfork << 8) | (line << 16)), - (void *)func, (void *)s, (void *)ip, (void *)cur, - (void *)a0, (void *)a1, (void *)a2, (void *)a3, - (void *)a4, (void *)a5, (void *)a6, (void *)a7, - (void *)a8, (void *)a9, (void *)a10); } STATIC void Index: linux-2.6/fs/xfs/xfs_buf_item.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_buf_item.c +++ linux-2.6/fs/xfs/xfs_buf_item.c @@ -29,6 +29,7 @@ #include "xfs_buf_item.h" #include "xfs_trans_priv.h" #include "xfs_error.h" +#include "xfs_trace.h" kmem_zone_t *xfs_buf_item_zone; @@ -356,7 +357,6 @@ xfs_buf_item_pin( ASSERT((bip->bli_flags & XFS_BLI_LOGGED) || (bip->bli_flags & XFS_BLI_STALE)); xfs_buf_item_trace("PIN", bip); - xfs_buftrace("XFS_PIN", bp); xfs_bpin(bp); } @@ -384,7 +384,6 @@ xfs_buf_item_unpin( ASSERT(XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *) == bip); ASSERT(atomic_read(&bip->bli_refcount) > 0); xfs_buf_item_trace("UNPIN", bip); - xfs_buftrace("XFS_UNPIN", bp); freed = atomic_dec_and_test(&bip->bli_refcount); ailp = bip->bli_item.li_ailp; @@ -396,7 +395,7 @@ xfs_buf_item_unpin( ASSERT(XFS_BUF_ISSTALE(bp)); ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); xfs_buf_item_trace("UNPIN STALE", bip); - xfs_buftrace("XFS_UNPIN STALE", bp); + xfs_buftrace(bp, "item_unpin_stale"); /* * If we get called here because of an IO error, we may * or may not have the item on the AIL. xfs_trans_ail_delete() @@ -441,7 +440,7 @@ xfs_buf_item_unpin_remove( (bip->bli_flags & XFS_BLI_STALE)) { ASSERT(XFS_BUF_VALUSEMA(bip->bli_buf) <= 0); xfs_buf_item_trace("UNPIN REMOVE", bip); - xfs_buftrace("XFS_UNPIN_REMOVE", bp); + xfs_buftrace(bp, "item_unpin_remove"); /* * yes -- clear the xaction descriptor in-use flag * and free the chunk if required. We can safely @@ -524,7 +523,7 @@ xfs_buf_item_unlock( uint hold; bp = bip->bli_buf; - xfs_buftrace("XFS_UNLOCK", bp); + xfs_buftrace(bp, "item_unlock"); /* * Clear the buffer's association with this transaction. @@ -738,9 +737,6 @@ xfs_buf_item_init( bip->bli_format.blf_blkno = (__int64_t)XFS_BUF_ADDR(bp); bip->bli_format.blf_len = (ushort)BTOBB(XFS_BUF_COUNT(bp)); bip->bli_format.blf_map_size = map_size; -#ifdef XFS_BLI_TRACE - bip->bli_trace = ktrace_alloc(XFS_BLI_TRACE_SIZE, KM_NOFS); -#endif #ifdef XFS_TRANS_DEBUG /* @@ -878,9 +874,6 @@ xfs_buf_item_free( kmem_free(bip->bli_logged); #endif /* XFS_TRANS_DEBUG */ -#ifdef XFS_BLI_TRACE - ktrace_free(bip->bli_trace); -#endif kmem_zone_free(xfs_buf_item_zone, bip); } @@ -897,7 +890,7 @@ xfs_buf_item_relse( { xfs_buf_log_item_t *bip; - xfs_buftrace("XFS_RELSE", bp); + xfs_buftrace(bp, "item_relse"); bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); XFS_BUF_SET_FSPRIVATE(bp, bip->bli_item.li_bio_list); if ((XFS_BUF_FSPRIVATE(bp, void *) == NULL) && @@ -994,7 +987,7 @@ xfs_buf_iodone_callbacks( if (XFS_FORCED_SHUTDOWN(mp)) { ASSERT(XFS_BUF_TARGET(bp) == mp->m_ddev_targp); XFS_BUF_SUPER_STALE(bp); - xfs_buftrace("BUF_IODONE_CB", bp); + xfs_buftrace(bp, "item_iodone"); xfs_buf_do_callbacks(bp, lip); XFS_BUF_SET_FSPRIVATE(bp, NULL); XFS_BUF_CLR_IODONE_FUNC(bp); @@ -1030,7 +1023,7 @@ xfs_buf_iodone_callbacks( XFS_BUF_SET_START(bp); } ASSERT(XFS_BUF_IODONE_FUNC(bp)); - xfs_buftrace("BUF_IODONE ASYNC", bp); + xfs_buftrace(bp, "item_iodone_async"); xfs_buf_relse(bp); } else { /* @@ -1054,7 +1047,7 @@ xfs_buf_iodone_callbacks( return; } #ifdef XFSERRORDEBUG - xfs_buftrace("XFS BUFCB NOERR", bp); + xfs_buftrace(bp, "item_iodone_noerror"); #endif xfs_buf_do_callbacks(bp, lip); XFS_BUF_SET_FSPRIVATE(bp, NULL); @@ -1081,7 +1074,7 @@ xfs_buf_error_relse( XFS_BUF_DONE(bp); XFS_BUF_UNDELAYWRITE(bp); XFS_BUF_ERROR(bp,0); - xfs_buftrace("BUF_ERROR_RELSE", bp); + xfs_buftrace(bp, "item_error_relse"); if (! XFS_FORCED_SHUTDOWN(mp)) xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR); /* @@ -1128,34 +1121,3 @@ xfs_buf_iodone( xfs_trans_ail_delete(ailp, (xfs_log_item_t *)bip); xfs_buf_item_free(bip); } - -#if defined(XFS_BLI_TRACE) -void -xfs_buf_item_trace( - char *id, - xfs_buf_log_item_t *bip) -{ - xfs_buf_t *bp; - ASSERT(bip->bli_trace != NULL); - - bp = bip->bli_buf; - ktrace_enter(bip->bli_trace, - (void *)id, - (void *)bip->bli_buf, - (void *)((unsigned long)bip->bli_flags), - (void *)((unsigned long)bip->bli_recur), - (void *)((unsigned long)atomic_read(&bip->bli_refcount)), - (void *)((unsigned long) - (0xFFFFFFFF & XFS_BUF_ADDR(bp) >> 32)), - (void *)((unsigned long)(0xFFFFFFFF & XFS_BUF_ADDR(bp))), - (void *)((unsigned long)XFS_BUF_COUNT(bp)), - (void *)((unsigned long)XFS_BUF_BFLAGS(bp)), - XFS_BUF_FSPRIVATE(bp, void *), - XFS_BUF_FSPRIVATE2(bp, void *), - (void *)(unsigned long)XFS_BUF_ISPINNED(bp), - (void *)XFS_BUF_IODONE_FUNC(bp), - (void *)((unsigned long)(XFS_BUF_VALUSEMA(bp))), - (void *)bip->bli_item.li_desc, - (void *)((unsigned long)bip->bli_item.li_flags)); -} -#endif /* XFS_BLI_TRACE */ Index: linux-2.6/fs/xfs/xfs_buf_item.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_buf_item.h +++ linux-2.6/fs/xfs/xfs_buf_item.h @@ -70,22 +70,21 @@ typedef struct xfs_buf_log_format_t { #define XFS_BLI_INODE_ALLOC_BUF 0x10 #define XFS_BLI_STALE_INODE 0x20 +#define XFS_BLI_FLAGS \ + { XFS_BLI_HOLD, "HOLD" }, \ + { XFS_BLI_DIRTY, "DIRTY" }, \ + { XFS_BLI_STALE, "STALE" }, \ + { XFS_BLI_LOGGED, "LOGGED" }, \ + { XFS_BLI_INODE_ALLOC_BUF, "INODE_ALLOC" }, \ + { XFS_BLI_STALE_INODE, "STALE_INODE" } + #ifdef __KERNEL__ struct xfs_buf; -struct ktrace; struct xfs_mount; struct xfs_buf_log_item; -#if defined(XFS_BLI_TRACE) -#define XFS_BLI_TRACE_SIZE 32 - -void xfs_buf_item_trace(char *, struct xfs_buf_log_item *); -#else -#define xfs_buf_item_trace(id, bip) -#endif - /* * This is the in core log item structure used to track information * needed to log buffers. It tracks how many times the lock has been @@ -97,9 +96,6 @@ typedef struct xfs_buf_log_item { unsigned int bli_flags; /* misc flags */ unsigned int bli_recur; /* lock recursion count */ atomic_t bli_refcount; /* cnt of tp refs */ -#ifdef XFS_BLI_TRACE - struct ktrace *bli_trace; /* event trace buf */ -#endif #ifdef XFS_TRANS_DEBUG char *bli_orig; /* original buffer copy */ char *bli_logged; /* bytes logged (bitmap) */ Index: linux-2.6/fs/xfs/xfs_dir2_trace.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_trace.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include "xfs.h" -#include "xfs_fs.h" -#include "xfs_types.h" -#include "xfs_inum.h" -#include "xfs_dir2.h" -#include "xfs_da_btree.h" -#include "xfs_bmap_btree.h" -#include "xfs_dir2_sf.h" -#include "xfs_attr_sf.h" -#include "xfs_dinode.h" -#include "xfs_inode.h" -#include "xfs_dir2_trace.h" - -#ifdef XFS_DIR2_TRACE -ktrace_t *xfs_dir2_trace_buf; - -/* - * Enter something in the trace buffers. - */ -static void -xfs_dir2_trace_enter( - xfs_inode_t *dp, - int type, - char *where, - char *name, - int namelen, - void *a0, - void *a1, - void *a2, - void *a3, - void *a4, - void *a5, - void *a6, - void *a7) -{ - void *n[5]; - - ASSERT(xfs_dir2_trace_buf); - ASSERT(dp->i_dir_trace); - if (name) - memcpy(n, name, min((int)sizeof(n), namelen)); - else - memset((char *)n, 0, sizeof(n)); - ktrace_enter(xfs_dir2_trace_buf, - (void *)(long)type, (void *)where, - (void *)a0, (void *)a1, (void *)a2, (void *)a3, - (void *)a4, (void *)a5, (void *)a6, (void *)a7, - (void *)(long)namelen, - (void *)n[0], (void *)n[1], (void *)n[2], - (void *)n[3], (void *)n[4]); - ktrace_enter(dp->i_dir_trace, - (void *)(long)type, (void *)where, - (void *)a0, (void *)a1, (void *)a2, (void *)a3, - (void *)a4, (void *)a5, (void *)a6, (void *)a7, - (void *)(long)namelen, - (void *)n[0], (void *)n[1], (void *)n[2], - (void *)n[3], (void *)n[4]); -} - -void -xfs_dir2_trace_args( - char *where, - xfs_da_args_t *args) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - NULL, NULL); -} - -void -xfs_dir2_trace_args_b( - char *where, - xfs_da_args_t *args, - xfs_dabuf_t *bp) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_B, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(bp ? bp->bps[0] : NULL), NULL); -} - -void -xfs_dir2_trace_args_bb( - char *where, - xfs_da_args_t *args, - xfs_dabuf_t *lbp, - xfs_dabuf_t *dbp) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BB, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(lbp ? lbp->bps[0] : NULL), - (void *)(dbp ? dbp->bps[0] : NULL)); -} - -void -xfs_dir2_trace_args_bibii( - char *where, - xfs_da_args_t *args, - xfs_dabuf_t *bs, - int ss, - xfs_dabuf_t *bd, - int sd, - int c) -{ - xfs_buf_t *bpbs = bs ? bs->bps[0] : NULL; - xfs_buf_t *bpbd = bd ? bd->bps[0] : NULL; - - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BIBII, where, - (char *)args->name, (int)args->namelen, - (void *)args->dp, (void *)args->trans, - (void *)bpbs, (void *)(long)ss, (void *)bpbd, (void *)(long)sd, - (void *)(long)c, NULL); -} - -void -xfs_dir2_trace_args_db( - char *where, - xfs_da_args_t *args, - xfs_dir2_db_t db, - xfs_dabuf_t *bp) -{ - xfs_buf_t *dbp = bp ? bp->bps[0] : NULL; - - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_DB, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(long)db, (void *)dbp); -} - -void -xfs_dir2_trace_args_i( - char *where, - xfs_da_args_t *args, - xfs_ino_t i) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_I, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)((unsigned long)(i >> 32)), - (void *)((unsigned long)(i & 0xFFFFFFFF))); -} - -void -xfs_dir2_trace_args_s( - char *where, - xfs_da_args_t *args, - int s) -{ - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_S, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(long)s, NULL); -} - -void -xfs_dir2_trace_args_sb( - char *where, - xfs_da_args_t *args, - int s, - xfs_dabuf_t *bp) -{ - xfs_buf_t *dbp = bp ? bp->bps[0] : NULL; - - xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_SB, where, - (char *)args->name, (int)args->namelen, - (void *)(unsigned long)args->hashval, - (void *)((unsigned long)(args->inumber >> 32)), - (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), - (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), - (void *)(long)s, (void *)dbp); -} -#endif /* XFS_DIR2_TRACE */ Index: linux-2.6/fs/xfs/xfs_dir2_trace.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_trace.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2000,2005 Silicon Graphics, Inc. - * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef __XFS_DIR2_TRACE_H__ -#define __XFS_DIR2_TRACE_H__ - -/* - * Tracing for xfs v2 directories. - */ - -#if defined(XFS_DIR2_TRACE) - -struct ktrace; -struct xfs_dabuf; -struct xfs_da_args; - -#define XFS_DIR2_GTRACE_SIZE 4096 /* global buffer */ -#define XFS_DIR2_KTRACE_SIZE 32 /* per-inode buffer */ -extern struct ktrace *xfs_dir2_trace_buf; - -#define XFS_DIR2_KTRACE_ARGS 1 /* args only */ -#define XFS_DIR2_KTRACE_ARGS_B 2 /* args + buffer */ -#define XFS_DIR2_KTRACE_ARGS_BB 3 /* args + 2 buffers */ -#define XFS_DIR2_KTRACE_ARGS_DB 4 /* args, db, buffer */ -#define XFS_DIR2_KTRACE_ARGS_I 5 /* args, inum */ -#define XFS_DIR2_KTRACE_ARGS_S 6 /* args, int */ -#define XFS_DIR2_KTRACE_ARGS_SB 7 /* args, int, buffer */ -#define XFS_DIR2_KTRACE_ARGS_BIBII 8 /* args, buf/int/buf/int/int */ - -void xfs_dir2_trace_args(char *where, struct xfs_da_args *args); -void xfs_dir2_trace_args_b(char *where, struct xfs_da_args *args, - struct xfs_dabuf *bp); -void xfs_dir2_trace_args_bb(char *where, struct xfs_da_args *args, - struct xfs_dabuf *lbp, struct xfs_dabuf *dbp); -void xfs_dir2_trace_args_bibii(char *where, struct xfs_da_args *args, - struct xfs_dabuf *bs, int ss, - struct xfs_dabuf *bd, int sd, int c); -void xfs_dir2_trace_args_db(char *where, struct xfs_da_args *args, - xfs_dir2_db_t db, struct xfs_dabuf *bp); -void xfs_dir2_trace_args_i(char *where, struct xfs_da_args *args, xfs_ino_t i); -void xfs_dir2_trace_args_s(char *where, struct xfs_da_args *args, int s); -void xfs_dir2_trace_args_sb(char *where, struct xfs_da_args *args, int s, - struct xfs_dabuf *bp); - -#else /* XFS_DIR2_TRACE */ - -#define xfs_dir2_trace_args(where, args) -#define xfs_dir2_trace_args_b(where, args, bp) -#define xfs_dir2_trace_args_bb(where, args, lbp, dbp) -#define xfs_dir2_trace_args_bibii(where, args, bs, ss, bd, sd, c) -#define xfs_dir2_trace_args_db(where, args, db, bp) -#define xfs_dir2_trace_args_i(where, args, i) -#define xfs_dir2_trace_args_s(where, args, s) -#define xfs_dir2_trace_args_sb(where, args, s, bp) - -#endif /* XFS_DIR2_TRACE */ - -#endif /* __XFS_DIR2_TRACE_H__ */ Index: linux-2.6/fs/xfs/xfs_filestream.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_filestream.c +++ linux-2.6/fs/xfs/xfs_filestream.c @@ -34,6 +34,7 @@ #include "xfs_utils.h" #include "xfs_mru_cache.h" #include "xfs_filestream.h" +#include "xfs_trace.h" #ifdef XFS_FILESTREAMS_TRACE @@ -394,9 +395,7 @@ xfs_filestream_init(void) item_zone = kmem_zone_init(sizeof(fstrm_item_t), "fstrm_item"); if (!item_zone) return -ENOMEM; -#ifdef XFS_FILESTREAMS_TRACE - xfs_filestreams_trace_buf = ktrace_alloc(XFS_FSTRM_KTRACE_SIZE, KM_NOFS); -#endif + return 0; } @@ -407,9 +406,6 @@ xfs_filestream_init(void) void xfs_filestream_uninit(void) { -#ifdef XFS_FILESTREAMS_TRACE - ktrace_free(xfs_filestreams_trace_buf); -#endif kmem_zone_destroy(item_zone); } Index: linux-2.6/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iget.c +++ linux-2.6/fs/xfs/xfs_iget.c @@ -43,7 +43,7 @@ #include "xfs_inode_item.h" #include "xfs_bmap.h" #include "xfs_btree_trace.h" -#include "xfs_dir2_trace.h" +#include "xfs_trace.h" /* @@ -85,27 +85,6 @@ xfs_inode_alloc( ip->i_new_size = 0; /* - * Initialize inode's trace buffers. - */ -#ifdef XFS_INODE_TRACE - ip->i_trace = ktrace_alloc(INODE_TRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_BMAP_TRACE - ip->i_xtrace = ktrace_alloc(XFS_BMAP_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_BTREE_TRACE - ip->i_btrace = ktrace_alloc(XFS_BMBT_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_RW_TRACE - ip->i_rwtrace = ktrace_alloc(XFS_RW_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_ILOCK_TRACE - ip->i_lock_trace = ktrace_alloc(XFS_ILOCK_KTRACE_SIZE, KM_NOFS); -#endif -#ifdef XFS_DIR2_TRACE - ip->i_dir_trace = ktrace_alloc(XFS_DIR2_KTRACE_SIZE, KM_NOFS); -#endif - /* * Now initialise the VFS inode. We do this after the xfs_inode * initialisation as internal failures will result in ->destroy_inode * being called and that will pass down through the reclaim path and @@ -159,7 +138,7 @@ xfs_iget_cache_hit( goto out_error; } - xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); + xfs_itrace_tag(ip, "xfs_iget.alloc"); /* * We need to re-initialise the VFS inode as it has been @@ -211,8 +190,8 @@ xfs_iget_cache_hit( xfs_ilock(ip, lock_flags); xfs_iflags_clear(ip, XFS_ISTALE); - xfs_itrace_exit_tag(ip, "xfs_iget.found"); XFS_STATS_INC(xs_ig_found); + xfs_itrace_tag(ip, "xfs_iget.found"); return 0; out_error: @@ -245,7 +224,7 @@ xfs_iget_cache_miss( if (error) goto out_destroy; - xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); + xfs_itrace_entry(ip); if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { error = ENOENT; @@ -515,24 +494,6 @@ xfs_ireclaim( if (ip->i_afp) xfs_idestroy_fork(ip, XFS_ATTR_FORK); -#ifdef XFS_INODE_TRACE - ktrace_free(ip->i_trace); -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(ip->i_xtrace); -#endif -#ifdef XFS_BTREE_TRACE - ktrace_free(ip->i_btrace); -#endif -#ifdef XFS_RW_TRACE - ktrace_free(ip->i_rwtrace); -#endif -#ifdef XFS_ILOCK_TRACE - ktrace_free(ip->i_lock_trace); -#endif -#ifdef XFS_DIR2_TRACE - ktrace_free(ip->i_dir_trace); -#endif if (ip->i_itemp) { /* * Only if we are shutting down the fs will we see an @@ -656,7 +617,7 @@ xfs_ilock( else if (lock_flags & XFS_ILOCK_SHARED) mraccess_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); - xfs_ilock_trace(ip, 1, lock_flags, (inst_t *)__return_address); + trace_xfs_ilock(ip, "lock", lock_flags, _RET_IP_); } /* @@ -701,7 +662,7 @@ xfs_ilock_nowait( if (!mrtryaccess(&ip->i_lock)) goto out_undo_iolock; } - xfs_ilock_trace(ip, 2, lock_flags, (inst_t *)__return_address); + trace_xfs_ilock(ip, "lock_nowait", lock_flags, _RET_IP_); return 1; out_undo_iolock: @@ -763,7 +724,7 @@ xfs_iunlock( xfs_trans_unlocked_item(ip->i_itemp->ili_item.li_ailp, (xfs_log_item_t*)(ip->i_itemp)); } - xfs_ilock_trace(ip, 3, lock_flags, (inst_t *)__return_address); + trace_xfs_ilock(ip, "unlock", lock_flags, _RET_IP_); } /* @@ -782,6 +743,8 @@ xfs_ilock_demote( mrdemote(&ip->i_lock); if (lock_flags & XFS_IOLOCK_EXCL) mrdemote(&ip->i_iolock); + + trace_xfs_ilock(ip, "demote", lock_flags, _RET_IP_); } #ifdef DEBUG @@ -812,52 +775,3 @@ xfs_isilocked( return 1; } #endif - -#ifdef XFS_INODE_TRACE - -#define KTRACE_ENTER(ip, vk, s, line, ra) \ - ktrace_enter((ip)->i_trace, \ -/* 0 */ (void *)(__psint_t)(vk), \ -/* 1 */ (void *)(s), \ -/* 2 */ (void *)(__psint_t) line, \ -/* 3 */ (void *)(__psint_t)atomic_read(&VFS_I(ip)->i_count), \ -/* 4 */ (void *)(ra), \ -/* 5 */ NULL, \ -/* 6 */ (void *)(__psint_t)current_cpu(), \ -/* 7 */ (void *)(__psint_t)current_pid(), \ -/* 8 */ (void *)__return_address, \ -/* 9 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL) - -/* - * Vnode tracing code. - */ -void -_xfs_itrace_entry(xfs_inode_t *ip, const char *func, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_ENTRY, func, 0, ra); -} - -void -_xfs_itrace_exit(xfs_inode_t *ip, const char *func, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_EXIT, func, 0, ra); -} - -void -xfs_itrace_hold(xfs_inode_t *ip, char *file, int line, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_HOLD, file, line, ra); -} - -void -_xfs_itrace_ref(xfs_inode_t *ip, char *file, int line, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_REF, file, line, ra); -} - -void -xfs_itrace_rele(xfs_inode_t *ip, char *file, int line, inst_t *ra) -{ - KTRACE_ENTER(ip, INODE_KTRACE_RELE, file, line, ra); -} -#endif /* XFS_INODE_TRACE */ Index: linux-2.6/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.c +++ linux-2.6/fs/xfs/xfs_inode.c @@ -47,10 +47,10 @@ #include "xfs_rw.h" #include "xfs_error.h" #include "xfs_utils.h" -#include "xfs_dir2_trace.h" #include "xfs_quota.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" kmem_zone_t *xfs_ifork_zone; kmem_zone_t *xfs_inode_zone; @@ -1281,42 +1281,6 @@ xfs_file_last_byte( return last_byte; } -#if defined(XFS_RW_TRACE) -STATIC void -xfs_itrunc_trace( - int tag, - xfs_inode_t *ip, - int flag, - xfs_fsize_t new_size, - xfs_off_t toss_start, - xfs_off_t toss_finish) -{ - if (ip->i_rwtrace == NULL) { - return; - } - - ktrace_enter(ip->i_rwtrace, - (void*)((long)tag), - (void*)ip, - (void*)(unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff), - (void*)(unsigned long)(ip->i_d.di_size & 0xffffffff), - (void*)((long)flag), - (void*)(unsigned long)((new_size >> 32) & 0xffffffff), - (void*)(unsigned long)(new_size & 0xffffffff), - (void*)(unsigned long)((toss_start >> 32) & 0xffffffff), - (void*)(unsigned long)(toss_start & 0xffffffff), - (void*)(unsigned long)((toss_finish >> 32) & 0xffffffff), - (void*)(unsigned long)(toss_finish & 0xffffffff), - (void*)(unsigned long)current_cpu(), - (void*)(unsigned long)current_pid(), - (void*)NULL, - (void*)NULL, - (void*)NULL); -} -#else -#define xfs_itrunc_trace(tag, ip, flag, new_size, toss_start, toss_finish) -#endif - /* * Start the truncation of the file to new_size. The new size * must be smaller than the current size. This routine will @@ -1399,8 +1363,7 @@ xfs_itruncate_start( return 0; } last_byte = xfs_file_last_byte(ip); - xfs_itrunc_trace(XFS_ITRUNC_START, ip, flags, new_size, toss_start, - last_byte); + trace_xfs_itrunc(ip, flags, new_size, toss_start, last_byte, "start"); if (last_byte > toss_start) { if (flags & XFS_ITRUNC_DEFINITE) { xfs_tosspages(ip, toss_start, @@ -1504,7 +1467,8 @@ xfs_itruncate_finish( new_size = 0LL; } first_unmap_block = XFS_B_TO_FSB(mp, (xfs_ufsize_t)new_size); - xfs_itrunc_trace(XFS_ITRUNC_FINISH1, ip, 0, new_size, 0, 0); + trace_xfs_itrunc(ip, 0, new_size, 0, 0, "finish1"); + /* * The first thing we do is set the size to new_size permanently * on disk. This way we don't have to worry about anyone ever @@ -1721,7 +1685,7 @@ xfs_itruncate_finish( ASSERT((new_size != 0) || (fork == XFS_ATTR_FORK) || (ip->i_d.di_nextents == 0)); - xfs_itrunc_trace(XFS_ITRUNC_FINISH2, ip, 0, new_size, 0, 0); + trace_xfs_itrunc(ip, 0, new_size, 0, 0, "finish2"); return 0; } @@ -3242,23 +3206,6 @@ corrupt_out: return XFS_ERROR(EFSCORRUPTED); } - - -#ifdef XFS_ILOCK_TRACE -void -xfs_ilock_trace(xfs_inode_t *ip, int lock, unsigned int lockflags, inst_t *ra) -{ - ktrace_enter(ip->i_lock_trace, - (void *)ip, - (void *)(unsigned long)lock, /* 1 = LOCK, 3=UNLOCK, etc */ - (void *)(unsigned long)lockflags, /* XFS_ILOCK_EXCL etc */ - (void *)ra, /* caller of ilock */ - (void *)(unsigned long)current_cpu(), - (void *)(unsigned long)current_pid(), - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -} -#endif - /* * Return a pointer to the extent record at file index idx. */ Index: linux-2.6/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.h +++ linux-2.6/fs/xfs/xfs_inode.h @@ -213,7 +213,6 @@ typedef struct xfs_icdinode { struct bhv_desc; struct cred; -struct ktrace; struct xfs_buf; struct xfs_bmap_free; struct xfs_bmbt_irec; @@ -222,13 +221,6 @@ struct xfs_mount; struct xfs_trans; struct xfs_dquot; -#if defined(XFS_ILOCK_TRACE) -#define XFS_ILOCK_KTRACE_SIZE 32 -extern void xfs_ilock_trace(struct xfs_inode *, int, unsigned int, inst_t *); -#else -#define xfs_ilock_trace(i,n,f,ra) -#endif - typedef struct dm_attrs_s { __uint32_t da_dmevmask; /* DMIG event mask */ __uint16_t da_dmstate; /* DMIG state info */ @@ -272,26 +264,6 @@ typedef struct xfs_inode { /* VFS inode */ struct inode i_vnode; /* embedded VFS inode */ - - /* Trace buffers per inode. */ -#ifdef XFS_INODE_TRACE - struct ktrace *i_trace; /* general inode trace */ -#endif -#ifdef XFS_BMAP_TRACE - struct ktrace *i_xtrace; /* inode extent list trace */ -#endif -#ifdef XFS_BTREE_TRACE - struct ktrace *i_btrace; /* inode bmap btree trace */ -#endif -#ifdef XFS_RW_TRACE - struct ktrace *i_rwtrace; /* inode read/write trace */ -#endif -#ifdef XFS_ILOCK_TRACE - struct ktrace *i_lock_trace; /* inode lock/unlock trace */ -#endif -#ifdef XFS_DIR2_TRACE - struct ktrace *i_dir_trace; /* inode directory trace */ -#endif } xfs_inode_t; #define XFS_ISIZE(ip) (((ip)->i_d.di_mode & S_IFMT) == S_IFREG) ? \ @@ -424,6 +396,14 @@ static inline void xfs_ifunlock(xfs_inod #define XFS_LOCK_MASK (XFS_IOLOCK_EXCL | XFS_IOLOCK_SHARED \ | XFS_ILOCK_EXCL | XFS_ILOCK_SHARED) +#define XFS_LOCK_FLAGS \ + { XFS_IOLOCK_EXCL, "IOLOCK_EXCL" }, \ + { XFS_IOLOCK_SHARED, "IOLOCK_SHARED" }, \ + { XFS_ILOCK_EXCL, "ILOCK_EXCL" }, \ + { XFS_ILOCK_SHARED, "ILOCK_SHARED" }, \ + { XFS_IUNLOCK_NONOTIFY, "IUNLOCK_NONOTIFY" } + + /* * Flags for lockdep annotations. * @@ -473,6 +453,10 @@ static inline void xfs_ifunlock(xfs_inod #define XFS_ITRUNC_DEFINITE 0x1 #define XFS_ITRUNC_MAYBE 0x2 +#define XFS_ITRUNC_FLAGS \ + { XFS_ITRUNC_DEFINITE, "DEFINITE" }, \ + { XFS_ITRUNC_MAYBE, "MAYBE" } + /* * For multiple groups support: if S_ISGID bit is set in the parent * directory, group of new file is set to that of the parent, and @@ -528,48 +512,31 @@ void xfs_lock_two_inodes(xfs_inode_t *, void xfs_synchronize_atime(xfs_inode_t *); void xfs_mark_inode_dirty_sync(xfs_inode_t *); -#if defined(XFS_INODE_TRACE) - -#define INODE_TRACE_SIZE 16 /* number of trace entries */ #define INODE_KTRACE_ENTRY 1 #define INODE_KTRACE_EXIT 2 #define INODE_KTRACE_HOLD 3 #define INODE_KTRACE_REF 4 #define INODE_KTRACE_RELE 5 -extern void _xfs_itrace_entry(struct xfs_inode *, const char *, inst_t *); -extern void _xfs_itrace_exit(struct xfs_inode *, const char *, inst_t *); -extern void xfs_itrace_hold(struct xfs_inode *, char *, int, inst_t *); -extern void _xfs_itrace_ref(struct xfs_inode *, char *, int, inst_t *); -extern void xfs_itrace_rele(struct xfs_inode *, char *, int, inst_t *); #define xfs_itrace_entry(ip) \ - _xfs_itrace_entry(ip, __func__, (inst_t *)__return_address) + trace_xfs_inode(ip, "entry", _THIS_IP_) #define xfs_itrace_exit(ip) \ - _xfs_itrace_exit(ip, __func__, (inst_t *)__return_address) -#define xfs_itrace_exit_tag(ip, tag) \ - _xfs_itrace_exit(ip, tag, (inst_t *)__return_address) + trace_xfs_inode(ip, "exit", _THIS_IP_) +#define xfs_itrace_tag(ip, tag) \ + trace_xfs_inode((ip), (tag), _THIS_IP_); #define xfs_itrace_ref(ip) \ - _xfs_itrace_ref(ip, __FILE__, __LINE__, (inst_t *)__return_address) - -#else -#define xfs_itrace_entry(a) -#define xfs_itrace_exit(a) -#define xfs_itrace_exit_tag(a, b) -#define xfs_itrace_hold(a, b, c, d) -#define xfs_itrace_ref(a) -#define xfs_itrace_rele(a, b, c, d) -#endif + trace_xfs_inode((ip), "ref", _THIS_IP_); #define IHOLD(ip) \ do { \ ASSERT(atomic_read(&VFS_I(ip)->i_count) > 0) ; \ atomic_inc(&(VFS_I(ip)->i_count)); \ - xfs_itrace_hold((ip), __FILE__, __LINE__, (inst_t *)__return_address); \ + trace_xfs_inode((ip), "hold", _THIS_IP_); \ } while (0) #define IRELE(ip) \ do { \ - xfs_itrace_rele((ip), __FILE__, __LINE__, (inst_t *)__return_address); \ + trace_xfs_inode((ip), "rele", _THIS_IP_); \ iput(VFS_I(ip)); \ } while (0) Index: linux-2.6/fs/xfs/xfs_iomap.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iomap.c +++ linux-2.6/fs/xfs/xfs_iomap.c @@ -47,72 +47,8 @@ #include "xfs_trans_space.h" #include "xfs_utils.h" #include "xfs_iomap.h" +#include "xfs_trace.h" -#if defined(XFS_RW_TRACE) -void -xfs_iomap_enter_trace( - int tag, - xfs_inode_t *ip, - xfs_off_t offset, - ssize_t count) -{ - if (!ip->i_rwtrace) - return; - - ktrace_enter(ip->i_rwtrace, - (void *)((unsigned long)tag), - (void *)ip, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)count), - (void *)((unsigned long)((ip->i_new_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_new_size & 0xffffffff)), - (void *)((unsigned long)current_pid()), - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL, - (void *)NULL); -} - -void -xfs_iomap_map_trace( - int tag, - xfs_inode_t *ip, - xfs_off_t offset, - ssize_t count, - xfs_iomap_t *iomapp, - xfs_bmbt_irec_t *imapp, - int flags) -{ - if (!ip->i_rwtrace) - return; - - ktrace_enter(ip->i_rwtrace, - (void *)((unsigned long)tag), - (void *)ip, - (void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)), - (void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)), - (void *)((unsigned long)((offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(offset & 0xffffffff)), - (void *)((unsigned long)count), - (void *)((unsigned long)flags), - (void *)((unsigned long)((iomapp->iomap_offset >> 32) & 0xffffffff)), - (void *)((unsigned long)(iomapp->iomap_offset & 0xffffffff)), - (void *)((unsigned long)(iomapp->iomap_delta)), - (void *)((unsigned long)(iomapp->iomap_bsize)), - (void *)((unsigned long)(iomapp->iomap_bn)), - (void *)(__psint_t)(imapp->br_startoff), - (void *)((unsigned long)(imapp->br_blockcount)), - (void *)(__psint_t)(imapp->br_startblock)); -} -#else -#define xfs_iomap_enter_trace(tag, io, offset, count) -#define xfs_iomap_map_trace(tag, io, offset, count, iomapp, imapp, flags) -#endif #define XFS_WRITEIO_ALIGN(mp,off) (((off) >> mp->m_writeio_log) \ << mp->m_writeio_log) @@ -187,21 +123,20 @@ xfs_iomap( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); + trace_xfs_iomap(ip, offset, count, flags, NULL, "enter"); + switch (flags & (BMAPI_READ | BMAPI_WRITE | BMAPI_ALLOCATE)) { case BMAPI_READ: - xfs_iomap_enter_trace(XFS_IOMAP_READ_ENTER, ip, offset, count); lockmode = xfs_ilock_map_shared(ip); bmapi_flags = XFS_BMAPI_ENTIRE; break; case BMAPI_WRITE: - xfs_iomap_enter_trace(XFS_IOMAP_WRITE_ENTER, ip, offset, count); lockmode = XFS_ILOCK_EXCL; if (flags & BMAPI_IGNSTATE) bmapi_flags |= XFS_BMAPI_IGSTATE|XFS_BMAPI_ENTIRE; xfs_ilock(ip, lockmode); break; case BMAPI_ALLOCATE: - xfs_iomap_enter_trace(XFS_IOMAP_ALLOC_ENTER, ip, offset, count); lockmode = XFS_ILOCK_SHARED; bmapi_flags = XFS_BMAPI_ENTIRE; @@ -237,8 +172,8 @@ xfs_iomap( if (nimaps && (imap.br_startblock != HOLESTARTBLOCK) && (imap.br_startblock != DELAYSTARTBLOCK)) { - xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, ip, - offset, count, iomapp, &imap, flags); + trace_xfs_iomap(ip, offset, count, flags, + &imap, "map_found"); break; } @@ -250,8 +185,8 @@ xfs_iomap( &imap, &nimaps); } if (!error) { - xfs_iomap_map_trace(XFS_IOMAP_ALLOC_MAP, ip, - offset, count, iomapp, &imap, flags); + trace_xfs_iomap(ip, offset, count, flags, &imap, + "map_allocate"); } iomap_flags = IOMAP_NEW; break; @@ -261,8 +196,8 @@ xfs_iomap( lockmode = 0; if (nimaps && !isnullstartblock(imap.br_startblock)) { - xfs_iomap_map_trace(XFS_IOMAP_WRITE_MAP, ip, - offset, count, iomapp, &imap, flags); + trace_xfs_iomap(ip, offset, count, flags, + &imap, "map_found"); break; } @@ -623,8 +558,7 @@ retry: * delalloc blocks and retry without EOF preallocation. */ if (nimaps == 0) { - xfs_iomap_enter_trace(XFS_IOMAP_WRITE_NOSPACE, - ip, offset, count); + trace_xfs_iomap(ip, offset, count, 0, NULL, "enospc"); if (flushed) return XFS_ERROR(ENOSPC); @@ -837,7 +771,7 @@ xfs_iomap_write_unwritten( int committed; int error; - xfs_iomap_enter_trace(XFS_IOMAP_UNWRITTEN, ip, offset, count); + trace_xfs_iomap(ip, offset, count, 0, NULL, "unwritten"); offset_fsb = XFS_B_TO_FSBT(mp, offset); count_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)offset + count); Index: linux-2.6/fs/xfs/xfs_log.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_log.c +++ linux-2.6/fs/xfs/xfs_log.c @@ -40,6 +40,7 @@ #include "xfs_dinode.h" #include "xfs_inode.h" #include "xfs_rw.h" +#include "xfs_trace.h" kmem_zone_t *xfs_log_ticket_zone; @@ -122,85 +123,6 @@ STATIC void xlog_verify_tail_lsn(xlog_t STATIC int xlog_iclogs_empty(xlog_t *log); -#if defined(XFS_LOG_TRACE) - -#define XLOG_TRACE_LOGGRANT_SIZE 2048 -#define XLOG_TRACE_ICLOG_SIZE 256 - -void -xlog_trace_loggrant_alloc(xlog_t *log) -{ - log->l_grant_trace = ktrace_alloc(XLOG_TRACE_LOGGRANT_SIZE, KM_NOFS); -} - -void -xlog_trace_loggrant_dealloc(xlog_t *log) -{ - ktrace_free(log->l_grant_trace); -} - -void -xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) -{ - unsigned long cnts; - - /* ticket counts are 1 byte each */ - cnts = ((unsigned long)tic->t_ocnt) | ((unsigned long)tic->t_cnt) << 8; - - ktrace_enter(log->l_grant_trace, - (void *)tic, - (void *)log->l_reserve_headq, - (void *)log->l_write_headq, - (void *)((unsigned long)log->l_grant_reserve_cycle), - (void *)((unsigned long)log->l_grant_reserve_bytes), - (void *)((unsigned long)log->l_grant_write_cycle), - (void *)((unsigned long)log->l_grant_write_bytes), - (void *)((unsigned long)log->l_curr_cycle), - (void *)((unsigned long)log->l_curr_block), - (void *)((unsigned long)CYCLE_LSN(log->l_tail_lsn)), - (void *)((unsigned long)BLOCK_LSN(log->l_tail_lsn)), - (void *)string, - (void *)((unsigned long)tic->t_trans_type), - (void *)cnts, - (void *)((unsigned long)tic->t_curr_res), - (void *)((unsigned long)tic->t_unit_res)); -} - -void -xlog_trace_iclog_alloc(xlog_in_core_t *iclog) -{ - iclog->ic_trace = ktrace_alloc(XLOG_TRACE_ICLOG_SIZE, KM_NOFS); -} - -void -xlog_trace_iclog_dealloc(xlog_in_core_t *iclog) -{ - ktrace_free(iclog->ic_trace); -} - -void -xlog_trace_iclog(xlog_in_core_t *iclog, uint state) -{ - ktrace_enter(iclog->ic_trace, - (void *)((unsigned long)state), - (void *)((unsigned long)current_pid()), - (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL, - (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL, - (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL, - (void *)NULL, (void *)NULL); -} -#else - -#define xlog_trace_loggrant_alloc(log) -#define xlog_trace_loggrant_dealloc(log) -#define xlog_trace_loggrant(log,tic,string) - -#define xlog_trace_iclog_alloc(iclog) -#define xlog_trace_iclog_dealloc(iclog) -#define xlog_trace_iclog(iclog,state) - -#endif /* XFS_LOG_TRACE */ - static void xlog_ins_ticketq(struct xlog_ticket **qp, struct xlog_ticket *tic) @@ -1030,7 +952,7 @@ xlog_iodone(xfs_buf_t *bp) xfs_fs_cmn_err(CE_WARN, l->l_mp, "xlog_iodone: Barriers are no longer supported" " by device. Disabling barriers\n"); - xfs_buftrace("XLOG_IODONE BARRIERS OFF", bp); + xfs_buftrace(bp, "barriers_off"); } /* @@ -1085,7 +1007,7 @@ xlog_bdstrat_cb(struct xfs_buf *bp) return 0; } - xfs_buftrace("XLOG__BDSTRAT IOERROR", bp); + xfs_buftrace(bp, "xlog_ioerror"); XFS_BUF_ERROR(bp, EIO); XFS_BUF_STALE(bp); xfs_biodone(bp); @@ -1246,7 +1168,6 @@ xlog_alloc_log(xfs_mount_t *mp, spin_lock_init(&log->l_grant_lock); sv_init(&log->l_flush_wait, 0, "flush_wait"); - xlog_trace_loggrant_alloc(log); /* log record size must be multiple of BBSIZE; see xlog_rec_header_t */ ASSERT((XFS_BUF_SIZE(bp) & BBMASK) == 0); @@ -1305,8 +1226,6 @@ xlog_alloc_log(xfs_mount_t *mp, sv_init(&iclog->ic_force_wait, SV_DEFAULT, "iclog-force"); sv_init(&iclog->ic_write_wait, SV_DEFAULT, "iclog-write"); - xlog_trace_iclog_alloc(iclog); - iclogp = &iclog->ic_next; } *iclogp = log->l_iclog; /* complete ring */ @@ -1321,13 +1240,11 @@ out_free_iclog: sv_destroy(&iclog->ic_force_wait); sv_destroy(&iclog->ic_write_wait); xfs_buf_free(iclog->ic_bp); - xlog_trace_iclog_dealloc(iclog); } kmem_free(iclog); } spinlock_destroy(&log->l_icloglock); spinlock_destroy(&log->l_grant_lock); - xlog_trace_loggrant_dealloc(log); xfs_buf_free(log->l_xbuf); out_free_log: kmem_free(log); @@ -1607,7 +1524,6 @@ xlog_dealloc_log(xlog_t *log) sv_destroy(&iclog->ic_force_wait); sv_destroy(&iclog->ic_write_wait); xfs_buf_free(iclog->ic_bp); - xlog_trace_iclog_dealloc(iclog); next_iclog = iclog->ic_next; kmem_free(iclog); iclog = next_iclog; @@ -1616,7 +1532,6 @@ xlog_dealloc_log(xlog_t *log) spinlock_destroy(&log->l_grant_lock); xfs_buf_free(log->l_xbuf); - xlog_trace_loggrant_dealloc(log); log->l_mp->m_log = NULL; kmem_free(log); } /* xlog_dealloc_log */ @@ -2414,7 +2329,6 @@ restart: iclog = log->l_iclog; if (iclog->ic_state != XLOG_STATE_ACTIVE) { - xlog_trace_iclog(iclog, XLOG_TRACE_SLEEP_FLUSH); XFS_STATS_INC(xs_log_noiclogs); /* Wait for log writes to have flushed */ Index: linux-2.6/fs/xfs/xfs_log_priv.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_log_priv.h +++ linux-2.6/fs/xfs/xfs_log_priv.h @@ -19,7 +19,6 @@ #define __XFS_LOG_PRIV_H__ struct xfs_buf; -struct ktrace; struct log; struct xlog_ticket; struct xfs_buf_cancel; @@ -361,9 +360,6 @@ typedef struct xlog_in_core { int ic_bwritecnt; unsigned short ic_state; char *ic_datap; /* pointer to iclog data */ -#ifdef XFS_LOG_TRACE - struct ktrace *ic_trace; -#endif /* Callback structures need their own cacheline */ spinlock_t ic_callback_lock ____cacheline_aligned_in_smp; @@ -429,10 +425,6 @@ typedef struct log { int l_grant_write_cycle; int l_grant_write_bytes; -#ifdef XFS_LOG_TRACE - struct ktrace *l_grant_trace; -#endif - /* The following field are used for debugging; need to hold icloglock */ #ifdef DEBUG char *l_iclog_bak[XLOG_MAX_ICLOGS]; @@ -458,12 +450,6 @@ extern void xlog_put_bp(struct xfs_buf extern kmem_zone_t *xfs_log_ticket_zone; -/* iclog tracing */ -#define XLOG_TRACE_GRAB_FLUSH 1 -#define XLOG_TRACE_REL_FLUSH 2 -#define XLOG_TRACE_SLEEP_FLUSH 3 -#define XLOG_TRACE_WAKE_FLUSH 4 - /* * Unmount record type is used as a pseudo transaction type for the ticket. * It's value must be outside the range of XFS_TRANS_* values. Index: linux-2.6/fs/xfs/linux-2.6/xfs_trace.h =================================================================== --- /dev/null +++ linux-2.6/fs/xfs/linux-2.6/xfs_trace.h @@ -0,0 +1,1035 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM xfs + +#if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_XFS_H + +#include + +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_types.h" +#include "xfs_bit.h" +#include "xfs_log.h" +#include "xfs_inum.h" +#include "xfs_trans.h" +#include "xfs_sb.h" +#include "xfs_ag.h" +#include "xfs_dir2.h" +#include "xfs_da_btree.h" +#include "xfs_bmap_btree.h" +#include "xfs_alloc_btree.h" +#include "xfs_ialloc_btree.h" +#include "xfs_dir2_sf.h" +#include "xfs_attr_sf.h" +#include "xfs_dinode.h" +#include "xfs_inode.h" +#include "xfs_btree.h" +#include "xfs_dmapi.h" +#include "xfs_mount.h" +#include "xfs_ialloc.h" +#include "xfs_itable.h" +#include "xfs_alloc.h" +#include "xfs_bmap.h" +#include "xfs_attr.h" +#include "xfs_attr_sf.h" +#include "xfs_attr_leaf.h" +#include "xfs_log_priv.h" +#include "xfs_buf_item.h" +#include "xfs_quota.h" +#include "xfs_iomap.h" +#include "quota/xfs_dquot_item.h" +#include "quota/xfs_dquot.h" + +char *xfs_fmtfsblock(xfs_fsblock_t bno); +void xfs_count_page_state(struct page *page, int *delalloc, + int *unmapped, int *unwritten); + + +/* + * Trace attr_list operations. + * + * XXX: Not updated to actually do anything with the different subtypes yet. + */ +TRACE_EVENT(xfs_attr_list, + TP_PROTO(int type, char *where, struct xfs_attr_list_context *ctx, + unsigned long a13, unsigned long a14, unsigned long a15), + TP_ARGS(type, where, ctx, a13, a14, a15), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(int, type) + __field(char *, where) + __field(u32, hashval) + __field(u32, blkno) + __field(u32, offset) + __field(void *, alist) + __field(int, bufsize) + __field(int, count) + __field(int, firstu) + __field(int, dupcnt) + __field(int, flags) + __field(unsigned long, a13) + __field(unsigned long, a14) + __field(unsigned long, a15) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; + __entry->ino = ctx->dp->i_ino; + __entry->type = type; + __entry->where = where; + __entry->hashval = ctx->cursor->hashval; + __entry->blkno = ctx->cursor->blkno; + __entry->offset = ctx->cursor->offset; + __entry->alist = ctx->alist; + __entry->bufsize = ctx->bufsize; + __entry->count = ctx->count; + __entry->firstu = ctx->firstu; + __entry->flags = ctx->flags; + __entry->a13 = a13; + __entry->a14 = a14; + __entry->a15 = a15; + ), + + TP_printk("dev %d:%d ino %llx %s cursor h/b/o 0x%x/0x%x/%u dupcnt %u " + "alist 0x%p size %u count %u firstu %u flags %d %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->where, + __entry->hashval, + __entry->blkno, + __entry->offset, + __entry->dupcnt, + __entry->alist, + __entry->bufsize, + __entry->count, + __entry->firstu, + __entry->flags, + __print_flags(__entry->flags, "|", XFS_ATTR_FLAGS) + /* we currently miss out on the per-type a13/14/15 here */ + ) +); + +/* + * Trace block mappings. + * + * r2 may be NULL if there is just one extent to trace. + */ +TRACE_EVENT(xfs_bmap, + TP_PROTO(int opcode, const char *fname, const char *desc, + struct xfs_inode *ip, xfs_extnum_t idx, + struct xfs_bmbt_irec *r1, struct xfs_bmbt_irec *r2, + int whichfork), + TP_ARGS(opcode, fname, desc, ip, idx, r1, r2, whichfork), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(short, opcode) + __field(short, whichfork) + __field(const char *, fname) + __field(const char *, desc) + __field(xfs_extnum_t, idx) + __field(xfs_fileoff_t, r1_startoff) + __field(xfs_fsblock_t, r1_startblock) + __field(xfs_filblks_t, r1_blockcount) + __field(xfs_exntst_t, r1_state) + __field(xfs_fileoff_t, r2_startoff) + __field(xfs_fsblock_t, r2_startblock) + __field(xfs_filblks_t, r2_blockcount) + __field(xfs_exntst_t, r2_state) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->opcode = opcode; + __entry->whichfork = whichfork; + __entry->fname = fname; + __entry->desc = desc; + __entry->idx = idx; + __entry->r1_startoff = r1->br_startoff; + __entry->r1_startblock = r1->br_startblock; + __entry->r1_blockcount = r1->br_blockcount; + __entry->r1_state = r1->br_state; + __entry->r2_startoff = r2 ? r2->br_startoff : 0; + __entry->r2_startblock = r2 ? r2->br_startblock : 0; + __entry->r2_blockcount = r2 ? r2->br_blockcount : 0; + __entry->r2_state = r2 ? r2->br_state : 0; + ), + + TP_printk("dev %d:%d ino 0x%lld %s %s:%s %cf idx %ld " + "offset1 %lld block1 %s count1 %lld flag1 %d " + "offset2 %lld block2 %s count2 %lld flag2 %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __print_symbolic(__entry->opcode, XFS_BMAP_KTRACE_TYPES), + __entry->fname, + __entry->desc, + "da"[!!__entry->whichfork], + (long)__entry->idx, + __entry->r1_startoff, + xfs_fmtfsblock(__entry->r1_startblock), + __entry->r1_blockcount, + __entry->r1_state, + __entry->r2_startoff, + xfs_fmtfsblock(__entry->r2_startblock), + __entry->r2_blockcount, + __entry->r2_state) +); + +/* + * Trace lots of strategic buffer points. + */ +TRACE_EVENT(xfs_buf, + TP_PROTO(struct xfs_buf *bp, char *id, unsigned long val, + unsigned long caller_ip), + TP_ARGS(bp, id, val, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(char *, id) + __field(unsigned, flags) + __field(int, hold) + __field(unsigned, lockval) + __field(unsigned long, val) + __field(xfs_off_t, file_offset) + __field(size_t, buffer_length) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = bp->b_target->bt_dev; + __entry->id = id; + __entry->hold = atomic_read(&bp->b_hold); + __entry->lockval = xfs_buf_lock_value(bp); + __entry->val = val; + __entry->file_offset = bp->b_file_offset; + __entry->buffer_length = bp->b_buffer_length; + __entry->flags = bp->b_flags; + __entry->caller_ip = caller_ip; + ), + + TP_printk("dev %d:%d %s hold %d lock %d val 0x%lx " + "offset 0x%llx size 0x%zx flags %s by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->id, + __entry->hold, + __entry->lockval, + __entry->val, + (unsigned long long)__entry->file_offset, + __entry->buffer_length, + __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), + (void *)__entry->caller_ip) +); + +#define xfs_buftrace_val(bp, id, val) \ + trace_xfs_buf((bp), (id), (val), _RET_IP_) +#define xfs_buftrace(bp, id) \ + trace_xfs_buf((bp), (id), 0, _RET_IP_) + + +TRACE_EVENT(xfs_buf_item, + TP_PROTO(char *id, struct xfs_buf_log_item *bip), + TP_ARGS(id, bip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(char *, id) + __field(void *, bip) + __field(void *, bp) + __field(unsigned, flags) + __field(unsigned, recur) + __field(int, refcount) + __field(xfs_daddr_t, buf_blkno) + __field(size_t, buf_len) + __field(unsigned, buf_flags) + __field(int, buf_pincount) + __field(int, buf_lockval) + __field(void *, li_desc) + __field(unsigned, li_flags) + ), + + TP_fast_assign( + __entry->dev = bip->bli_buf->b_target->bt_dev; + __entry->id = id; + __entry->bip = bip; + __entry->bp = bip->bli_buf; + __entry->flags = bip->bli_flags; + __entry->recur = bip->bli_recur; + __entry->refcount = atomic_read(&bip->bli_refcount); + __entry->buf_blkno = XFS_BUF_ADDR(bip->bli_buf); + __entry->buf_len = XFS_BUF_COUNT(bip->bli_buf); + __entry->buf_flags = bip->bli_buf->b_flags; + __entry->buf_pincount = XFS_BUF_ISPINNED(bip->bli_buf); + __entry->buf_lockval = XFS_BUF_VALUSEMA(bip->bli_buf); + __entry->li_desc = bip->bli_item.li_desc; + __entry->li_flags = bip->bli_item.li_flags; + ), + + TP_printk("dev %d:%d %s bip 0x%p bp 0x%p flags %s recur %d refcount %d " + "blkno 0x%llx blen %zd bpflags %s pincount %d " + "lockval %d lidesc 0x%p liflags %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->id, + __entry->bip, + __entry->bp, + __print_flags(__entry->flags, "|", XFS_BLI_FLAGS), + __entry->recur, + __entry->refcount, + (unsigned long long)__entry->buf_blkno, + __entry->buf_len, + __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS), + __entry->buf_pincount, + __entry->buf_lockval, + __entry->li_desc, + __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS)) +); + +#define xfs_buf_item_trace(id, bip) \ + trace_xfs_buf_item((id), (bip)); + +/* + * dquot tracer. + * + * Dump relevant information from the dquot structure in strategic places. + * + * XXX: figure out why id is 0 so often. + */ +TRACE_EVENT(xfs_dquot, + TP_PROTO(struct xfs_dquot *dqp, char *func, struct xfs_inode *ip), + TP_ARGS(dqp, func, ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino); + __field(__be32, id) + __field(char *, func) + __field(unsigned, flags) + __field(unsigned, nrefs) + __field(__u64, res_bcount) + __field(__be64, bcount) + __field(__be64, icount) + __field(__be64, blk_hardlimit) + __field(__be64, blk_softlimit) + __field(__be64, ino_hardlimit) + __field(__be64, ino_softlimit) + ), + + TP_fast_assign( + __entry->dev = dqp->q_mount->m_super->s_dev; + __entry->ino = ip ? ip->i_ino : 0; + __entry->id = dqp->q_core.d_id; + __entry->func = func; + __entry->flags = dqp->dq_flags; + __entry->nrefs = dqp->q_nrefs; + __entry->res_bcount = dqp->q_res_bcount; + __entry->bcount = dqp->q_core.d_bcount; + __entry->icount = dqp->q_core.d_icount; + __entry->blk_hardlimit = dqp->q_core.d_blk_hardlimit; + __entry->blk_softlimit = dqp->q_core.d_blk_softlimit; + __entry->ino_hardlimit = dqp->q_core.d_ino_hardlimit; + __entry->ino_softlimit = dqp->q_core.d_ino_softlimit; + ), + + TP_printk("dev %d:%d ino 0x%llx id 0x%x %s flags %s nrefs %u res_bc 0x%llx " + "bcnt 0x%llx [hard 0x%llx | soft 0x%llx] " + "icnt 0x%llx [hard 0x%llx | soft 0x%llx]", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + be32_to_cpu(__entry->id), + __entry->func, + __print_flags(__entry->flags, "|", XFS_DQ_FLAGS), + __entry->nrefs, + (unsigned long long)__entry->res_bcount, + (unsigned long long)be64_to_cpu(__entry->bcount), + (unsigned long long)be64_to_cpu(__entry->blk_hardlimit), + (unsigned long long)be64_to_cpu(__entry->blk_softlimit), + (unsigned long long)be64_to_cpu(__entry->icount), + (unsigned long long)be64_to_cpu(__entry->ino_hardlimit), + (unsigned long long)be64_to_cpu(__entry->ino_softlimit)) + +); + +#define xfs_dqtrace_entry_ino(dqp, func, ip) \ + trace_xfs_dquot((dqp), (func), (ip)); +#define xfs_dqtrace_entry(dqp, func) \ + trace_xfs_dquot((dqp), (func), NULL) + +/* + * ilock/iolock tracer + * + * Reports the inode, operation, flags and caller for each operation + * on the inode locks. + */ +TRACE_EVENT(xfs_ilock, + TP_PROTO(struct xfs_inode *ip, const char *op, unsigned lockflags, + unsigned long caller_ip), + TP_ARGS(ip, op, lockflags, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(const char *, op) + __field(int, lockflags) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->lockflags = lockflags; + __entry->caller_ip = caller_ip; + ), + + TP_printk("dev %d:%d ino 0x%lld %s %s by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __print_flags(__entry->lockflags, "|", XFS_LOCK_FLAGS), + (void *)__entry->caller_ip) +); + +/* + * Trace relevant inode operations. + * + * XXX: merge with the ilock tracer?? + */ +TRACE_EVENT(xfs_inode, + TP_PROTO(struct xfs_inode *ip, const char *op, unsigned long caller_ip), + TP_ARGS(ip, op, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(const char *, op) + __field(unsigned long, caller_ip) + __field(int, icount) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->caller_ip = caller_ip; + __entry->icount = atomic_read(&VFS_I(ip)->i_count); + ), + + TP_printk("dev %d:%d ino 0x%llx %s count %d by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->icount, + (char *)__entry->caller_ip) +); + +/* + * Trace log grants. + * + * XXX: string argument is rather unstructured + */ +TRACE_EVENT(xfs_loggrant, + TP_PROTO(struct log *log, struct xlog_ticket *tic, char *string), + TP_ARGS(log, tic, string), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(char *, string) + __field(unsigned, trans_type) + __field(char, ocnt) + __field(char, cnt) + __field(int, curr_res) + __field(int, unit_res) + __field(void *, reserve_headq) + __field(void *, write_headq) + __field(int, grant_reserve_cycle) + __field(int, grant_reserve_bytes) + __field(int, grant_write_cycle) + __field(int, grant_write_bytes) + __field(int, curr_cycle) + __field(int, curr_block) + __field(xfs_lsn_t, tail_lsn) + ), + + TP_fast_assign( + __entry->dev = log->l_mp->m_super->s_dev; + __entry->string = string; + __entry->trans_type = tic->t_trans_type; + __entry->ocnt = tic->t_ocnt; + __entry->cnt = tic->t_cnt; + __entry->curr_res = tic->t_curr_res; + __entry->unit_res = tic->t_unit_res; + __entry->reserve_headq = log->l_reserve_headq; + __entry->write_headq = log->l_write_headq; + __entry->grant_reserve_cycle = log->l_grant_reserve_cycle; + __entry->grant_reserve_bytes = log->l_grant_reserve_bytes; + __entry->grant_write_cycle = log->l_grant_write_cycle; + __entry->grant_write_bytes = log->l_grant_write_bytes; + __entry->curr_cycle = log->l_curr_cycle; + __entry->curr_block = log->l_curr_block; + __entry->tail_lsn = log->l_tail_lsn; + ), + + TP_printk("dev %d:%d %s %s t_ocnt %u t_cnt %u t_curr_res %u t_unit_res %u " + "reserve_headq 0x%p write_headq 0x%p grant_reserve_cycle %d " + "grant_reserve_bytes %d grant_write_cycle %d " + "grant_write_bytes %d curr_cycle %d curr_block %d " + "tail_cycle %d tail_block %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->string, + __print_symbolic(__entry->trans_type, XFS_TRANS_TYPES), + __entry->ocnt, + __entry->cnt, + __entry->curr_res, + __entry->unit_res, + __entry->reserve_headq, + __entry->write_headq, + __entry->grant_reserve_cycle, + __entry->grant_reserve_bytes, + __entry->grant_write_cycle, + __entry->grant_write_bytes, + __entry->curr_cycle, + __entry->curr_block, + CYCLE_LSN(__entry->tail_lsn), + BLOCK_LSN(__entry->tail_lsn) + ) +); + +#define xlog_trace_loggrant(log, tic, str) \ + trace_xfs_loggrant((log), (tic), (str)) + +/* + * Trace read/write/splice. + */ +TRACE_EVENT(xfs_rw, + TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset, + int ioflags, const char *op), + TP_ARGS(ip, count, offset, ioflags, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_fsize_t, new_size) + __field(loff_t, offset) + __field(size_t, count) + __field(int, ioflags) + __field(const char *, op) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->size = ip->i_d.di_size; + __entry->new_size = ip->i_new_size; + __entry->offset = offset; + __entry->count = count; + __entry->ioflags = ioflags; + ), + + TP_printk("dev %d:%d ino 0x%llx %s size 0x%llx new_size 0x%llx " + "offset 0x%llx count 0x%zx ioflags %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->size, + __entry->new_size, + __entry->offset, + __entry->count, + __print_flags(__entry->ioflags, "|", XFS_IO_FLAGS)) +); + +/* + * Trace addres space operations + */ +TRACE_EVENT(xfs_page, + TP_PROTO(struct inode *inode, struct page *page, unsigned long offset, + const char *op), + TP_ARGS(inode, page, offset, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(pgoff_t, pgoff) + __field(loff_t, size) + __field(unsigned long, offset) + __field(int, delalloc) + __field(int, unmapped) + __field(int, unwritten) + __field(const char *, op) + ), + + TP_fast_assign( + int delalloc = -1, unmapped = -1, unwritten = -1; + + if (page_has_buffers(page)) + xfs_count_page_state(page, &delalloc, + &unmapped, &unwritten); + + __entry->dev = inode->i_sb->s_dev; + __entry->ino = XFS_I(inode)->i_ino; + __entry->op = op; + __entry->pgoff = page_offset(page); + __entry->size = i_size_read(inode); + __entry->offset = offset; + __entry->delalloc = delalloc; + __entry->unmapped = unmapped; + __entry->unwritten = unwritten; + ), + + TP_printk("dev %d:%d ino 0x%llx %s pgoff 0x%lx size 0x%llx offset %lx " + "delalloc %d unmapped %d unwritten %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->pgoff, + __entry->size, + __entry->offset, + __entry->delalloc, + __entry->unmapped, + __entry->unwritten) +); + +TRACE_EVENT(xfs_iomap, + TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, + int flags, struct xfs_bmbt_irec *irec, const char *op), + TP_ARGS(ip, offset, count, flags, irec, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(const char *, op) + __field(loff_t, size) + __field(loff_t, new_size) + __field(loff_t, offset) + __field(size_t, count) + __field(int, flags) + __field(xfs_fileoff_t, startoff) + __field(xfs_fsblock_t, startblock) + __field(xfs_filblks_t, blockcount) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->op = op; + __entry->size = ip->i_d.di_size; + __entry->new_size = ip->i_new_size; + __entry->offset = offset; + __entry->count = count; + __entry->flags = flags; + __entry->startoff = irec ? irec->br_startoff : 0; + __entry->startblock = irec ? irec->br_startblock : 0; + __entry->blockcount = irec ? irec->br_blockcount : 0; + + ), + + TP_printk("dev %d:%d ino 0x%llx %s size 0x%llx new_size 0x%llx " + "offset 0x%llx count %zd flags %s " + "startoff 0x%llx startblock 0x%llx blockcount 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __entry->size, + __entry->new_size, + __entry->offset, + __entry->count, + __print_flags(__entry->flags, "|", BMAPI_FLAGS), + __entry->startoff, + __entry->startblock, + __entry->blockcount) +); + +TRACE_EVENT(xfs_itrunc, + TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size, int flag, + xfs_off_t toss_start, xfs_off_t toss_finish, const char *op), + TP_ARGS(ip, new_size, flag, toss_start, toss_finish, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_fsize_t, new_size) + __field(xfs_off_t, toss_start) + __field(xfs_off_t, toss_finish) + __field(const char *, op) + __field(int, flag) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->size = ip->i_d.di_size; + __entry->new_size = new_size; + __entry->toss_start = toss_start; + __entry->toss_finish = toss_finish; + __entry->op = op; + __entry->flag = flag; + ), + + TP_printk("dev %d:%d ino 0x%llx %s %s size 0x%llx new_size 0x%llx " + "toss start 0x%llx toss finish 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->op, + __print_flags(__entry->flag, "|", XFS_ITRUNC_FLAGS), + __entry->size, + __entry->new_size, + __entry->toss_start, + __entry->toss_finish) +); + +TRACE_EVENT(xfs_pagecache_inval, + TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish), + TP_ARGS(ip, start, finish), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_off_t, start) + __field(xfs_off_t, finish) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->size = ip->i_d.di_size; + __entry->start = start; + __entry->finish = finish; + ), + + TP_printk("dev %d:%d ino 0x%llx size 0x%llx start 0x%llx finish 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->size, + __entry->start, + __entry->finish) +); + +TRACE_EVENT(xfs_bunmap, + TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t bno, xfs_filblks_t len, + int flags, unsigned long caller_ip), + TP_ARGS(ip, bno, len, flags, caller_ip), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_fsize_t, size) + __field(xfs_fileoff_t, bno) + __field(xfs_filblks_t, len) + __field(unsigned long, caller_ip) + __field(int, flags) + ), + + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->size = ip->i_d.di_size; + __entry->bno = bno; + __entry->len = len; + __entry->caller_ip = caller_ip; + __entry->flags = flags; + ), + + TP_printk("dev %d:%d ino 0x%llx size 0x%llx bno 0x%llx len 0x%llx" + "flags %s by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->size, + __entry->bno, + __entry->len, + __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS), + (void *)__entry->caller_ip) + +); + +#define xfs_bunmap_trace(ip, bno, len, flags) \ + trace_xfs_bunmap(ip, bno, len, flags, _RET_IP_) + +/* XXX: better even description instead of caller_ip + op?? */ +TRACE_EVENT(xfs_alloc_busy, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_extlen_t len, int slot, const char *op), + TP_ARGS(mp, agno, agbno, len, slot, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(const char *, op) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_extlen_t, len) + __field(int, slot) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->op = op; + __entry->agno = agno; + __entry->agbno = agbno; + __entry->len = len; + __entry->slot = slot; + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d %s agno %u agbno %u len %u slot %d by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->op, + __entry->agno, + __entry->agbno, + __entry->len, + __entry->slot, + (void *)__entry->caller_ip) + +); +#define xfs_trace_alloc_busy(mp, ag, agb, l, sl, op) \ + trace_xfs_alloc_busy(mp, ag, agb, l, sl, op) +#define xfs_trace_alloc_unbusy(mp, ag, sl, op) \ + trace_xfs_alloc_busy(mp, ag, -1, -1, sl, op) +#define xfs_trace_alloc_busysearch(mp, ag, agb, l, op) \ + trace_xfs_alloc_busy(mp, ag, agb, l, 0, op) + +/* + * Trace modifications to the AG freelist headers. + * + * XXX: maybe move to a single caller in xfs_alloc_log_agf? + */ +TRACE_EVENT(xfs_agf, + TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags), + TP_ARGS(mp, agf, flags), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(int, flags) + __field(__u32, length) + __field(__u32, bno_root) + __field(__u32, cnt_root) + __field(__u32, bno_level) + __field(__u32, cnt_level) + __field(__u32, flfirst) + __field(__u32, fllast) + __field(__u32, flcount) + __field(__u32, freeblks) + __field(__u32, longest) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = be32_to_cpu(agf->agf_seqno), + __entry->flags = flags; + __entry->length = be32_to_cpu(agf->agf_length), + __entry->bno_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), + __entry->cnt_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), + __entry->bno_level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), + __entry->cnt_level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), + __entry->flfirst = be32_to_cpu(agf->agf_flfirst), + __entry->fllast = be32_to_cpu(agf->agf_fllast), + __entry->flcount = be32_to_cpu(agf->agf_flcount), + __entry->freeblks = be32_to_cpu(agf->agf_freeblks), + __entry->longest = be32_to_cpu(agf->agf_longest); + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d agno %u flags %s length %u roots b %u c %u " + "levels b %u c %u flfirst %u fllast %u flcount %u " + "freeblks %u longest %u by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __print_flags(__entry->flags, "|", XFS_AGF_FLAGS), + __entry->length, + __entry->bno_root, + __entry->cnt_root, + __entry->bno_level, + __entry->cnt_level, + __entry->flfirst, + __entry->fllast, + __entry->flcount, + __entry->freeblks, + __entry->longest, + (void *)__entry->caller_ip) +); + +#define xfs_trace_agf(mp, agf, flags) \ + trace_xfs_agf(mp, agf, flags) + +TRACE_EVENT(xfs_free_extent, + TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, + xfs_extlen_t len, bool isfl, int haveleft, int haveright), + TP_ARGS(mp, agno, agbno, len, isfl, haveleft, haveright), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_extlen_t, len) + __field(int, isfl) + __field(int, haveleft) + __field(int, haveright) + ), + + TP_fast_assign( + __entry->dev = mp->m_super->s_dev; + __entry->agno = agno; + __entry->agbno = agbno; + __entry->len = len; + __entry->isfl = isfl; + __entry->haveleft = haveleft; + __entry->haveright = haveright; + ), + + TP_printk("dev %d:%d agno %u agbno %u len %u isfl %d %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->agno, + __entry->agbno, + __entry->len, + __entry->isfl, + __entry->haveleft ? + (__entry->haveright ? "both" : "left") : + (__entry->haveright ? "right" : "none")) + +); + +TRACE_EVENT(xfs_alloc_extent, + TP_PROTO(struct xfs_alloc_arg *args, char *op), + TP_ARGS(args, op), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_agnumber_t, agno) + __field(xfs_agblock_t, agbno) + __field(xfs_extlen_t, minlen) + __field(xfs_extlen_t, maxlen) + __field(xfs_extlen_t, mod) + __field(xfs_extlen_t, prod) + __field(xfs_extlen_t, minleft) + __field(xfs_extlen_t, total) + __field(xfs_extlen_t, alignment) + __field(xfs_extlen_t, len) + __field(short, type) + __field(short, otype) + __field(char, wasdel) + __field(char, wasfromfl) + __field(char, isfl) + __field(char, userdata) + __field(const char *, op) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = args->mp->m_super->s_dev; + __entry->agno = args->agno; + __entry->agbno = args->agbno; + __entry->minlen = args->minlen; + __entry->maxlen = args->maxlen; + __entry->mod = args->mod; + __entry->prod = args->prod; + __entry->minleft = args->minleft; + __entry->total = args->total; + __entry->alignment = args->alignment; + // minalignslop? + __entry->len = args->len; + __entry->type = args->type; + __entry->otype = args->otype; + __entry->wasdel = args->wasdel; + __entry->wasfromfl = args->wasfromfl; + __entry->isfl = args->isfl; + __entry->userdata = args->userdata; + // firstblock? + __entry->op = op; + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d %s agno %u agbno %u minlen %u maxlen %u mod %u prod %u " + "minleft %u total %u alignment %u len %u type %s otype %s " + "wasdel %d wasfromfl %d isfl %d userdata %d by %pf", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->op, + __entry->agno, + __entry->agbno, + __entry->minlen, + __entry->maxlen, + __entry->mod, + __entry->prod, + __entry->minleft, + __entry->total, + __entry->alignment, + __entry->len, + __print_symbolic(__entry->type, XFS_ALLOC_TYPES), + __print_symbolic(__entry->otype, XFS_ALLOC_TYPES), + __entry->wasdel, + __entry->wasfromfl, + __entry->isfl, + __entry->userdata, + (char *)__entry->caller_ip) +); + +#define xfs_trace_alloc_extent(args, str) \ + trace_xfs_alloc_extent(args, str) + +TRACE_EVENT(xfs_dir2, + TP_PROTO(struct xfs_da_args *args, int i, int j, int count), + TP_ARGS(args, i, j, count), + + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __dynamic_array(char, name, args->namelen) + __field(int, namelen) + __field(xfs_dahash_t, hashval) + __field(xfs_ino_t, inumber) + __field(int, op_flags) + __field(int, i) + __field(int, j) + __field(int, count) + __field(unsigned long, caller_ip) + ), + + TP_fast_assign( + __entry->dev = VFS_I(args->dp)->i_sb->s_dev; + __entry->ino = args->dp->i_ino; + if (args->namelen) + memcpy(__get_str(name), args->name, args->namelen); + __entry->namelen = args->namelen; + __entry->hashval = args->hashval; + __entry->inumber = args->inumber; + __entry->op_flags = args->op_flags; + __entry->i = i; + __entry->j = j; + __entry->count = count; + __entry->caller_ip = _RET_IP_; + ), + + TP_printk("dev %d:%d ino 0x%lld %pf name %.*s namelen %d hashval 0x%x " + "inumber 0x%llx op_flags %s i %d j %d count %d", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + (void *)__entry->caller_ip, + __entry->namelen, + __entry->namelen ? __get_str(name) : NULL, + __entry->namelen, + __entry->hashval, + __entry->inumber, + __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS), + __entry->i, + __entry->j, + __entry->count) +); + +#define __xfs_trace_dir2(args, i, j, count) \ + trace_xfs_dir2((args), (i), (j), (count)) +#define xfs_trace_dir2(args) \ + trace_xfs_dir2((args), 0, 0, 0) + +#endif /* _TRACE_XFS_H */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#define TRACE_INCLUDE_FILE xfs_trace +#include Index: linux-2.6/fs/xfs/xfs.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs.h +++ linux-2.6/fs/xfs/xfs.h @@ -25,21 +25,5 @@ /* #define QUOTADEBUG 1 */ #endif -#ifdef CONFIG_XFS_TRACE -#define XFS_ALLOC_TRACE 1 -#define XFS_ATTR_TRACE 1 -#define XFS_BLI_TRACE 1 -#define XFS_BMAP_TRACE 1 -#define XFS_BTREE_TRACE 1 -#define XFS_DIR2_TRACE 1 -#define XFS_DQUOT_TRACE 1 -#define XFS_ILOCK_TRACE 1 -#define XFS_LOG_TRACE 1 -#define XFS_RW_TRACE 1 -#define XFS_BUF_TRACE 1 -#define XFS_INODE_TRACE 1 -#define XFS_FILESTREAMS_TRACE 1 -#endif - #include #endif /* __XFS_H__ */ Index: linux-2.6/fs/xfs/quota/xfs_qm.c =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_qm.c +++ linux-2.6/fs/xfs/quota/xfs_qm.c @@ -47,6 +47,7 @@ #include "xfs_trans_space.h" #include "xfs_utils.h" #include "xfs_qm.h" +#include "xfs_trace.h" /* * The global quota manager. There is only one of these for the entire @@ -1350,7 +1351,8 @@ xfs_qm_reset_dqcounts( xfs_disk_dquot_t *ddq; int j; - xfs_buftrace("RESET DQUOTS", bp); + xfs_buftrace(bp, "reset_dquots"); + /* * Reset all counters and timers. They'll be * started afresh by xfs_qm_quotacheck. Index: linux-2.6/fs/xfs/quota/xfs_qm_syscalls.c =================================================================== --- linux-2.6.orig/fs/xfs/quota/xfs_qm_syscalls.c +++ linux-2.6/fs/xfs/quota/xfs_qm_syscalls.c @@ -49,6 +49,7 @@ #include "xfs_buf_item.h" #include "xfs_utils.h" #include "xfs_qm.h" +#include "xfs_trace.h" #ifdef DEBUG # define qdprintk(s, args...) cmn_err(CE_DEBUG, s, ## args) Index: linux-2.6/fs/xfs/xfs_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_btree.c +++ linux-2.6/fs/xfs/xfs_btree.c @@ -39,6 +39,7 @@ #include "xfs_btree_trace.h" #include "xfs_ialloc.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Cursor allocation zone. @@ -81,7 +82,7 @@ xfs_btree_check_lblock( XFS_ERRTAG_BTREE_CHECK_LBLOCK, XFS_RANDOM_BTREE_CHECK_LBLOCK))) { if (bp) - xfs_buftrace("LBTREE ERROR", bp); + xfs_buftrace(bp, "lbtree_error"); XFS_ERROR_REPORT("xfs_btree_check_lblock", XFS_ERRLEVEL_LOW, mp); return XFS_ERROR(EFSCORRUPTED); @@ -119,7 +120,7 @@ xfs_btree_check_sblock( XFS_ERRTAG_BTREE_CHECK_SBLOCK, XFS_RANDOM_BTREE_CHECK_SBLOCK))) { if (bp) - xfs_buftrace("SBTREE ERROR", bp); + xfs_buftrace(bp, "sbtree_error"); XFS_ERROR_REPORT("xfs_btree_check_sblock", XFS_ERRLEVEL_LOW, cur->bc_mp); return XFS_ERROR(EFSCORRUPTED); Index: linux-2.6/fs/xfs/xfs_da_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_da_btree.c +++ linux-2.6/fs/xfs/xfs_da_btree.c @@ -46,6 +46,7 @@ #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * xfs_da_btree.c @@ -2107,7 +2108,7 @@ xfs_da_do_buf( (be32_to_cpu(free->hdr.magic) != XFS_DIR2_FREE_MAGIC), mp, XFS_ERRTAG_DA_READ_BUF, XFS_RANDOM_DA_READ_BUF))) { - xfs_buftrace("DA READ ERROR", rbp->bps[0]); + xfs_buftrace(rbp->bps[0], "da_read_error"); XFS_CORRUPTION_ERROR("xfs_da_do_buf(2)", XFS_ERRLEVEL_LOW, mp, info); error = XFS_ERROR(EFSCORRUPTED); Index: linux-2.6/fs/xfs/xfs_inode_item.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode_item.c +++ linux-2.6/fs/xfs/xfs_inode_item.c @@ -41,6 +41,7 @@ #include "xfs_ialloc.h" #include "xfs_rw.h" #include "xfs_error.h" +#include "xfs_trace.h" kmem_zone_t *xfs_ili_zone; /* inode log item zone */ @@ -806,7 +807,7 @@ xfs_inode_item_pushbuf( !completion_done(&ip->i_flush)); iip->ili_pushbuf_flag = 0; xfs_iunlock(ip, XFS_ILOCK_SHARED); - xfs_buftrace("INODE ITEM PUSH", bp); + xfs_buftrace(bp, "inode_item_push"); if (XFS_BUF_ISPINNED(bp)) { xfs_log_force(mp, (xfs_lsn_t)0, XFS_LOG_FORCE); Index: linux-2.6/fs/xfs/xfs_rw.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rw.c +++ linux-2.6/fs/xfs/xfs_rw.c @@ -44,6 +44,7 @@ #include "xfs_error.h" #include "xfs_buf_item.h" #include "xfs_rw.h" +#include "xfs_trace.h" /* * This is a subroutine for xfs_write() and other writers (xfs_ioctl) @@ -255,7 +256,6 @@ xfs_bioerror( * No need to wait until the buffer is unpinned. * We aren't flushing it. */ - xfs_buftrace("XFS IOERROR", bp); XFS_BUF_ERROR(bp, EIO); /* * We're calling biodone, so delete B_DONE flag. Either way @@ -289,7 +289,6 @@ xfs_bioerror_relse( ASSERT(XFS_BUF_IODONE_FUNC(bp) != xfs_buf_iodone_callbacks); ASSERT(XFS_BUF_IODONE_FUNC(bp) != xlog_iodone); - xfs_buftrace("XFS IOERRELSE", bp); fl = XFS_BUF_BFLAGS(bp); /* * No need to wait until the buffer is unpinned. Index: linux-2.6/fs/xfs/xfs_trans_buf.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_trans_buf.c +++ linux-2.6/fs/xfs/xfs_trans_buf.c @@ -38,6 +38,7 @@ #include "xfs_trans_priv.h" #include "xfs_error.h" #include "xfs_rw.h" +#include "xfs_trace.h" STATIC xfs_buf_t *xfs_trans_buf_item_match(xfs_trans_t *, xfs_buftarg_t *, @@ -99,7 +100,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, if (bp != NULL) { ASSERT(XFS_BUF_VALUSEMA(bp) <= 0); if (XFS_FORCED_SHUTDOWN(tp->t_mountp)) { - xfs_buftrace("TRANS GET RECUR SHUT", bp); + xfs_buftrace(bp, "trans_get_recur_shut"); XFS_BUF_SUPER_STALE(bp); } /* @@ -108,7 +109,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, * caller isn't allowed to use the data anyway. */ else if (XFS_BUF_ISSTALE(bp)) { - xfs_buftrace("TRANS GET RECUR STALE", bp); + xfs_buftrace(bp, "trans_get_recur_stale"); ASSERT(!XFS_BUF_ISDELAYWRITE(bp)); } ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); @@ -116,7 +117,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, ASSERT(bip != NULL); ASSERT(atomic_read(&bip->bli_refcount) > 0); bip->bli_recur++; - xfs_buftrace("TRANS GET RECUR", bp); + xfs_buftrace(bp, "trans_get_recur"); xfs_buf_item_trace("GET RECUR", bip); return (bp); } @@ -169,7 +170,7 @@ xfs_trans_get_buf(xfs_trans_t *tp, */ XFS_BUF_SET_FSPRIVATE2(bp, tp); - xfs_buftrace("TRANS GET", bp); + xfs_buftrace(bp, "trans_get"); xfs_buf_item_trace("GET", bip); return (bp); } @@ -350,7 +351,7 @@ xfs_trans_read_buf( ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); ASSERT((XFS_BUF_ISERROR(bp)) == 0); if (!(XFS_BUF_ISDONE(bp))) { - xfs_buftrace("READ_BUF_INCORE !DONE", bp); + xfs_buftrace(bp, "trans_read_buf_io"); ASSERT(!XFS_BUF_ISASYNC(bp)); XFS_BUF_READ(bp); xfsbdstrat(tp->t_mountp, bp); @@ -375,7 +376,7 @@ xfs_trans_read_buf( * brelse it either. Just get out. */ if (XFS_FORCED_SHUTDOWN(mp)) { - xfs_buftrace("READ_BUF_INCORE XFSSHUTDN", bp); + xfs_buftrace(bp, "trans_read_buf_shut_incore"); *bpp = NULL; return XFS_ERROR(EIO); } @@ -405,7 +406,7 @@ xfs_trans_read_buf( } if (XFS_BUF_GETERROR(bp) != 0) { XFS_BUF_SUPER_STALE(bp); - xfs_buftrace("READ ERROR", bp); + xfs_buftrace(bp, "trans_read_buf_error"); error = XFS_BUF_GETERROR(bp); xfs_ioerror_alert("xfs_trans_read_buf", mp, @@ -464,7 +465,7 @@ xfs_trans_read_buf( */ XFS_BUF_SET_FSPRIVATE2(bp, tp); - xfs_buftrace("TRANS READ", bp); + xfs_buftrace(bp, "trans_read_buf"); xfs_buf_item_trace("READ", bip); *bpp = bp; return 0; @@ -483,7 +484,7 @@ shutdown_abort: ASSERT((XFS_BUF_BFLAGS(bp) & (XFS_B_STALE|XFS_B_DELWRI)) != (XFS_B_STALE|XFS_B_DELWRI)); - xfs_buftrace("READ_BUF XFSSHUTDN", bp); + xfs_buftrace(bp, "trans_read_buf_shut"); xfs_buf_relse(bp); *bpp = NULL; return XFS_ERROR(EIO); @@ -843,7 +844,7 @@ xfs_trans_binval( ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); ASSERT(lidp->lid_flags & XFS_LID_DIRTY); ASSERT(tp->t_flags & XFS_TRANS_DIRTY); - xfs_buftrace("XFS_BINVAL RECUR", bp); + xfs_buftrace(bp, "trans_binval_recur"); xfs_buf_item_trace("BINVAL RECUR", bip); return; } @@ -878,7 +879,7 @@ xfs_trans_binval( (bip->bli_format.blf_map_size * sizeof(uint))); lidp->lid_flags |= XFS_LID_DIRTY|XFS_LID_BUF_STALE; tp->t_flags |= XFS_TRANS_DIRTY; - xfs_buftrace("XFS_BINVAL", bp); + xfs_buftrace(bp, "trans_binval"); xfs_buf_item_trace("BINVAL", bip); } Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.h +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.h @@ -56,12 +56,6 @@ extern void xfs_qm_exit(void); # define XFS_BIGFS_STRING #endif -#ifdef CONFIG_XFS_TRACE -# define XFS_TRACE_STRING "tracing, " -#else -# define XFS_TRACE_STRING -#endif - #ifdef CONFIG_XFS_DMAPI # define XFS_DMAPI_STRING "dmapi support, " #else @@ -78,7 +72,6 @@ extern void xfs_qm_exit(void); XFS_SECURITY_STRING \ XFS_REALTIME_STRING \ XFS_BIGFS_STRING \ - XFS_TRACE_STRING \ XFS_DMAPI_STRING \ XFS_DBG_STRING /* DBG must be last */ Index: linux-2.6/fs/xfs/linux-2.6/xfs_ioctl.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_ioctl.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_ioctl.c @@ -51,6 +51,7 @@ #include "xfs_quota.h" #include "xfs_inode_item.h" #include "xfs_export.h" +#include "xfs_trace.h" #include #include Index: linux-2.6/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_iops.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_iops.c @@ -48,6 +48,7 @@ #include "xfs_buf_item.h" #include "xfs_utils.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include Index: linux-2.6/fs/xfs/xfs_dfrag.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dfrag.c +++ linux-2.6/fs/xfs/xfs_dfrag.c @@ -43,6 +43,7 @@ #include "xfs_error.h" #include "xfs_rw.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" /* * Syssgi interface for swapext @@ -168,7 +169,6 @@ xfs_swap_extents( } if (VN_CACHED(VFS_I(tip)) != 0) { - xfs_inval_cached_trace(tip, 0, -1, 0, -1); error = xfs_flushinval_pages(tip, 0, -1, FI_REMAPF_LOCKED); if (error) Index: linux-2.6/fs/xfs/xfs_dir2.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2.c +++ linux-2.6/fs/xfs/xfs_dir2.c @@ -40,9 +40,9 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" struct xfs_name xfs_name_dotdot = {"..", 2}; @@ -525,7 +525,8 @@ xfs_dir2_grow_inode( xfs_trans_t *tp; xfs_drfsbno_t nblks; - xfs_dir2_trace_args_s("grow_inode", args, space); + __xfs_trace_dir2(args, space, 0, 0); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -703,7 +704,8 @@ xfs_dir2_shrink_inode( xfs_mount_t *mp; xfs_trans_t *tp; - xfs_dir2_trace_args_db("shrink_inode", args, db, bp); + __xfs_trace_dir2(args, db, 0, 0); + dp = args->dp; mp = dp->i_mount; tp = args->trans; Index: linux-2.6/fs/xfs/xfs_log_recover.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_log_recover.c +++ linux-2.6/fs/xfs/xfs_log_recover.c @@ -46,6 +46,7 @@ #include "xfs_quota.h" #include "xfs_rw.h" #include "xfs_utils.h" +#include "xfs_trace.h" STATIC int xlog_find_zeroed(xlog_t *, xfs_daddr_t *); STATIC int xlog_clear_stale_blocks(xlog_t *, xfs_lsn_t); Index: linux-2.6/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_mount.c +++ linux-2.6/fs/xfs/xfs_mount.c @@ -44,6 +44,8 @@ #include "xfs_quota.h" #include "xfs_fsops.h" #include "xfs_utils.h" +#include "xfs_trace.h" + STATIC void xfs_unmountfs_wait(xfs_mount_t *); Index: linux-2.6/fs/xfs/xfs_rename.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rename.c +++ linux-2.6/fs/xfs/xfs_rename.c @@ -39,6 +39,7 @@ #include "xfs_utils.h" #include "xfs_trans_space.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" /* Index: linux-2.6/fs/xfs/xfs_rtalloc.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rtalloc.c +++ linux-2.6/fs/xfs/xfs_rtalloc.c @@ -45,6 +45,7 @@ #include "xfs_inode_item.h" #include "xfs_trans_space.h" #include "xfs_utils.h" +#include "xfs_trace.h" /* Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c +++ linux-2.6/fs/xfs/xfs_vnodeops.c @@ -53,6 +53,7 @@ #include "xfs_log_priv.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" int xfs_setattr( @@ -2877,7 +2878,6 @@ xfs_free_file_space( ioffset = offset & ~(rounding - 1); if (VN_CACHED(VFS_I(ip)) != 0) { - xfs_inval_cached_trace(ip, ioffset, -1, ioffset, -1); error = xfs_flushinval_pages(ip, ioffset, -1, FI_REMAPF_LOCKED); if (error) goto out_unlock_iolock; Index: linux-2.6/fs/xfs/xfs_btree_trace.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_btree_trace.h +++ linux-2.6/fs/xfs/xfs_btree_trace.h @@ -58,8 +58,6 @@ void xfs_btree_trace_argbi(const char *, struct xfs_buf *, int, int); void xfs_btree_trace_argbii(const char *, struct xfs_btree_cur *, struct xfs_buf *, int, int, int); -void xfs_btree_trace_argfffi(const char *, struct xfs_btree_cur *, - xfs_dfiloff_t, xfs_dfsbno_t, xfs_dfilblks_t, int, int); void xfs_btree_trace_argi(const char *, struct xfs_btree_cur *, int, int); void xfs_btree_trace_argipk(const char *, struct xfs_btree_cur *, int, union xfs_btree_ptr, union xfs_btree_key *, int); @@ -71,24 +69,10 @@ void xfs_btree_trace_argr(const char *, union xfs_btree_rec *, int); void xfs_btree_trace_cursor(const char *, struct xfs_btree_cur *, int, int); - -#define XFS_ALLOCBT_TRACE_SIZE 4096 /* size of global trace buffer */ -extern ktrace_t *xfs_allocbt_trace_buf; - -#define XFS_INOBT_TRACE_SIZE 4096 /* size of global trace buffer */ -extern ktrace_t *xfs_inobt_trace_buf; - -#define XFS_BMBT_TRACE_SIZE 4096 /* size of global trace buffer */ -#define XFS_BMBT_KTRACE_SIZE 32 /* size of per-inode trace buffer */ -extern ktrace_t *xfs_bmbt_trace_buf; - - #define XFS_BTREE_TRACE_ARGBI(c, b, i) \ xfs_btree_trace_argbi(__func__, c, b, i, __LINE__) #define XFS_BTREE_TRACE_ARGBII(c, b, i, j) \ xfs_btree_trace_argbii(__func__, c, b, i, j, __LINE__) -#define XFS_BTREE_TRACE_ARGFFFI(c, o, b, i, j) \ - xfs_btree_trace_argfffi(__func__, c, o, b, i, j, __LINE__) #define XFS_BTREE_TRACE_ARGI(c, i) \ xfs_btree_trace_argi(__func__, c, i, __LINE__) #define XFS_BTREE_TRACE_ARGIPK(c, i, p, k) \ @@ -104,7 +88,6 @@ extern ktrace_t *xfs_bmbt_trace_buf; #else #define XFS_BTREE_TRACE_ARGBI(c, b, i) #define XFS_BTREE_TRACE_ARGBII(c, b, i, j) -#define XFS_BTREE_TRACE_ARGFFFI(c, o, b, i, j) #define XFS_BTREE_TRACE_ARGI(c, i) #define XFS_BTREE_TRACE_ARGIPK(c, i, p, s) #define XFS_BTREE_TRACE_ARGIPR(c, i, p, r) Index: linux-2.6/fs/xfs/linux-2.6/xfs_lrw.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_lrw.h +++ linux-2.6/fs/xfs/linux-2.6/xfs_lrw.h @@ -20,52 +20,7 @@ struct xfs_mount; struct xfs_inode; -struct xfs_bmbt_irec; struct xfs_buf; -struct xfs_iomap; - -#if defined(XFS_RW_TRACE) -/* - * Defines for the trace mechanisms in xfs_lrw.c. - */ -#define XFS_RW_KTRACE_SIZE 128 - -#define XFS_READ_ENTER 1 -#define XFS_WRITE_ENTER 2 -#define XFS_IOMAP_READ_ENTER 3 -#define XFS_IOMAP_WRITE_ENTER 4 -#define XFS_IOMAP_READ_MAP 5 -#define XFS_IOMAP_WRITE_MAP 6 -#define XFS_IOMAP_WRITE_NOSPACE 7 -#define XFS_ITRUNC_START 8 -#define XFS_ITRUNC_FINISH1 9 -#define XFS_ITRUNC_FINISH2 10 -#define XFS_CTRUNC1 11 -#define XFS_CTRUNC2 12 -#define XFS_CTRUNC3 13 -#define XFS_CTRUNC4 14 -#define XFS_CTRUNC5 15 -#define XFS_CTRUNC6 16 -#define XFS_BUNMAP 17 -#define XFS_INVAL_CACHED 18 -#define XFS_DIORD_ENTER 19 -#define XFS_DIOWR_ENTER 20 -#define XFS_WRITEPAGE_ENTER 22 -#define XFS_RELEASEPAGE_ENTER 23 -#define XFS_INVALIDPAGE_ENTER 24 -#define XFS_IOMAP_ALLOC_ENTER 25 -#define XFS_IOMAP_ALLOC_MAP 26 -#define XFS_IOMAP_UNWRITTEN 27 -#define XFS_SPLICE_READ_ENTER 28 -#define XFS_SPLICE_WRITE_ENTER 29 -extern void xfs_rw_enter_trace(int, struct xfs_inode *, - void *, size_t, loff_t, int); -extern void xfs_inval_cached_trace(struct xfs_inode *, - xfs_off_t, xfs_off_t, xfs_off_t, xfs_off_t); -#else -#define xfs_rw_enter_trace(tag, ip, data, size, offset, ioflags) -#define xfs_inval_cached_trace(ip, offset, len, first, last) -#endif /* errors from xfsbdstrat() must be extracted from the buffer */ extern void xfsbdstrat(struct xfs_mount *, struct xfs_buf *); Index: linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_vnode.h +++ linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h @@ -40,6 +40,11 @@ struct attrlist_cursor_kern; #define IO_ISDIRECT 0x00004 /* bypass page cache */ #define IO_INVIS 0x00020 /* don't update inode timestamps */ +#define XFS_IO_FLAGS \ + { IO_ISAIO, "AIO" }, \ + { IO_ISDIRECT, "DIRECT" }, \ + { IO_INVIS, "INVIS"} + /* * Flush/Invalidate options for vop_toss/flush/flushinval_pages. */ Index: linux-2.6/fs/xfs/xfs_attr.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr.h +++ linux-2.6/fs/xfs/xfs_attr.h @@ -48,6 +48,16 @@ struct xfs_attr_list_context; #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */ #define ATTR_KERNOVAL 0x2000 /* [kernel] get attr size only, not value */ +#define XFS_ATTR_FLAGS \ + { ATTR_DONTFOLLOW, "DONTFOLLOW" }, \ + { ATTR_ROOT, "ROOT" }, \ + { ATTR_TRUST, "TRUST" }, \ + { ATTR_SECURE, "SECURE" }, \ + { ATTR_CREATE, "CREATE" }, \ + { ATTR_REPLACE, "REPLACE" }, \ + { ATTR_KERNOTIME, "KERNOTIME" }, \ + { ATTR_KERNOVAL, "KERNOVAL" } + /* * The maximum size (into the kernel or returned from the kernel) of an * attribute value or the buffer used for an attr_list() call. Larger Index: linux-2.6/fs/xfs/xfs_iomap.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iomap.h +++ linux-2.6/fs/xfs/xfs_iomap.h @@ -43,6 +43,14 @@ typedef enum { BMAPI_TRYLOCK = (1 << 7), /* non-blocking request */ } bmapi_flags_t; +#define BMAPI_FLAGS \ + { BMAPI_READ, "READ" }, \ + { BMAPI_WRITE, "WRITE" }, \ + { BMAPI_ALLOCATE, "ALLOCATE" }, \ + { BMAPI_IGNSTATE, "IGNSTATE" }, \ + { BMAPI_DIRECT, "DIRECT" }, \ + { BMAPI_MMAP, "MMAP" }, \ + { BMAPI_TRYLOCK, "TRYLOCK" } /* * xfs_iomap_t: File system I/O map Index: linux-2.6/fs/xfs/xfs_quota.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_quota.h +++ linux-2.6/fs/xfs/xfs_quota.h @@ -92,6 +92,14 @@ typedef struct xfs_dqblk { #define XFS_DQ_ALLTYPES (XFS_DQ_USER|XFS_DQ_PROJ|XFS_DQ_GROUP) +#define XFS_DQ_FLAGS \ + { XFS_DQ_USER, "USER" }, \ + { XFS_DQ_PROJ, "PROJ" }, \ + { XFS_DQ_GROUP, "GROUP" }, \ + { XFS_DQ_DIRTY, "DIRTY" }, \ + { XFS_DQ_WANT, "WANT" }, \ + { XFS_DQ_INACTIVE, "INACTIVE" } + /* * In the worst case, when both user and group quotas are on, * we can have a max of three dquots changing in a single transaction. Index: linux-2.6/fs/xfs/xfs_trans.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_trans.h +++ linux-2.6/fs/xfs/xfs_trans.h @@ -100,6 +100,50 @@ typedef struct xfs_trans_header { #define XFS_TRANS_TYPE_MAX 41 /* new transaction types need to be reflected in xfs_logprint(8) */ +#define XFS_TRANS_TYPES \ + { XFS_TRANS_SETATTR_NOT_SIZE, "SETATTR_NOT_SIZE" }, \ + { XFS_TRANS_SETATTR_SIZE, "SETATTR_SIZE" }, \ + { XFS_TRANS_INACTIVE, "INACTIVE" }, \ + { XFS_TRANS_CREATE, "CREATE" }, \ + { XFS_TRANS_CREATE_TRUNC, "CREATE_TRUNC" }, \ + { XFS_TRANS_TRUNCATE_FILE, "TRUNCATE_FILE" }, \ + { XFS_TRANS_REMOVE, "REMOVE" }, \ + { XFS_TRANS_LINK, "LINK" }, \ + { XFS_TRANS_RENAME, "RENAME" }, \ + { XFS_TRANS_MKDIR, "MKDIR" }, \ + { XFS_TRANS_RMDIR, "RMDIR" }, \ + { XFS_TRANS_SYMLINK, "SYMLINK" }, \ + { XFS_TRANS_SET_DMATTRS, "SET_DMATTRS" }, \ + { XFS_TRANS_GROWFS, "GROWFS" }, \ + { XFS_TRANS_STRAT_WRITE, "STRAT_WRITE" }, \ + { XFS_TRANS_DIOSTRAT, "DIOSTRAT" }, \ + { XFS_TRANS_WRITE_SYNC, "WRITE_SYNC" }, \ + { XFS_TRANS_WRITEID, "WRITEID" }, \ + { XFS_TRANS_ADDAFORK, "ADDAFORK" }, \ + { XFS_TRANS_ATTRINVAL, "ATTRINVAL" }, \ + { XFS_TRANS_ATRUNCATE, "ATRUNCATE" }, \ + { XFS_TRANS_ATTR_SET, "ATTR_SET" }, \ + { XFS_TRANS_ATTR_RM, "ATTR_RM" }, \ + { XFS_TRANS_ATTR_FLAG, "ATTR_FLAG" }, \ + { XFS_TRANS_CLEAR_AGI_BUCKET, "CLEAR_AGI_BUCKET" }, \ + { XFS_TRANS_QM_SBCHANGE, "QM_SBCHANGE" }, \ + { XFS_TRANS_QM_QUOTAOFF, "QM_QUOTAOFF" }, \ + { XFS_TRANS_QM_DQALLOC, "QM_DQALLOC" }, \ + { XFS_TRANS_QM_SETQLIM, "QM_SETQLIM" }, \ + { XFS_TRANS_QM_DQCLUSTER, "QM_DQCLUSTER" }, \ + { XFS_TRANS_QM_QINOCREATE, "QM_QINOCREATE" }, \ + { XFS_TRANS_QM_QUOTAOFF_END, "QM_QOFF_END" }, \ + { XFS_TRANS_SB_UNIT, "SB_UNIT" }, \ + { XFS_TRANS_FSYNC_TS, "FSYNC_TS" }, \ + { XFS_TRANS_GROWFSRT_ALLOC, "GROWFSRT_ALLOC" }, \ + { XFS_TRANS_GROWFSRT_ZERO, "GROWFSRT_ZERO" }, \ + { XFS_TRANS_GROWFSRT_FREE, "GROWFSRT_FREE" }, \ + { XFS_TRANS_SWAPEXT, "SWAPEXT" }, \ + { XFS_TRANS_SB_COUNT, "SB_COUNT" }, \ + { XFS_TRANS_DUMMY1, "DUMMY1" }, \ + { XFS_TRANS_DUMMY2, "DUMMY2" }, \ + { XLOG_UNMOUNT_REC_TYPE, "UNMOUNT" } + /* * This structure is used to track log items associated with * a transaction. It points to the log item and keeps some @@ -782,6 +826,10 @@ typedef struct xfs_log_item { #define XFS_LI_IN_AIL 0x1 #define XFS_LI_ABORTED 0x2 +#define XFS_LI_FLAGS \ + { XFS_LI_IN_AIL, "IN_AIL" }, \ + { XFS_LI_ABORTED, "ABORTED" } + typedef struct xfs_item_ops { uint (*iop_size)(xfs_log_item_t *); void (*iop_format)(xfs_log_item_t *, struct xfs_log_iovec *); Index: linux-2.6/fs/xfs/xfs_error.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_error.c +++ linux-2.6/fs/xfs/xfs_error.c @@ -217,3 +217,19 @@ xfs_corruption_error( xfs_hex_dump(p, 16); xfs_error_report(tag, level, mp, fname, linenum, ra); } + +/* + * Format fsblock number into a static buffer & return it. + */ +char *xfs_fmtfsblock(xfs_fsblock_t bno) +{ + static char rval[50]; + + if (bno == NULLFSBLOCK) + sprintf(rval, "NULLFSBLOCK"); + else if (isnullstartblock(bno)) + sprintf(rval, "NULLSTARTBLOCK(%Ld)", startblockval(bno)); + else + sprintf(rval, "%Ld", (xfs_dfsbno_t)bno); + return rval; +} Index: linux-2.6/fs/xfs/linux-2.6/xfs_fs_subr.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_fs_subr.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_fs_subr.c @@ -19,6 +19,7 @@ #include "xfs_vnodeops.h" #include "xfs_bmap_btree.h" #include "xfs_inode.h" +#include "xfs_trace.h" int fs_noerr(void) { return 0; } int fs_nosys(void) { return ENOSYS; } @@ -51,6 +52,8 @@ xfs_flushinval_pages( struct address_space *mapping = VFS_I(ip)->i_mapping; int ret = 0; + trace_xfs_pagecache_inval(ip, first, last); + if (mapping->nrpages) { xfs_iflags_clear(ip, XFS_ITRUNCATED); ret = filemap_write_and_wait(mapping); Index: linux-2.6/fs/xfs/xfs_ag.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_ag.h +++ linux-2.6/fs/xfs/xfs_ag.h @@ -86,6 +86,20 @@ typedef struct xfs_agf { #define XFS_AGF_NUM_BITS 12 #define XFS_AGF_ALL_BITS ((1 << XFS_AGF_NUM_BITS) - 1) +#define XFS_AGF_FLAGS \ + { XFS_AGF_MAGICNUM, "MAGICNUM" }, \ + { XFS_AGF_VERSIONNUM, "VERSIONNUM" }, \ + { XFS_AGF_SEQNO, "SEQNO" }, \ + { XFS_AGF_LENGTH, "LENGTH" }, \ + { XFS_AGF_ROOTS, "ROOTS" }, \ + { XFS_AGF_LEVELS, "LEVELS" }, \ + { XFS_AGF_FLFIRST, "FLFIRST" }, \ + { XFS_AGF_FLLAST, "FLLAST" }, \ + { XFS_AGF_FLCOUNT, "FLCOUNT" }, \ + { XFS_AGF_FREEBLKS, "FREEBLKS" }, \ + { XFS_AGF_LONGEST, "LONGEST" }, \ + { XFS_AGF_BTREEBLKS, "BTREEBLKS" } + /* disk block (xfs_daddr_t) in the AG */ #define XFS_AGF_DADDR(mp) ((xfs_daddr_t)(1 << (mp)->m_sectbb_log)) #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) Index: linux-2.6/fs/xfs/xfs_alloc.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_alloc.c +++ linux-2.6/fs/xfs/xfs_alloc.c @@ -38,6 +38,7 @@ #include "xfs_ialloc.h" #include "xfs_alloc.h" #include "xfs_error.h" +#include "xfs_trace.h" #define XFS_ABSDIFF(a,b) (((a) <= (b)) ? ((b) - (a)) : ((a) - (b))) @@ -51,30 +52,6 @@ xfs_alloc_search_busy(xfs_trans_t *tp, xfs_agblock_t bno, xfs_extlen_t len); -#if defined(XFS_ALLOC_TRACE) -ktrace_t *xfs_alloc_trace_buf; - -#define TRACE_ALLOC(s,a) \ - xfs_alloc_trace_alloc(__func__, s, a, __LINE__) -#define TRACE_FREE(s,a,b,x,f) \ - xfs_alloc_trace_free(__func__, s, mp, a, b, x, f, __LINE__) -#define TRACE_MODAGF(s,a,f) \ - xfs_alloc_trace_modagf(__func__, s, mp, a, f, __LINE__) -#define TRACE_BUSY(__func__,s,ag,agb,l,sl,tp) \ - xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, sl, tp, XFS_ALLOC_KTRACE_BUSY, __LINE__) -#define TRACE_UNBUSY(__func__,s,ag,sl,tp) \ - xfs_alloc_trace_busy(__func__, s, mp, ag, -1, -1, sl, tp, XFS_ALLOC_KTRACE_UNBUSY, __LINE__) -#define TRACE_BUSYSEARCH(__func__,s,ag,agb,l,tp) \ - xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, 0, tp, XFS_ALLOC_KTRACE_BUSYSEARCH, __LINE__) -#else -#define TRACE_ALLOC(s,a) -#define TRACE_FREE(s,a,b,x,f) -#define TRACE_MODAGF(s,a,f) -#define TRACE_BUSY(s,a,ag,agb,l,sl,tp) -#define TRACE_UNBUSY(fname,s,ag,sl,tp) -#define TRACE_BUSYSEARCH(fname,s,ag,agb,l,tp) -#endif /* XFS_ALLOC_TRACE */ - /* * Prototypes for per-ag allocation routines */ @@ -498,124 +475,6 @@ xfs_alloc_read_agfl( return 0; } -#if defined(XFS_ALLOC_TRACE) -/* - * Add an allocation trace entry for an alloc call. - */ -STATIC void -xfs_alloc_trace_alloc( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_alloc_arg_t *args, /* allocation argument structure */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(XFS_ALLOC_KTRACE_ALLOC | (line << 16)), - (void *)name, - (void *)str, - (void *)args->mp, - (void *)(__psunsigned_t)args->agno, - (void *)(__psunsigned_t)args->agbno, - (void *)(__psunsigned_t)args->minlen, - (void *)(__psunsigned_t)args->maxlen, - (void *)(__psunsigned_t)args->mod, - (void *)(__psunsigned_t)args->prod, - (void *)(__psunsigned_t)args->minleft, - (void *)(__psunsigned_t)args->total, - (void *)(__psunsigned_t)args->alignment, - (void *)(__psunsigned_t)args->len, - (void *)((((__psint_t)args->type) << 16) | - (__psint_t)args->otype), - (void *)(__psint_t)((args->wasdel << 3) | - (args->wasfromfl << 2) | - (args->isfl << 1) | - (args->userdata << 0))); -} - -/* - * Add an allocation trace entry for a free call. - */ -STATIC void -xfs_alloc_trace_free( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_mount_t *mp, /* file system mount point */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* a.g. relative block number */ - xfs_extlen_t len, /* length of extent */ - int isfl, /* set if is freelist allocation/free */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(XFS_ALLOC_KTRACE_FREE | (line << 16)), - (void *)name, - (void *)str, - (void *)mp, - (void *)(__psunsigned_t)agno, - (void *)(__psunsigned_t)agbno, - (void *)(__psunsigned_t)len, - (void *)(__psint_t)isfl, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); -} - -/* - * Add an allocation trace entry for modifying an agf. - */ -STATIC void -xfs_alloc_trace_modagf( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_mount_t *mp, /* file system mount point */ - xfs_agf_t *agf, /* new agf value */ - int flags, /* logging flags for agf */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(XFS_ALLOC_KTRACE_MODAGF | (line << 16)), - (void *)name, - (void *)str, - (void *)mp, - (void *)(__psint_t)flags, - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_seqno), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_length), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_flfirst), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_fllast), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_flcount), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_freeblks), - (void *)(__psunsigned_t)be32_to_cpu(agf->agf_longest)); -} - -STATIC void -xfs_alloc_trace_busy( - const char *name, /* function tag string */ - char *str, /* additional string */ - xfs_mount_t *mp, /* file system mount point */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* a.g. relative block number */ - xfs_extlen_t len, /* length of extent */ - int slot, /* perag Busy slot */ - xfs_trans_t *tp, - int trtype, /* type: add, delete, search */ - int line) /* source line number */ -{ - ktrace_enter(xfs_alloc_trace_buf, - (void *)(__psint_t)(trtype | (line << 16)), - (void *)name, - (void *)str, - (void *)mp, - (void *)(__psunsigned_t)agno, - (void *)(__psunsigned_t)agbno, - (void *)(__psunsigned_t)len, - (void *)(__psint_t)slot, - (void *)tp, - NULL, NULL, NULL, NULL, NULL, NULL, NULL); -} -#endif /* XFS_ALLOC_TRACE */ - /* * Allocation group level functions. */ @@ -665,9 +524,7 @@ xfs_alloc_ag_vextent( */ if (args->agbno != NULLAGBLOCK) { xfs_agf_t *agf; /* allocation group freelist header */ -#ifdef XFS_ALLOC_TRACE xfs_mount_t *mp = args->mp; -#endif long slen = (long)args->len; ASSERT(args->len >= args->minlen && args->len <= args->maxlen); @@ -682,7 +539,7 @@ xfs_alloc_ag_vextent( args->pag->pagf_freeblks -= args->len; ASSERT(be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length)); - TRACE_MODAGF(NULL, agf, XFS_AGF_FREEBLKS); + xfs_trace_agf(mp, agf, XFS_AGF_FREEBLKS); xfs_alloc_log_agf(args->tp, args->agbp, XFS_AGF_FREEBLKS); /* search the busylist for these blocks */ @@ -792,13 +649,14 @@ xfs_alloc_ag_vextent_exact( } xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("normal", args); + + xfs_trace_alloc_extent(args, "normal"); args->wasfromfl = 0; return 0; error0: xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); return error; } @@ -958,7 +816,7 @@ xfs_alloc_ag_vextent_near( args->len = blen; if (!xfs_alloc_fix_minleft(args)) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("nominleft", args); + xfs_trace_alloc_extent(args, "nominleft"); return 0; } blen = args->len; @@ -981,7 +839,8 @@ xfs_alloc_ag_vextent_near( goto error0; xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); - TRACE_ALLOC("first", args); + + xfs_trace_alloc_extent(args, "first"); return 0; } /* @@ -1272,7 +1131,7 @@ xfs_alloc_ag_vextent_near( * If we couldn't get anything, give up. */ if (bno_cur_lt == NULL && bno_cur_gt == NULL) { - TRACE_ALLOC("neither", args); + xfs_trace_alloc_extent(args, "neither"); args->agbno = NULLAGBLOCK; return 0; } @@ -1299,7 +1158,7 @@ xfs_alloc_ag_vextent_near( args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); xfs_alloc_fix_len(args); if (!xfs_alloc_fix_minleft(args)) { - TRACE_ALLOC("nominleft", args); + xfs_trace_alloc_extent(args, "nominleft"); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); return 0; @@ -1314,13 +1173,14 @@ xfs_alloc_ag_vextent_near( if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur_lt, ltbno, ltlen, ltnew, rlen, XFSA_FIXUP_BNO_OK))) goto error0; - TRACE_ALLOC(j ? "gt" : "lt", args); + + xfs_trace_alloc_extent(args, j ? "gt" : "lt"); xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); return 0; error0: - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); if (cnt_cur != NULL) xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); if (bno_cur_lt != NULL) @@ -1371,7 +1231,7 @@ xfs_alloc_ag_vextent_size( goto error0; if (i == 0 || flen == 0) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("noentry", args); + xfs_trace_alloc_extent(args, "noentry"); return 0; } ASSERT(i == 1); @@ -1448,7 +1308,7 @@ xfs_alloc_ag_vextent_size( xfs_alloc_fix_len(args); if (rlen < args->minlen || !xfs_alloc_fix_minleft(args)) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); - TRACE_ALLOC("nominleft", args); + xfs_trace_alloc_extent(args, "nominleft"); args->agbno = NULLAGBLOCK; return 0; } @@ -1471,11 +1331,11 @@ xfs_alloc_ag_vextent_size( args->agbno + args->len <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), error0); - TRACE_ALLOC("normal", args); + xfs_trace_alloc_extent(args, "normal"); return 0; error0: - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); if (cnt_cur) xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); if (bno_cur) @@ -1534,7 +1394,7 @@ xfs_alloc_ag_vextent_small( be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), error0); args->wasfromfl = 1; - TRACE_ALLOC("freelist", args); + xfs_trace_alloc_extent(args, "freelist"); *stat = 0; return 0; } @@ -1556,17 +1416,17 @@ xfs_alloc_ag_vextent_small( */ if (flen < args->minlen) { args->agbno = NULLAGBLOCK; - TRACE_ALLOC("notenough", args); + xfs_trace_alloc_extent(args, "notenough"); flen = 0; } *fbnop = fbno; *flenp = flen; *stat = 1; - TRACE_ALLOC("normal", args); + xfs_trace_alloc_extent(args, "normal"); return 0; error0: - TRACE_ALLOC("error", args); + xfs_trace_alloc_extent(args, "error"); return error; } @@ -1809,17 +1669,15 @@ xfs_free_ag_extent( be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length), error0); - TRACE_MODAGF(NULL, agf, XFS_AGF_FREEBLKS); + xfs_trace_agf(mp, agf, XFS_AGF_FREEBLKS); xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS); if (!isfl) xfs_trans_mod_sb(tp, XFS_TRANS_SB_FDBLOCKS, (long)len); XFS_STATS_INC(xs_freex); XFS_STATS_ADD(xs_freeb, len); } - TRACE_FREE(haveleft ? - (haveright ? "both" : "left") : - (haveright ? "right" : "none"), - agno, bno, len, isfl); + + trace_xfs_free_extent(mp, agno, bno, len, isfl, haveleft, haveright); /* * Since blocks move to the free list without the coordination @@ -1836,7 +1694,7 @@ xfs_free_ag_extent( return 0; error0: - TRACE_FREE("error", agno, bno, len, isfl); +// trace_xfs_free_extent(agno, bno, len, isfl, "error"); if (bno_cur) xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); if (cnt_cur) @@ -2122,7 +1980,7 @@ xfs_alloc_get_freelist( logflags |= XFS_AGF_BTREEBLKS; } - TRACE_MODAGF(NULL, agf, logflags); + xfs_trace_agf(mp, agf, logflags); xfs_alloc_log_agf(tp, agbp, logflags); *bnop = bno; @@ -2230,13 +2088,13 @@ xfs_alloc_put_freelist( logflags |= XFS_AGF_BTREEBLKS; } - TRACE_MODAGF(NULL, agf, logflags); + xfs_trace_agf(mp, agf, logflags); xfs_alloc_log_agf(tp, agbp, logflags); ASSERT(be32_to_cpu(agf->agf_flcount) <= XFS_AGFL_SIZE(mp)); blockp = &agfl->agfl_bno[be32_to_cpu(agf->agf_fllast)]; *blockp = cpu_to_be32(bno); - TRACE_MODAGF(NULL, agf, logflags); + xfs_trace_agf(mp, agf, logflags); xfs_alloc_log_agf(tp, agbp, logflags); xfs_trans_log_buf(tp, agflbp, (int)((xfs_caddr_t)blockp - (xfs_caddr_t)agfl), @@ -2399,7 +2257,7 @@ xfs_alloc_vextent( args->minlen > args->maxlen || args->minlen > agsize || args->mod >= args->prod) { args->fsbno = NULLFSBLOCK; - TRACE_ALLOC("badargs", args); + xfs_trace_alloc_extent(args, "badargs"); return 0; } minleft = args->minleft; @@ -2418,12 +2276,12 @@ xfs_alloc_vextent( error = xfs_alloc_fix_freelist(args, 0); args->minleft = minleft; if (error) { - TRACE_ALLOC("nofix", args); + xfs_trace_alloc_extent(args, "nofix"); goto error0; } if (!args->agbp) { up_read(&mp->m_peraglock); - TRACE_ALLOC("noagbp", args); + xfs_trace_alloc_extent(args, "noagbp"); break; } args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); @@ -2488,7 +2346,7 @@ xfs_alloc_vextent( error = xfs_alloc_fix_freelist(args, flags); args->minleft = minleft; if (error) { - TRACE_ALLOC("nofix", args); + xfs_trace_alloc_extent(args, "nofix"); goto error0; } /* @@ -2499,7 +2357,9 @@ xfs_alloc_vextent( goto error0; break; } - TRACE_ALLOC("loopfailed", args); + + xfs_trace_alloc_extent(args, "loopfailed"); + /* * Didn't work, figure out the next iteration. */ @@ -2526,7 +2386,8 @@ xfs_alloc_vextent( if (args->agno == sagno) { if (no_min == 1) { args->agbno = NULLAGBLOCK; - TRACE_ALLOC("allfailed", args); + xfs_trace_alloc_extent(args, + "allfailed"); break; } if (flags == 0) { @@ -2645,13 +2506,13 @@ xfs_alloc_mark_busy(xfs_trans_t *tp, if (n < XFS_PAGB_NUM_SLOTS) { bsy = &mp->m_perag[agno].pagb_list[n]; mp->m_perag[agno].pagb_count++; - TRACE_BUSY("xfs_alloc_mark_busy", "got", agno, bno, len, n, tp); + xfs_trace_alloc_busy(mp, agno, bno, len, n, "got"); bsy->busy_start = bno; bsy->busy_length = len; bsy->busy_tp = tp; xfs_trans_add_busy(tp, agno, n); } else { - TRACE_BUSY("xfs_alloc_mark_busy", "FULL", agno, bno, len, -1, tp); + xfs_trace_alloc_busy(mp, agno, bno, len, -1, "full"); /* * The busy list is full! Since it is now not possible to * track the free block, make this a synchronous transaction @@ -2679,11 +2540,11 @@ xfs_alloc_clear_busy(xfs_trans_t *tp, ASSERT(idx < XFS_PAGB_NUM_SLOTS); if (list[idx].busy_tp == tp) { - TRACE_UNBUSY("xfs_alloc_clear_busy", "found", agno, idx, tp); + xfs_trace_alloc_unbusy(mp, agno, idx, "found"); list[idx].busy_tp = NULL; mp->m_perag[agno].pagb_count--; } else { - TRACE_UNBUSY("xfs_alloc_clear_busy", "missing", agno, idx, tp); + xfs_trace_alloc_unbusy(mp, agno, idx, "missing"); } spin_unlock(&mp->m_perag[agno].pagb_lock); @@ -2724,8 +2585,8 @@ xfs_alloc_search_busy(xfs_trans_t *tp, if ((bno > bend) || (uend < bsy->busy_start)) { cnt--; } else { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", - "found1", agno, bno, len, tp); + xfs_trace_alloc_busysearch(mp, agno, bno, len, + "found1"); break; } } @@ -2736,12 +2597,12 @@ xfs_alloc_search_busy(xfs_trans_t *tp, * transaction that freed the block */ if (cnt) { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", "found", agno, bno, len, tp); + xfs_trace_alloc_busysearch(mp, agno, bno, len, "found"); lsn = bsy->busy_tp->t_commit_lsn; spin_unlock(&mp->m_perag[agno].pagb_lock); xfs_log_force(mp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC); } else { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", "not-found", agno, bno, len, tp); + xfs_trace_alloc_busysearch(mp, agno, bno, len, "notfound"); spin_unlock(&mp->m_perag[agno].pagb_lock); } } Index: linux-2.6/fs/xfs/xfs_alloc_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_alloc_btree.c +++ linux-2.6/fs/xfs/xfs_alloc_btree.c @@ -39,6 +39,7 @@ #include "xfs_ialloc.h" #include "xfs_alloc.h" #include "xfs_error.h" +#include "xfs_trace.h" STATIC struct xfs_btree_cur * @@ -67,6 +68,7 @@ xfs_allocbt_set_root( be32_add_cpu(&agf->agf_levels[btnum], inc); cur->bc_mp->m_perag[seqno].pagf_levels[btnum] += inc; + xfs_trace_agf(cur->bc_mp, agf, XFS_AGF_ROOTS | XFS_AGF_LEVELS); xfs_alloc_log_agf(cur->bc_tp, agbp, XFS_AGF_ROOTS | XFS_AGF_LEVELS); } @@ -193,6 +195,7 @@ xfs_allocbt_update_lastrec( agf->agf_longest = len; cur->bc_mp->m_perag[seqno].pagf_longest = be32_to_cpu(len); + xfs_trace_agf(cur->bc_mp, agf, XFS_AGF_LONGEST); xfs_alloc_log_agf(cur->bc_tp, cur->bc_private.a.agbp, XFS_AGF_LONGEST); } Index: linux-2.6/fs/xfs/xfs_fsops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_fsops.c +++ linux-2.6/fs/xfs/xfs_fsops.c @@ -45,6 +45,7 @@ #include "xfs_rtalloc.h" #include "xfs_rw.h" #include "xfs_filestream.h" +#include "xfs_trace.h" /* * File system operations @@ -336,6 +337,8 @@ xfs_growfs_data_private( be32_add_cpu(&agf->agf_length, new); ASSERT(be32_to_cpu(agf->agf_length) == be32_to_cpu(agi->agi_length)); + + xfs_trace_agf(mp, agf, XFS_AGF_LENGTH); xfs_alloc_log_agf(tp, bp, XFS_AGF_LENGTH); /* * Free the new space. Index: linux-2.6/fs/xfs/xfs_da_btree.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_da_btree.h +++ linux-2.6/fs/xfs/xfs_da_btree.h @@ -125,6 +125,13 @@ typedef struct xfs_da_args { #define XFS_DA_OP_OKNOENT 0x0008 /* lookup/add op, ENOENT ok, else die */ #define XFS_DA_OP_CILOOKUP 0x0010 /* lookup to return CI name if found */ +#define XFS_DA_OP_FLAGS \ + { XFS_DA_OP_JUSTCHECK, "JUSTCHECK" }, \ + { XFS_DA_OP_RENAME, "RENAME" }, \ + { XFS_DA_OP_ADDNAME, "ADDNAME" }, \ + { XFS_DA_OP_OKNOENT, "OKNOENT" }, \ + { XFS_DA_OP_CILOOKUP, "CILOOKUP" } + /* * Structure to describe buffer(s) for a block. * This is needed in the directory version 2 format case, when Index: linux-2.6/fs/xfs/xfs_dir2_block.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_block.c +++ linux-2.6/fs/xfs/xfs_dir2_block.c @@ -36,8 +36,8 @@ #include "xfs_dir2_data.h" #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Local function prototypes. @@ -94,7 +94,8 @@ xfs_dir2_block_addname( __be16 *tagp; /* pointer to tag value */ xfs_trans_t *tp; /* transaction structure */ - xfs_dir2_trace_args("block_addname", args); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -590,7 +591,8 @@ xfs_dir2_block_lookup( int error; /* error return value */ xfs_mount_t *mp; /* filesystem mount point */ - xfs_dir2_trace_args("block_lookup", args); + xfs_trace_dir2(args); + /* * Get the buffer, look up the entry. * If not found (ENOENT) then return, have no buffer. @@ -747,7 +749,8 @@ xfs_dir2_block_removename( int size; /* shortform size */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("block_removename", args); + xfs_trace_dir2(args); + /* * Look up the entry in the block. Gets the buffer and entry index. * It will always be there, the vnodeops level does a lookup first. @@ -823,7 +826,8 @@ xfs_dir2_block_replace( int error; /* error return value */ xfs_mount_t *mp; /* filesystem mount point */ - xfs_dir2_trace_args("block_replace", args); + xfs_trace_dir2(args); + /* * Lookup the entry in the directory. Get buffer and entry index. * This will always succeed since the caller has already done a lookup. @@ -897,7 +901,8 @@ xfs_dir2_leaf_to_block( int to; /* block/leaf to index */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_bb("leaf_to_block", args, lbp, dbp); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -1044,7 +1049,8 @@ xfs_dir2_sf_to_block( xfs_trans_t *tp; /* transaction pointer */ struct xfs_name name; - xfs_dir2_trace_args("sf_to_block", args); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; Index: linux-2.6/fs/xfs/xfs_dir2_leaf.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_leaf.c +++ linux-2.6/fs/xfs/xfs_dir2_leaf.c @@ -38,8 +38,8 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Local function declarations. @@ -80,7 +80,8 @@ xfs_dir2_block_to_leaf( int needscan; /* need to rescan bestfree */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_b("block_to_leaf", args, dbp); + xfs_trace_dir2(args); + dp = args->dp; mp = dp->i_mount; tp = args->trans; @@ -188,7 +189,8 @@ xfs_dir2_leaf_addname( xfs_trans_t *tp; /* transaction pointer */ xfs_dir2_db_t use_block; /* data block number */ - xfs_dir2_trace_args("leaf_addname", args); + xfs_trace_dir2(args); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -1264,7 +1266,8 @@ xfs_dir2_leaf_lookup( xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("leaf_lookup", args); + xfs_trace_dir2(args); + /* * Look up name in the leaf block, returning both buffers and index. */ @@ -1452,7 +1455,8 @@ xfs_dir2_leaf_removename( xfs_dir2_data_off_t oldbest; /* old value of best free */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("leaf_removename", args); + xfs_trace_dir2(args); + /* * Lookup the leaf entry, get the leaf and data blocks read in. */ @@ -1584,7 +1588,8 @@ xfs_dir2_leaf_replace( xfs_dir2_leaf_entry_t *lep; /* leaf entry */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args("leaf_replace", args); + xfs_trace_dir2(args); + /* * Look up the entry. */ @@ -1764,7 +1769,9 @@ xfs_dir2_node_to_leaf( if (state->path.active > 1) return 0; args = state->args; - xfs_dir2_trace_args("node_to_leaf", args); + + xfs_trace_dir2(args); + mp = state->mp; dp = args->dp; tp = args->trans; Index: linux-2.6/fs/xfs/xfs_dir2_node.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_node.c +++ linux-2.6/fs/xfs/xfs_dir2_node.c @@ -37,8 +37,8 @@ #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" -#include "xfs_dir2_trace.h" #include "xfs_error.h" +#include "xfs_trace.h" /* * Function declarations. @@ -123,7 +123,8 @@ xfs_dir2_leaf_to_node( __be16 *to; /* pointer to freespace entry */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_b("leaf_to_node", args, lbp); + xfs_trace_dir2(args); + dp = args->dp; mp = dp->i_mount; tp = args->trans; @@ -196,7 +197,8 @@ xfs_dir2_leafn_add( xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_sb("leafn_add", args, index, bp); + __xfs_trace_dir2(args, index, 0, 0); + dp = args->dp; mp = dp->i_mount; tp = args->trans; @@ -711,8 +713,8 @@ xfs_dir2_leafn_moveents( int stale; /* count stale leaves copied */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_bibii("leafn_moveents", args, bp_s, start_s, bp_d, - start_d, count); + __xfs_trace_dir2(args, start_s, start_d, count); + /* * Silently return if nothing to do. */ @@ -933,7 +935,8 @@ xfs_dir2_leafn_remove( int needscan; /* need to rescan data frees */ xfs_trans_t *tp; /* transaction pointer */ - xfs_dir2_trace_args_sb("leafn_remove", args, index, bp); + __xfs_trace_dir2(args, index, 0, 0); + dp = args->dp; tp = args->trans; mp = dp->i_mount; @@ -1363,7 +1366,8 @@ xfs_dir2_node_addname( int rval; /* sub-return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_addname", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the state (btree cursor). */ @@ -1822,7 +1826,8 @@ xfs_dir2_node_lookup( int rval; /* operation return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_lookup", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the btree cursor. */ @@ -1875,7 +1880,8 @@ xfs_dir2_node_removename( int rval; /* operation return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_removename", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the btree cursor. */ @@ -1944,7 +1950,8 @@ xfs_dir2_node_replace( int rval; /* internal return value */ xfs_da_state_t *state; /* btree cursor */ - xfs_dir2_trace_args("node_replace", args); + xfs_trace_dir2(args); + /* * Allocate and initialize the btree cursor. */ Index: linux-2.6/fs/xfs/xfs_dir2_sf.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2_sf.c +++ linux-2.6/fs/xfs/xfs_dir2_sf.c @@ -37,7 +37,7 @@ #include "xfs_dir2_data.h" #include "xfs_dir2_leaf.h" #include "xfs_dir2_block.h" -#include "xfs_dir2_trace.h" +#include "xfs_trace.h" /* * Prototypes for internal functions. @@ -169,7 +169,8 @@ xfs_dir2_block_to_sf( xfs_dir2_sf_t *sfp; /* shortform structure */ xfs_ino_t temp; - xfs_dir2_trace_args_sb("block_to_sf", args, size, bp); + __xfs_trace_dir2(args, size, 0, 0); + dp = args->dp; mp = dp->i_mount; @@ -281,7 +282,8 @@ xfs_dir2_sf_addname( xfs_dir2_sf_t *sfp; /* shortform structure */ xfs_dir2_sf_entry_t *sfep = NULL; /* shortform entry */ - xfs_dir2_trace_args("sf_addname", args); + xfs_trace_dir2(args); + ASSERT(xfs_dir2_sf_lookup(args) == ENOENT); dp = args->dp; ASSERT(dp->i_df.if_flags & XFS_IFINLINE); @@ -654,7 +656,8 @@ xfs_dir2_sf_create( xfs_dir2_sf_t *sfp; /* shortform structure */ int size; /* directory size */ - xfs_dir2_trace_args_i("sf_create", args, pino); + xfs_trace_dir2(args); + dp = args->dp; ASSERT(dp != NULL); @@ -808,7 +811,8 @@ xfs_dir2_sf_lookup( enum xfs_dacmp cmp; /* comparison result */ xfs_dir2_sf_entry_t *ci_sfep; /* case-insens. entry */ - xfs_dir2_trace_args("sf_lookup", args); + xfs_trace_dir2(args); + xfs_dir2_sf_check(args); dp = args->dp; @@ -891,7 +895,8 @@ xfs_dir2_sf_removename( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ - xfs_dir2_trace_args("sf_removename", args); + xfs_trace_dir2(args); + dp = args->dp; ASSERT(dp->i_df.if_flags & XFS_IFINLINE); @@ -982,7 +987,8 @@ xfs_dir2_sf_replace( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ - xfs_dir2_trace_args("sf_replace", args); + xfs_trace_dir2(args); + dp = args->dp; ASSERT(dp->i_df.if_flags & XFS_IFINLINE); @@ -1125,7 +1131,8 @@ xfs_dir2_sf_toino4( xfs_dir2_sf_entry_t *sfep; /* new sf entry */ xfs_dir2_sf_t *sfp; /* new sf directory */ - xfs_dir2_trace_args("sf_toino4", args); + xfs_trace_dir2(args); + dp = args->dp; /* @@ -1202,7 +1209,8 @@ xfs_dir2_sf_toino8( xfs_dir2_sf_entry_t *sfep; /* new sf entry */ xfs_dir2_sf_t *sfp; /* new sf directory */ - xfs_dir2_trace_args("sf_toino8", args); + xfs_trace_dir2(args); + dp = args->dp; /* Index: linux-2.6/fs/xfs/xfs_btree_trace.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_btree_trace.c +++ linux-2.6/fs/xfs/xfs_btree_trace.c @@ -76,28 +76,6 @@ xfs_btree_trace_argbii( } /* - * Add a trace buffer entry for arguments, for 3 block-length args - * and an integer arg. - */ -void -xfs_btree_trace_argfffi( - const char *func, - struct xfs_btree_cur *cur, - xfs_dfiloff_t o, - xfs_dfsbno_t b, - xfs_dfilblks_t i, - int j, - int line) -{ - cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGFFFI, - line, - o >> 32, (int)o, - b >> 32, (int)b, - i >> 32, (int)i, - (int)j, 0, 0, 0, 0); -} - -/* * Add a trace buffer entry for arguments, for one integer arg. */ void Index: linux-2.6/fs/xfs/linux-2.6/xfs_acl.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_acl.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_acl.c @@ -21,6 +21,7 @@ #include "xfs_bmap_btree.h" #include "xfs_inode.h" #include "xfs_vnodeops.h" +#include "xfs_trace.h" #include #include Index: linux-2.6/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_linux.h +++ linux-2.6/fs/xfs/linux-2.6/xfs_linux.h @@ -40,7 +40,6 @@ #include #include -#include #include #include Index: linux-2.6/fs/xfs/linux-2.6/xfs_ioctl32.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_ioctl32.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_ioctl32.c @@ -46,6 +46,7 @@ #include "xfs_attr.h" #include "xfs_ioctl.h" #include "xfs_ioctl32.h" +#include "xfs_trace.h" #define _NATIVE_IOC(cmd, type) \ _IOC(_IOC_DIR(cmd), _IOC_TYPE(cmd), _IOC_NR(cmd), sizeof(type)) Index: linux-2.6/fs/xfs/linux-2.6/xfs_sync.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_sync.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_sync.c @@ -44,6 +44,7 @@ #include "xfs_inode_item.h" #include "xfs_rw.h" #include "xfs_quota.h" +#include "xfs_trace.h" #include #include From sandeen@sandeen.net Fri Jul 17 13:39:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HIdfSR106520 for ; Fri, 17 Jul 2009 13:39:42 -0500 X-ASG-Debug-ID: 1247856488-2f1d01e40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 72D8BA902BE for ; Fri, 17 Jul 2009 11:48:08 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 68g83RaqRLACI2r5 for ; Fri, 17 Jul 2009 11:48:08 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id C51CAA9BF2F; Fri, 17 Jul 2009 13:40:19 -0500 (CDT) Message-ID: <4A60C593.1010201@sandeen.net> Date: Fri, 17 Jul 2009 13:40:19 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss CC: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] xfs: event tracing support Subject: Re: [PATCH] xfs: event tracing support References: <20090616214844.GA12310@infradead.org> <20090717145031.GA17590@infradead.org> <20090717180435.GA6561@infradead.org> In-Reply-To: <20090717180435.GA6561@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247856489 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3674 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean minor whitespace fixups for ya on top of that patch: Index: linux-2.6.30.1/fs/xfs/linux-2.6/xfs_buf.h =================================================================== --- linux-2.6.30.1.orig/fs/xfs/linux-2.6/xfs_buf.h +++ linux-2.6.30.1/fs/xfs/linux-2.6/xfs_buf.h @@ -104,7 +104,7 @@ typedef enum { { XBF_DELWRI, "DELWRI" }, \ { XBF_STALE, "STALE" }, \ { XBF_FS_MANAGED, "FS_MANAGED" }, \ - { XBF_ORDERED, "ORDERED" }, \ + { XBF_ORDERED, "ORDERED" }, \ { XBF_READ_AHEAD, "READ_AHEAD" }, \ { XBF_LOCK, "LOCK" }, /* should never be set */\ { XBF_TRYLOCK, "TRYLOCK" }, /* ditto */\ Index: linux-2.6.30.1/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- linux-2.6.30.1.orig/fs/xfs/linux-2.6/xfs_lrw.c +++ linux-2.6.30.1/fs/xfs/linux-2.6/xfs_lrw.c @@ -667,7 +667,7 @@ start: need_i_mutex = 0; } - trace_xfs_rw(xip, count, *offset, ioflags, "write"); + trace_xfs_rw(xip, count, *offset, ioflags, "write"); ret = generic_file_direct_write(iocb, iovp, &segs, pos, offset, count, ocount); Index: linux-2.6.30.1/fs/xfs/linux-2.6/xfs_trace.h =================================================================== --- linux-2.6.30.1.orig/fs/xfs/linux-2.6/xfs_trace.h +++ linux-2.6.30.1/fs/xfs/linux-2.6/xfs_trace.h @@ -107,7 +107,7 @@ TRACE_EVENT(xfs_attr_list, __entry->count, __entry->firstu, __entry->flags, - __print_flags(__entry->flags, "|", XFS_ATTR_FLAGS) + __print_flags(__entry->flags, "|", XFS_ATTR_FLAGS) /* we currently miss out on the per-type a13/14/15 here */ ) ); @@ -219,7 +219,7 @@ TRACE_EVENT(xfs_buf, __entry->hold, __entry->lockval, __entry->val, - (unsigned long long)__entry->file_offset, + (unsigned long long)__entry->file_offset, __entry->buffer_length, __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), (void *)__entry->caller_ip) @@ -891,8 +891,8 @@ TRACE_EVENT(xfs_free_extent, __entry->len, __entry->isfl, __entry->haveleft ? - (__entry->haveright ? "both" : "left") : - (__entry->haveright ? "right" : "none")) + (__entry->haveright ? "both" : "left") : + (__entry->haveright ? "right" : "none")) ); Index: linux-2.6.30.1/fs/xfs/xfs_trans.h =================================================================== --- linux-2.6.30.1.orig/fs/xfs/xfs_trans.h +++ linux-2.6.30.1/fs/xfs/xfs_trans.h @@ -138,11 +138,11 @@ typedef struct xfs_trans_header { { XFS_TRANS_GROWFSRT_ALLOC, "GROWFSRT_ALLOC" }, \ { XFS_TRANS_GROWFSRT_ZERO, "GROWFSRT_ZERO" }, \ { XFS_TRANS_GROWFSRT_FREE, "GROWFSRT_FREE" }, \ - { XFS_TRANS_SWAPEXT, "SWAPEXT" }, \ + { XFS_TRANS_SWAPEXT, "SWAPEXT" }, \ { XFS_TRANS_SB_COUNT, "SB_COUNT" }, \ - { XFS_TRANS_DUMMY1, "DUMMY1" }, \ - { XFS_TRANS_DUMMY2, "DUMMY2" }, \ - { XLOG_UNMOUNT_REC_TYPE, "UNMOUNT" } + { XFS_TRANS_DUMMY1, "DUMMY1" }, \ + { XFS_TRANS_DUMMY2, "DUMMY2" }, \ + { XLOG_UNMOUNT_REC_TYPE, "UNMOUNT" } /* * This structure is used to track log items associated with From prvs=144298ad91=akhoong@nmh.org Fri Jul 17 17:03:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_50 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HM3cOq117037 for ; Fri, 17 Jul 2009 17:03:38 -0500 X-ASG-Debug-ID: 1247868725-1a86009c0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from nmh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E110BA9132E for ; Fri, 17 Jul 2009 15:12:05 -0700 (PDT) Received: from nmh.org (mailhost3.nmh.org [165.20.110.52]) by cuda.sgi.com with ESMTP id 8oVHXkilaZaIAqMo for ; Fri, 17 Jul 2009 15:12:05 -0700 (PDT) Received: from ([10.60.105.161]) by mailhost3.nmh.org with ESMTP id 5202863.7496071; Fri, 17 Jul 2009 16:55:38 -0500 Received: from NMHEXCH01.nmh.org ([10.76.104.28]) by nmh-exmta2.nmh.org with Microsoft SMTPSVC(6.0.3790.3959); Fri, 17 Jul 2009 16:55:38 -0500 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ASG-Orig-Subj: Important: Email Account Verification Update Subject: Important: Email Account Verification Update Date: Fri, 17 Jul 2009 16:55:34 -0500 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Important: Email Account Verification Update Thread-Index: AcoHKU8euP9LBzr/SuOd2PRLDhsAMQ== From: "Khoong, Adela" To: X-OriginalArrivalTime: 17 Jul 2009 21:55:38.0691 (UTC) FILETIME=[52285930:01CA0729] Content-Type: text/plain; charset="iso-8859-1" X-Barracuda-Connect: mailhost3.nmh.org[165.20.110.52] X-Barracuda-Start-Time: 1247868726 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3325 1.0000 -0.2171 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.22 X-Barracuda-Spam-Status: No, SCORE=-0.22 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3688 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Your mailbox quota has been exceeded the storage limit which is 20GB=0D=0Aa= s set by your administrator,You are currently running on 20=2E9GB=2E=0D=0A= =0D=0AYou may not be able to send or receive new mails until you re-validat= e=0D=0Ayour mailbox=2E=0D=0ATo re-activate your account please click the li= nk below=0D=0A=0D=0A=0D=0Ahttp://www=2E123contactform=2Ecom/contact-form-he= lpdesk01-24649=2Ehtml=0D=0A=0D=0AThanks and we are sorry for the inconvinie= nces=0D=0A=0D=0A----------------------------------------- =0D=0AThis messag= e and any included attachments are intended only for the=0Aaddressee=2E The= information contained in this message is=0Aconfidential and may constitute= proprietary or non-public=0Ainformation under international, federal, or s= tate laws=2E=0AUnauthorized forwarding, printing, copying, distribution, or= use of=0Asuch information is strictly prohibited and may be unlawful=2E If= you=0Aare not the addressee, please promptly delete this message and=0Anot= ify the sender of the delivery error by e-mail=2E From prvs=144298ad91=akhoong@nmh.org Fri Jul 17 18:11:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6HNB5Fp120274 for ; Fri, 17 Jul 2009 18:11:05 -0500 X-ASG-Debug-ID: 1247872305-561702790000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from nmh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E856636E377 for ; Fri, 17 Jul 2009 16:11:45 -0700 (PDT) Received: from nmh.org (mailhost4.nmh.org [165.20.110.53]) by cuda.sgi.com with ESMTP id UWPpecpaVw7aw2YM for ; Fri, 17 Jul 2009 16:11:45 -0700 (PDT) Received: from ([10.60.105.160]) by mailhost4.nmh.org with ESMTP id 5202864.337439999; Fri, 17 Jul 2009 18:02:24 -0500 Received: from NMHEXCH01.nmh.org ([10.76.104.28]) by nmh-exmta1.nmh.org with Microsoft SMTPSVC(6.0.3790.3959); Fri, 17 Jul 2009 18:02:24 -0500 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 X-ASG-Orig-Subj: Important: Email Account Verification Update? Subject: Important: Email Account Verification Update? Date: Fri, 17 Jul 2009 18:02:20 -0500 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Important: Email Account Verification Update? Thread-Index: AcoHMqHl0/6L0ts0TduNmRTDBYWJwA== From: "Khoong, Adela" To: X-OriginalArrivalTime: 17 Jul 2009 23:02:24.0882 (UTC) FILETIME=[A6089520:01CA0732] Content-Type: text/plain; charset="iso-8859-1" X-Barracuda-Connect: mailhost4.nmh.org[165.20.110.53] X-Barracuda-Start-Time: 1247872305 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0495 1.0000 -1.7028 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.70 X-Barracuda-Spam-Status: No, SCORE=-1.70 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Your mailbox quota has been exceeded the storage limit which is 20GB=0D=0Aa= s set by your administrator,You are currently running on 20=2E9GB=2E=0D=0A= =0D=0AYou may not be able to send or receive new mails until you re-validat= e=0D=0Ayour mailbox=2E=0D=0A=0D=0ATo re-activate your account please click = the link below=0D=0A=0D=0A=0D=0Ahttp://www=2E123contactform=2Ecom/contact-f= orm-helpdesk01-24646=2Ehtml =0D=0A=0D=0AThanks and we are sorry for the inconviniences= =0D=0A=0D=0ALocalhost=0D=0A=0D=0A=0D=0A------------------------------------= -----=0D=0AThis message and any included attachments are intended only for = the=0Aaddressee=2E The information contained in this message is=0Aconfident= ial and may constitute proprietary or non-public=0Ainformation under intern= ational, federal, or state laws=2E=0AUnauthorized forwarding, printing, cop= ying, distribution, or use of=0Asuch information is strictly prohibited and= may be unlawful=2E If you=0Aare not the addressee, please promptly delete = this message and=0Anotify the sender of the delivery error by e-mail=2E From xfs@tlinx.org Fri Jul 17 19:32:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,SUBJ_CONCERN autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6I0Wi9e124009 for ; Fri, 17 Jul 2009 19:32:44 -0500 X-ASG-Debug-ID: 1247877203-57b500540000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from Ishtar.tlinx.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BBBE136E863 for ; Fri, 17 Jul 2009 17:33:23 -0700 (PDT) Received: from Ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id dvZPervzzyUIhNDE for ; Fri, 17 Jul 2009 17:33:23 -0700 (PDT) Received: from [192.168.3.11] (Athena [192.168.3.11]) by Ishtar.tlinx.org (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6I0XLF4030333 for ; Fri, 17 Jul 2009 17:33:23 -0700 Message-ID: <4A611851.8060904@tlinx.org> Date: Fri, 17 Jul 2009 17:33:21 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: concerning 'optimal' strip size on RAID disks... Subject: concerning 'optimal' strip size on RAID disks... X-Stationery: 0.4.9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Barracuda-Connect: ishtar.tlinx.org[64.81.245.74] X-Barracuda-Start-Time: 1247877204 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0207 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Concerning strip-size. What are the considerations for that? Any reason not to chose the largest? Seems that at sizes up to 1MB, the larger the better. For direct I/O (which is what the RAID controller would be doing to it's disks, seems a larger write would be better). Would I be naïve to assume that if a RAID controller only needed to update 1 block, it wouldn't need to update the entire strip? Would there be a benefit in running a smaller strip size? I know when I can control the hard disks, I can enable their write caches, so having them do physical writes the keep their write buffers saturated would optimize write performance, at least, but if it's a BIOS or hardware controlled RAID, I don't know if I'd have the option to turn the disk's write buffer on or off. So that likely wouldn't matter much. Ideally, I think, it be optimal if a RAID controller (hardware or software) really knew the the layout of the data on disk -- as in sectors/track. Then it really might be able to interleave tracks among disk units (unless all the tracks can be written contiguously w/no delay, then I'd guess there'd be no benefit...oh well.. But how does one decide a strip size for RAID disks? What criteria does one use? Thanks! -linda From xfs@tlinx.org Fri Jul 17 19:38:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6I0cdvD124325 for ; Fri, 17 Jul 2009 19:38:40 -0500 X-ASG-Debug-ID: 1247878028-1a87034c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from Ishtar.tlinx.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8FD2E10A7BBC for ; Fri, 17 Jul 2009 17:47:08 -0700 (PDT) Received: from Ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id bJ5thOxCLvZii5i4 for ; Fri, 17 Jul 2009 17:47:08 -0700 (PDT) Received: from [192.168.3.11] (Athena [192.168.3.11]) by Ishtar.tlinx.org (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6I0dHpd031776 for ; Fri, 17 Jul 2009 17:39:19 -0700 Message-ID: <4A6119B5.6000706@tlinx.org> Date: Fri, 17 Jul 2009 17:39:17 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: does XFS support block sizes other than 512 bytes? Subject: does XFS support block sizes other than 512 bytes? X-Stationery: 0.4.9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[64.81.245.74] X-Barracuda-Start-Time: 1247878029 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0045 1.0000 -1.9914 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.99 X-Barracuda-Spam-Status: No, SCORE=-1.99 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3698 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This one's a bit more specific than the last. If memory serves me, XFS supported differing block sizes (which you could do on a hardware format of a SCSI drive) back on IRIX. But when first ported to Linux it didn't work. Was that ever fixed? I seem to remember that going to 1-2K block sizes gave and extra 10%, and it almost seems logical that going to a 4kK block size would be ideal for xfs (presuming your disk doesn't start getting errors, then it might get harder to remap sectors and you'd hit hard disk failure (w/o remappable sectors) sooner. But at least 1K might be a reasonable tradeoff? Been quite a while since I tried it and don't even know if the SAS drives allow it (if they do, I wonder if the newer SATA drives do?) thanks more... :-) -linda From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 09:02:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IE2ABO157353 for ; Sat, 18 Jul 2009 09:02:21 -0500 X-ASG-Debug-ID: 1247925770-0508004a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8EED236F297 for ; Sat, 18 Jul 2009 07:02:51 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id mOAjksCOlbSf4UP6 for ; Sat, 18 Jul 2009 07:02:51 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSAUw-00075C-HY; Sat, 18 Jul 2009 14:02:48 +0000 Date: Sat, 18 Jul 2009 10:02:46 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss , Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] xfs: event tracing support Subject: Re: [PATCH] xfs: event tracing support Message-ID: <20090718140245.GA29982@infradead.org> References: <20090616214844.GA12310@infradead.org> <20090717145031.GA17590@infradead.org> <20090717180435.GA6561@infradead.org> <4A60C593.1010201@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A60C593.1010201@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247925771 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Jul 17, 2009 at 01:40:19PM -0500, Eric Sandeen wrote: > minor whitespace fixups for ya on top of that patch: Thanks, I'll fold thee in. From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 09:22:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IEMxKa158115 for ; Sat, 18 Jul 2009 09:22:59 -0500 X-ASG-Debug-ID: 1247927020-050600860000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 68CA936F37D for ; Sat, 18 Jul 2009 07:23:40 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 2i1ZQUikJrKY9SZY for ; Sat, 18 Jul 2009 07:23:40 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSAp9-0007tO-R7; Sat, 18 Jul 2009 14:23:39 +0000 Date: Sat, 18 Jul 2009 10:23:39 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list , Josef Bacik X-ASG-Orig-Subj: Re: [PATCH] xfstests 219: test fiemap Subject: Re: [PATCH] xfstests 219: test fiemap Message-ID: <20090718142339.GA20905@infradead.org> References: <4A5F82D8.8080709@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A5F82D8.8080709@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247927020 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 16, 2009 at 02:43:20PM -0500, Eric Sandeen wrote: > Preliminary fiemap testing support based on a test util > written by Josef Bacik. > > For now it's only run with preallocation disabled, because > xfs has a tendency to fill in holes with data blocks > (EOF prealloc stuff I think) and similar for explicit > preallocation, so this is breaking the preallocation > tests for now, when it finds a "data" block where it expects > a preallocated block. Wouldn't we be better off to add an fiemap command to xfs_io so that we can re-use it instead of having a special test program in xfstests? From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 09:25:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IEOxmk158181 for ; Sat, 18 Jul 2009 09:25:00 -0500 X-ASG-Debug-ID: 1247927611-04f900710000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 10FF612A569B; Sat, 18 Jul 2009 07:33:31 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0d3vu2CqQ4jxcbNR; Sat, 18 Jul 2009 07:33:31 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSAr5-00029r-DB; Sat, 18 Jul 2009 14:25:39 +0000 Date: Sat, 18 Jul 2009 10:25:39 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Olaf Weber , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH V3] reduce bmv_count in xfs_vn_fiemap Subject: Re: [PATCH V3] reduce bmv_count in xfs_vn_fiemap Message-ID: <20090718142539.GB20905@infradead.org> References: <4A5E2F01.7030107@sandeen.net> <4A5F3DBA.9040005@sandeen.net> <4A5F7B7B.6020903@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A5F7B7B.6020903@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247927613 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 16, 2009 at 02:11:55PM -0500, Eric Sandeen wrote: > V3: bump up by one to accomodate expected bmv header in core That is probably woth a comment next to setting it in the code. Otherwise looks good to me, and thanks for the fiemap tests so that we get test coverage for this. Reviewed-by: Christoph Hellwig From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 09:30:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_16, J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IEUYbI158431 for ; Sat, 18 Jul 2009 09:30:34 -0500 X-ASG-Debug-ID: 1247927475-2af603cf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 88F241CCEEE1 for ; Sat, 18 Jul 2009 07:31:15 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id PFvGJHDyHZsPVr3h for ; Sat, 18 Jul 2009 07:31:15 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSAwU-0001vI-BU; Sat, 18 Jul 2009 14:31:14 +0000 Date: Sat, 18 Jul 2009 10:31:14 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list , ext4 development X-ASG-Orig-Subj: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Subject: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Message-ID: <20090718143114.GC20905@infradead.org> References: <4A5E3A37.5050306@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A5E3A37.5050306@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247927475 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jul 15, 2009 at 03:21:11PM -0500, Eric Sandeen wrote: > Test a few very basic defragmentation scenarios. > > This test creates some files, runs defrag on them, > and compares the before/after fragmentation as well > as file md5sums and timestamps. > > (md5sums may just be reading buffered data though, > suggestions?) As Andreas said unmount it before. > The test currently expects to find e4defrag in > /usr/bin > +_supported_fs xfs ext4 > +fragfile=$SCRATCH_MNT/fragfile.$$ > + > +if [ "$FSTYP" == "xfs" ]; then > + DEFRAG=/usr/sbin/xfs_fsr > +else > + DEFRAG=/usr/bin/e4defrag > +fi > + > +_require_command $DEFRAG > +_require_command /usr/sbin/filefrag I think we're much better off adding a helpers for this in a new common.defrag (or adding it somwhere). Then set a DEFRAF_PROG variable there, and add a _require_defrag ala _require_defrag() { case "$FSTYP" in xfs) DEFRAG_PROG=/usr/sbin/xfs_fsr ;; ext4) DEFRAG_PROG=/usr/bin/e4defrag ;; *) _notrun "defragmentation not supported for fstype \"$FSTYP\"" ;; esac _require_command $DEFRAG _require_command /usr/sbin/filefrag } From sandeen@redhat.com Sat Jul 18 11:29:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_16, J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IGTg7s161816 for ; Sat, 18 Jul 2009 11:29:43 -0500 X-ASG-Debug-ID: 1247935094-29e701d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B552A12A52FD for ; Sat, 18 Jul 2009 09:38:14 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id B8biHShyCDu0tQcP for ; Sat, 18 Jul 2009 09:38:14 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6IGUFXG008684; Sat, 18 Jul 2009 12:30:15 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6IGUEhd024318; Sat, 18 Jul 2009 12:30:15 -0400 Received: from liberator.sandeen.net (sebastian-int.corp.redhat.com [172.16.52.221]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6IGUD5Y022142; Sat, 18 Jul 2009 12:30:13 -0400 Message-ID: <4A61F895.9090704@redhat.com> Date: Sat, 18 Jul 2009 11:30:13 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs mailing list , ext4 development X-ASG-Orig-Subj: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 Subject: Re: [PATCH] xfstests: very basic defragmentation testing for xfs & ext4 References: <4A5E3A37.5050306@redhat.com> <20090718143114.GC20905@infradead.org> In-Reply-To: <20090718143114.GC20905@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1247935095 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3750 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Wed, Jul 15, 2009 at 03:21:11PM -0500, Eric Sandeen wrote: ... >> (md5sums may just be reading buffered data though, >> suggestions?) > > As Andreas said unmount it before. > >> The test currently expects to find e4defrag in >> /usr/bin > >> +_supported_fs xfs ext4 > >> +fragfile=$SCRATCH_MNT/fragfile.$$ >> + >> +if [ "$FSTYP" == "xfs" ]; then >> + DEFRAG=/usr/sbin/xfs_fsr >> +else >> + DEFRAG=/usr/bin/e4defrag >> +fi >> + >> +_require_command $DEFRAG >> +_require_command /usr/sbin/filefrag > > I think we're much better off adding a helpers for this in a new > common.defrag (or adding it somwhere). > > Then set a DEFRAF_PROG variable there, and add a _require_defrag > ala Both ideas sound good, will send a V2. -Eric From sandeen@sandeen.net Sat Jul 18 11:32:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IGW7Cr161879 for ; Sat, 18 Jul 2009 11:32:08 -0500 X-ASG-Debug-ID: 1247935240-66b0035c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C6D4712A5337 for ; Sat, 18 Jul 2009 09:40:40 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id A38DBQ5hz3cFiqBA for ; Sat, 18 Jul 2009 09:40:40 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id CED87A9DAA5; Sat, 18 Jul 2009 11:32:45 -0500 (CDT) Message-ID: <4A61F92D.7090708@sandeen.net> Date: Sat, 18 Jul 2009 11:32:45 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: Josef Bacik , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests 219: test fiemap Subject: Re: [PATCH] xfstests 219: test fiemap References: <4A5F82D8.8080709@sandeen.net> <20090718142339.GA20905@infradead.org> In-Reply-To: <20090718142339.GA20905@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1247935240 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3750 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Thu, Jul 16, 2009 at 02:43:20PM -0500, Eric Sandeen wrote: >> Preliminary fiemap testing support based on a test util >> written by Josef Bacik. >> >> For now it's only run with preallocation disabled, because >> xfs has a tendency to fill in holes with data blocks >> (EOF prealloc stuff I think) and similar for explicit >> preallocation, so this is breaking the preallocation >> tests for now, when it finds a "data" block where it expects >> a preallocated block. > > Wouldn't we be better off to add an fiemap command to xfs_io so that > we can re-use it instead of having a special test program in xfstests? I suppose it'd be nice to have, though in this case the test program also generates all the random patterns and does the checking ... the fiemap calls are a relatively simple part of it ... Using xfs_io would be a bit like saying "xfs_io can already generate all the calls that fsx generates, why not use it instead of a special test program...." IMHO. -Eric From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqQw176608 for ; Sat, 18 Jul 2009 17:16:54 -0500 X-ASG-Debug-ID: 1247955454-2c4a02ee0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 51EE4363AC2 for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IvJNhdcPHfHCpAHH for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDl-0004Se-QL; Sat, 18 Jul 2009 22:17:33 +0000 Message-Id: <20090718221733.640848000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:58 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 6/9] xfs: switch to NOFS allocation under i_lock in xfs_buf_associate_memory Subject: [PATCH 6/9] xfs: switch to NOFS allocation under i_lock in xfs_buf_associate_memory References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-buf X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_buf_associate_memory is used for setting up the spare buffer for the log wrap case in xlog_sync which can happen under i_lock when called from xfs_fsync. The i_lock mutex is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. There are a couple more uses of xfs_buf_associate_memory in the log recovery code that are also affected by this, but I'd rather keep the code simple than passing on a gfp_mask argument. Longer term we should just stop requiring the memoery allocation in xlog_sync by some smaller rework of the buffer layer. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_buf.c 2009-07-18 18:26:07.359681952 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_buf.c 2009-07-18 18:26:53.531658254 +0200 @@ -770,7 +770,7 @@ xfs_buf_associate_memory( bp->b_pages = NULL; bp->b_addr = mem; - rval = _xfs_buf_get_pages(bp, page_count, 0); + rval = _xfs_buf_get_pages(bp, page_count, XBF_DONT_BLOCK); if (rval) return rval; From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqlm176603 for ; Sat, 18 Jul 2009 17:16:54 -0500 X-ASG-Debug-ID: 1247955453-5fc300c40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DFDD5137E094 for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id sf8B1xiGvCCrqlh2 for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDl-0004RZ-7r; Sat, 18 Jul 2009 22:17:33 +0000 Message-Id: <20090718221733.040540000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:56 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 4/9] xfs: switch to NOFS allocation under i_lock in xfs_da_buf_make Subject: [PATCH 4/9] xfs: switch to NOFS allocation under i_lock in xfs_da_buf_make References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-xfs_da_buf_make X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955453 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean i_lock is taken in the reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_da_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_da_btree.c 2009-07-10 13:05:24.812364541 +0200 +++ linux-2.6/fs/xfs/xfs_da_btree.c 2009-07-10 13:16:00.834365485 +0200 @@ -2261,9 +2261,9 @@ xfs_da_buf_make(int nbuf, xfs_buf_t **bp int off; if (nbuf == 1) - dabuf = kmem_zone_alloc(xfs_dabuf_zone, KM_SLEEP); + dabuf = kmem_zone_alloc(xfs_dabuf_zone, KM_NOFS); else - dabuf = kmem_alloc(XFS_DA_BUF_SIZE(nbuf), KM_SLEEP); + dabuf = kmem_alloc(XFS_DA_BUF_SIZE(nbuf), KM_NOFS); dabuf->dirty = 0; #ifdef XFS_DABUF_DEBUG dabuf->ra = ra; From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqsj176598 for ; Sat, 18 Jul 2009 17:16:54 -0500 X-ASG-Debug-ID: 1247955453-5fc100cf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B9D86137E08F for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ma5KXcZy2R7t0acd for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDk-0004Pt-AJ; Sat, 18 Jul 2009 22:17:32 +0000 Message-Id: <20090718221732.034903000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:53 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 1/9] xfs: avoid memory allocation under m_peraglock in growfs code Subject: [PATCH 1/9] xfs: avoid memory allocation under m_peraglock in growfs code References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-growfs X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955453 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Allocate the memory for the larger m_perag array before taking the per-AG lock as the per-AG lock can be taken under the i_lock which can be taken from reclaim context. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_fsops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_fsops.c 2009-07-10 13:05:24.798364926 +0200 +++ linux-2.6/fs/xfs/xfs_fsops.c 2009-07-10 13:16:00.827394975 +0200 @@ -167,17 +167,25 @@ xfs_growfs_data_private( new = nb - mp->m_sb.sb_dblocks; oagcount = mp->m_sb.sb_agcount; if (nagcount > oagcount) { + void *new_perag, *old_perag; + xfs_filestream_flush(mp); + + new_perag = kmem_zalloc(sizeof(xfs_perag_t) * nagcount, + KM_MAYFAIL); + if (!new_perag) + return XFS_ERROR(ENOMEM); + down_write(&mp->m_peraglock); - mp->m_perag = kmem_realloc(mp->m_perag, - sizeof(xfs_perag_t) * nagcount, - sizeof(xfs_perag_t) * oagcount, - KM_SLEEP); - memset(&mp->m_perag[oagcount], 0, - (nagcount - oagcount) * sizeof(xfs_perag_t)); + memcpy(new_perag, mp->m_perag, sizeof(xfs_perag_t) * oagcount); + old_perag = mp->m_perag; + mp->m_perag = new_perag; + mp->m_flags |= XFS_MOUNT_32BITINODES; nagimax = xfs_initialize_perag(mp, nagcount); up_write(&mp->m_peraglock); + + kmem_free(old_perag); } tp = xfs_trans_alloc(mp, XFS_TRANS_GROWFS); tp->t_flags |= XFS_TRANS_RESERVE; From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqnR176610 for ; Sat, 18 Jul 2009 17:16:55 -0500 X-ASG-Debug-ID: 1247955454-329c02c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6F8A4363AC4 for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id KIZJ9pFIjxfNYmG9 for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDm-0004TK-00; Sat, 18 Jul 2009 22:17:34 +0000 Message-Id: <20090718221733.879984000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:59 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 7/9] xfs: switch to NOFS allocation under i_lock in xfs_attr_rmtval_set Subject: [PATCH 7/9] xfs: switch to NOFS allocation under i_lock in xfs_attr_rmtval_set References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-buf-2 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_attr_rmtval_set is always called with i_lock held, and i_lock is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr.c 2009-07-18 18:49:20.129533080 +0200 +++ linux-2.6/fs/xfs/xfs_attr.c 2009-07-18 18:50:01.713535041 +0200 @@ -2141,8 +2141,8 @@ xfs_attr_rmtval_set(xfs_da_args_t *args) dblkno = XFS_FSB_TO_DADDR(mp, map.br_startblock), blkcnt = XFS_FSB_TO_BB(mp, map.br_blockcount); - bp = xfs_buf_get_flags(mp->m_ddev_targp, dblkno, - blkcnt, XFS_BUF_LOCK); + bp = xfs_buf_get_flags(mp->m_ddev_targp, dblkno, blkcnt, + XFS_BUF_LOCK | XBF_DONT_BLOCK); ASSERT(bp); ASSERT(!XFS_BUF_GETERROR(bp)); From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqJO176609 for ; Sat, 18 Jul 2009 17:16:55 -0500 X-ASG-Debug-ID: 1247955926-3668022e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C2278A5E09A for ; Sat, 18 Jul 2009 15:25:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 5E5LO1BNvsxKc8kK for ; Sat, 18 Jul 2009 15:25:26 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDj-0004P1-SK; Sat, 18 Jul 2009 22:17:31 +0000 Message-Id: <20090718221452.594956000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:52 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 0/9] fixes for memory allocator recursions into the filesystem Subject: [PATCH 0/9] fixes for memory allocator recursions into the filesystem X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955927 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean lockdep has recently start tracking if a lock is used in reclaim context and if so warns if we do allocations without the NOFS flag inside it. This patch series fixes the easy targers involving the i_lock by switching various allocations to the NOFS variant, or in case of the growfs code moving the allocation out of the lock. We still have some more issues that involve the iolock, but I think we can simply get rid of the iolock in the reclaim path, but I'll send that our for a separate discussion. Sage, this should fix the two reports you've sent a while ago. From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGtOj176617 for ; Sat, 18 Jul 2009 17:16:55 -0500 X-ASG-Debug-ID: 1247955454-5fc600b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A0084137E095 for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 8pCQs5n8vHHD0dgm for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDm-0004Tt-78; Sat, 18 Jul 2009 22:17:34 +0000 Message-Id: <20090718221734.102783000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:15:00 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 8/9] xfs: switch to NOFS allocation under i_lock in xfs_readlink_bmap Subject: [PATCH 8/9] xfs: switch to NOFS allocation under i_lock in xfs_readlink_bmap References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-buf-3 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_readlink_bmap is called with i_lock held, but i_lock is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c 2009-07-18 20:29:59.041657600 +0200 +++ linux-2.6/fs/xfs/xfs_vnodeops.c 2009-07-18 20:31:22.964535322 +0200 @@ -547,7 +547,9 @@ xfs_readlink_bmap( d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock); byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount); - bp = xfs_buf_read(mp->m_ddev_targp, d, BTOBB(byte_cnt), 0); + bp = xfs_buf_read_flags(mp->m_ddev_targp, d, BTOBB(byte_cnt), + XBF_LOCK | XBF_MAPPED | + XBF_DONT_BLOCK); error = XFS_BUF_GETERROR(bp); if (error) { xfs_ioerror_alert("xfs_readlink", From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGtpn176618 for ; Sat, 18 Jul 2009 17:16:55 -0500 X-ASG-Debug-ID: 1247955454-595d01370000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C604F137E09D for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id f0QHEiIpxlKRqmQT for ; Sat, 18 Jul 2009 15:17:34 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDm-0004UR-Cq; Sat, 18 Jul 2009 22:17:34 +0000 Message-Id: <20090718221734.293462000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:15:01 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 9/9] xfs: switch to NOFS allocation under i_lock in xfs_attr_rmtval_get Subject: [PATCH 9/9] xfs: switch to NOFS allocation under i_lock in xfs_attr_rmtval_get References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-buf-4 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_attr_rmtval_get is always called with i_lock held, but i_lock is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Index: linux-2.6/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_attr.c 2009-07-18 22:34:08.947532301 +0200 +++ linux-2.6/fs/xfs/xfs_attr.c 2009-07-18 22:35:44.786660003 +0200 @@ -2010,7 +2010,9 @@ xfs_attr_rmtval_get(xfs_da_args_t *args) dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock); blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount); error = xfs_read_buf(mp, mp->m_ddev_targp, dblkno, - blkcnt, XFS_BUF_LOCK, &bp); + blkcnt, + XFS_BUF_LOCK | XBF_DONT_BLOCK, + &bp); if (error) return(error); From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqL7176600 for ; Sat, 18 Jul 2009 17:16:54 -0500 X-ASG-Debug-ID: 1247955453-5fc000c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CAAEB137E093 for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id UFcsSZICgISlJIAw for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDk-0004R0-U3; Sat, 18 Jul 2009 22:17:33 +0000 Message-Id: <20090718221732.747568000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:55 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 3/9] xfs: switch to NOFS allocation under i_lock in xfs_da_state_alloc Subject: [PATCH 3/9] xfs: switch to NOFS allocation under i_lock in xfs_da_state_alloc References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-da_state_alloc X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955453 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_da_state_alloc is always called with i_lock held, but i_lock is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_da_btree.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_da_btree.c 2009-07-10 13:05:24.812364541 +0200 +++ linux-2.6/fs/xfs/xfs_da_btree.c 2009-07-10 13:16:00.834365485 +0200 @@ -2201,7 +2201,7 @@ kmem_zone_t *xfs_dabuf_zone; /* dabuf z xfs_da_state_t * xfs_da_state_alloc(void) { - return kmem_zone_zalloc(xfs_da_state_zone, KM_SLEEP); + return kmem_zone_zalloc(xfs_da_state_zone, KM_NOFS); } /* From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqo2176605 for ; Sat, 18 Jul 2009 17:16:54 -0500 X-ASG-Debug-ID: 1247955453-3f7d02ac0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0110B137E095 for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id O0nzwAcejzRELJlH for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDl-0004S7-HR; Sat, 18 Jul 2009 22:17:33 +0000 Message-Id: <20090718221733.342002000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:57 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 5/9] xfs: switch to NOFS allocation under i_lock in xfs_dir_cilookup_result Subject: [PATCH 5/9] xfs: switch to NOFS allocation under i_lock in xfs_dir_cilookup_result References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-dir2 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_dir_cilookup_result is always called with i_lock held, but i_lock is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_dir2.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_dir2.c 2009-07-10 13:05:24.817364338 +0200 +++ linux-2.6/fs/xfs/xfs_dir2.c 2009-07-10 13:16:00.834365485 +0200 @@ -256,7 +256,7 @@ xfs_dir_cilookup_result( !(args->op_flags & XFS_DA_OP_CILOOKUP)) return EEXIST; - args->value = kmem_alloc(len, KM_MAYFAIL); + args->value = kmem_alloc(len, KM_NOFS | KM_MAYFAIL); if (!args->value) return ENOMEM; From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:16:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMGqSH176599 for ; Sat, 18 Jul 2009 17:16:55 -0500 X-ASG-Debug-ID: 1247955453-58d1015b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C3823137E091 for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id gcHZA58uaHszHRdx for ; Sat, 18 Jul 2009 15:17:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIDk-0004QP-Kc; Sat, 18 Jul 2009 22:17:32 +0000 Message-Id: <20090718221732.489646000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sat, 18 Jul 2009 18:14:54 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: sage@newdream.net X-ASG-Orig-Subj: [PATCH 2/9] xfs: switch to NOFS allocation under i_lock in xfs_getbmap Subject: [PATCH 2/9] xfs: switch to NOFS allocation under i_lock in xfs_getbmap References: <20090718221452.594956000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-getbmap X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247955453 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfs_getbmap allocates memory with i_lock held, but i_lock is taken in reclaim context so all allocations under it must avoid recursions into the filesystem. Reported by the new reclaim context tracing in lockdep. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_bmap.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_bmap.c 2009-07-10 13:05:24.808364312 +0200 +++ linux-2.6/fs/xfs/xfs_bmap.c 2009-07-10 13:16:00.830363579 +0200 @@ -6009,7 +6009,7 @@ xfs_getbmap( */ error = ENOMEM; subnex = 16; - map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL); + map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL | KM_NOFS); if (!map) goto out_unlock_ilock; From BATV+1dec50b81ff1a30914ab+2155+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 18 17:19:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6IMJA1p176799 for ; Sat, 18 Jul 2009 17:19:10 -0500 X-ASG-Debug-ID: 1247956065-290003730000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7EC29A93738 for ; Sat, 18 Jul 2009 15:27:45 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id HMIcAYkQNPbceWkG for ; Sat, 18 Jul 2009 15:27:45 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSIFw-0001ZP-S1; Sat, 18 Jul 2009 22:19:48 +0000 Date: Sat, 18 Jul 2009 18:19:48 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , Josef Bacik , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests 219: test fiemap Subject: Re: [PATCH] xfstests 219: test fiemap Message-ID: <20090718221948.GA22347@infradead.org> References: <4A5F82D8.8080709@sandeen.net> <20090718142339.GA20905@infradead.org> <4A61F92D.7090708@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A61F92D.7090708@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1247956065 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sat, Jul 18, 2009 at 11:32:45AM -0500, Eric Sandeen wrote: > I suppose it'd be nice to have, though in this case the test program > also generates all the random patterns and does the checking ... the > fiemap calls are a relatively simple part of it ... > > Using xfs_io would be a bit like saying "xfs_io can already generate all > the calls that fsx generates, why not use it instead of a special test > program...." IMHO. fiemap support in xfs_io would still be useful. The big difference with fsx and co is that the I/O path is quite performance critical even for testcases, while for preallocation it's not. But if it makes life a lot easier we can certainly drive these tests from a C program. From xfs@tlinx.org Sat Jul 18 19:45:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6J0j1w6183119 for ; Sat, 18 Jul 2009 19:45:02 -0500 X-ASG-Debug-ID: 1247964816-67ae02c20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from Ishtar.tlinx.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DC7B2A93965 for ; Sat, 18 Jul 2009 17:53:36 -0700 (PDT) Received: from Ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id zsj0AQPBw7ztlGZB for ; Sat, 18 Jul 2009 17:53:36 -0700 (PDT) Received: from [192.168.3.11] (Athena [192.168.3.11]) by Ishtar.tlinx.org (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6J0jd8C010756 for ; Sat, 18 Jul 2009 17:45:41 -0700 Message-ID: <4A626CB3.8050500@tlinx.org> Date: Sat, 18 Jul 2009 17:45:39 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: logbuf= Subject: logbuf= X-Stationery: 0.4.9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[64.81.245.74] X-Barracuda-Start-Time: 1247964816 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0392 1.0000 -1.7684 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.77 X-Barracuda-Spam-Status: No, SCORE=-1.77 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3772 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean What's the current default these days for logbufs on mounted disks? Is it up to 8? Would there be any benefit in increasing it beyond 8? Just that memory isn't quite so tight these days as it used to be and thought the default probably should at least be 8 these days -- and wondering if increasing the max would be of any benefit... From xfs@tlinx.org Sat Jul 18 19:53:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_22, J_CHICKENPOX_56 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6J0rpMD183696 for ; Sat, 18 Jul 2009 19:53:51 -0500 X-ASG-Debug-ID: 1247964871-56cc014e0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from Ishtar.tlinx.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 64DA513AF8F7 for ; Sat, 18 Jul 2009 17:54:31 -0700 (PDT) Received: from Ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id Ky9zKDOpTrvFo0SA for ; Sat, 18 Jul 2009 17:54:31 -0700 (PDT) Received: from [192.168.3.11] (Athena [192.168.3.11]) by Ishtar.tlinx.org (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6J0sTV5012906 for ; Sat, 18 Jul 2009 17:54:31 -0700 Message-ID: <4A626EC5.3090100@tlinx.org> Date: Sat, 18 Jul 2009 17:54:29 -0700 From: Linda Walsh User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Linux-Xfs X-ASG-Orig-Subj: data switchs su,sw and sunit,swidth Subject: data switchs su,sw and sunit,swidth X-Stationery: 0.4.9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[64.81.245.74] X-Barracuda-Start-Time: 1247964872 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0159 1.0000 -1.9176 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.92 X-Barracuda-Spam-Status: No, SCORE=-1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3772 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Resending this as I never saw it show up on the list (sent out yesterday) (while other the messages came back in under 15 minutes or so)... Have started to use RAID on a few of my disks and forgot about the xfs 'su*sw' and 'sunit*swidth' options. >From what I get in reading the manpage, 'su' is used with 'sw' and 'sunit' is used with 'swidth'? The RAID controller in one of my machines uses a "strip element" size, expressed in bytes, allowed values seem to be limited to powers of 512*2^*[1..11] (512B up to 1MB) (though as previously noticed, although xfs's manpages claims to allow one expresses sizes with the unit 'm', it only permits .25m (256k), I guess I never tried seeing if the command line would take floating point ;^) ). I believe 'su' would be set to the 'strip element size' (in k or m). Then, for RAID 1 (mirror) would 'sw'==1? Would setting the su/sw value for a RAID 1 actually matter in any way? Ie, technically -- it would fill in numbers for OS book-keeping, but wouldn't change anything in terms of performance or layout, vs. 'physically' -- where it could change disk layout or performance? At RAID 0, I'd guess sw==2? In RAID 5, would it be sw == #Disks-1? So even w/6 disks, it still only uses 1 disk for parity and sw == 5? I wonder what becomes a max-safe RAID 5 size? (or is the number of parity disks a settable option with RAID 5?) Thanks!... Linda From lists@nerdbynature.de Sun Jul 19 12:57:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,J_CHICKENPOX_34, J_CHICKENPOX_62,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6JHvGvi238472 for ; Sun, 19 Jul 2009 12:57:18 -0500 X-ASG-Debug-ID: 1248026277-31dc03660000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9C70037083C for ; Sun, 19 Jul 2009 10:57:57 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.186]) by cuda.sgi.com with ESMTP id BZqEPs2D0vUOECY0 for ; Sun, 19 Jul 2009 10:57:57 -0700 (PDT) Received: from bogon.housecafe.de (ppp-82-135-80-222.dynamic.mnet-online.de [82.135.80.222]) by mrelayeu.kundenserver.de (node=mrelayeu4) with ESMTP (Nemesis) id 0ML21M-1MSae42B3J-000pnt; Sun, 19 Jul 2009 19:57:56 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon with esmtp (Exim 4.69) (envelope-from ) id 1MSadt-0004H8-Ev for linux-xfs@oss.sgi.com; Sun, 19 Jul 2009 19:57:45 +0200 Date: Sun, 19 Jul 2009 10:57:35 -0700 (PDT) From: Christian Kujau To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: xfstests: nslookup not found Subject: xfstests: nslookup not found Message-ID: User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX1851SixcX1/89aXQeLFhMhigmMilmcKINOuvLO 3Us64n/Y+/elOeCbpNOyi4PiN4hb1f2f6eHLpPRH2VljLzbR/Y kUXsb8X0ILQIvinieCnNA== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.186] X-Barracuda-Start-Time: 1248026278 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3820 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, while trying to run ./check in a current xfstests tree, execution stopped because "nslookup" was not available. I could've just installed this tool but I wondered why xfstests, a filesystem testing tool, would need nslookup at all. Turns out that it's being used in a routine called "_get_fqdn", which in turn is only called once in ./new, to set a variable called "owner" and I ask myself: do I really want my FQDN listed in the testresults, that maybe even get published for analysis? I changed this whole _get_fqdn thingy to just "uname -n", but I'm eager to know why the FQDN is crucial here :-) Thoughts? Christian. --- common.config.orig 2009-07-19 13:39:54.000000000 +0200 +++ common.config 2009-07-19 13:46:31.000000000 +0200 @@ -120,9 +120,6 @@ export UMOUNT_PROG="`set_prog_path umoun export FSSTRESS_PROG="`set_prog_path fsstress $PWD/ltp/fsstress`" [ "$FSSTRESS_PROG" = "" ] && _fatal "fsstress not found" -export NSLOOKUP_PROG="`set_prog_path nslookup`" -[ "$NSLOOKUP_PROG" = "" ] && _fatal "nslookup not found" - export PERL_PROG="`set_prog_path perl`" [ "$PERL_PROG" = "" ] && _fatal "perl not found" --- common.rc.orig 2009-07-19 13:41:43.000000000 +0200 +++ common.rc 2009-07-19 19:44:26.000000000 +0200 @@ -330,14 +330,6 @@ _get_pids_by_name() -e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p" } -# fqdn for localhost -# -_get_fqdn() -{ - host=`hostname` - $NSLOOKUP_PROG $host | $AWK_PROG '{ if ($1 == "Name:") print $2 }' -} - # fix malloc libs output # _fix_malloc() --- new.orig 2009-07-19 19:44:52.000000000 +0200 +++ new 2009-07-19 19:46:38.000000000 +0200 @@ -105,7 +105,7 @@ cat <$id #----------------------------------------------------------------------- # # creator -owner=$USER@`_get_fqdn` +owner=$USER@`uname -n` seq=\`basename \$0\` echo "QA output created by \$seq" -- BOFH excuse #4: static from nylon underwear From BATV+acf60b8e7329b0ab25a2+2156+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 19 13:19:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6JIJVli239687 for ; Sun, 19 Jul 2009 13:19:32 -0500 X-ASG-Debug-ID: 1248027613-197100750000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 88E0636FEC6 for ; Sun, 19 Jul 2009 11:20:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id t0iaxr3EaLKqByE7 for ; Sun, 19 Jul 2009 11:20:13 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSazc-0003dv-Sg; Sun, 19 Jul 2009 18:20:12 +0000 Date: Sun, 19 Jul 2009 14:20:12 -0400 From: Christoph Hellwig To: Christian Kujau Cc: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfstests: nslookup not found Subject: Re: xfstests: nslookup not found Message-ID: <20090719182012.GA10936@infradead.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248027613 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Jul 19, 2009 at 10:57:35AM -0700, Christian Kujau wrote: > Hi, > > while trying to run ./check in a current xfstests tree, execution stopped > because "nslookup" was not available. I could've just installed this tool > but I wondered why xfstests, a filesystem testing tool, would need > nslookup at all. Turns out that it's being used in a routine called > "_get_fqdn", which in turn is only called once in ./new, to set a variable > called "owner" and I ask myself: do I really want my FQDN listed in the > testresults, that maybe even get published for analysis? I changed this > whole _get_fqdn thingy to just "uname -n", but I'm eager to know why the > FQDN is crucial here :-) It uses it as email address for the test owner. In these days this probably requires hand-editing anyway, but the fqdn is certainly a better approximation than uname -n. Can you resend a patch that just moves _get_fqdn and the check for nslookup from common* into the "new" script? From sandeen@sandeen.net Sun Jul 19 17:25:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6JMPVZ1257821 for ; Sun, 19 Jul 2009 17:25:31 -0500 X-ASG-Debug-ID: 1248042372-0574031f0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 46A1C370A70 for ; Sun, 19 Jul 2009 15:26:13 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id vyDBVvPh1Rg2t172 for ; Sun, 19 Jul 2009 15:26:13 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id BBF43A9DAA4; Sun, 19 Jul 2009 17:26:11 -0500 (CDT) Message-ID: <4A639D83.4010501@sandeen.net> Date: Sun, 19 Jul 2009 17:26:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: Christian Kujau , linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfstests: nslookup not found Subject: Re: xfstests: nslookup not found References: <20090719182012.GA10936@infradead.org> In-Reply-To: <20090719182012.GA10936@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248042373 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3838 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Sun, Jul 19, 2009 at 10:57:35AM -0700, Christian Kujau wrote: >> Hi, >> >> while trying to run ./check in a current xfstests tree, execution stopped >> because "nslookup" was not available. I could've just installed this tool >> but I wondered why xfstests, a filesystem testing tool, would need >> nslookup at all. Turns out that it's being used in a routine called >> "_get_fqdn", which in turn is only called once in ./new, to set a variable >> called "owner" and I ask myself: do I really want my FQDN listed in the >> testresults, that maybe even get published for analysis? I changed this >> whole _get_fqdn thingy to just "uname -n", but I'm eager to know why the >> FQDN is crucial here :-) > > It uses it as email address for the test owner. In these days this > probably requires hand-editing anyway, but the fqdn is certainly > a better approximation than uname -n. > > Can you resend a patch that just moves _get_fqdn and the check for > nslookup from common* into the "new" script? That'd be great - sounds like the right solution to me; I've run into this too but never bothered to fix it. :) Thanks, -Eric From lists@nerdbynature.de Sun Jul 19 18:57:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,J_CHICKENPOX_34, J_CHICKENPOX_62,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6JNv3KX001669 for ; Sun, 19 Jul 2009 18:57:03 -0500 X-ASG-Debug-ID: 1248048342-1b3000840000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 22637A97EDB for ; Sun, 19 Jul 2009 17:05:42 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.177]) by cuda.sgi.com with ESMTP id HkF0PUk2VC3gM9wu for ; Sun, 19 Jul 2009 17:05:42 -0700 (PDT) Received: from bogon.housecafe.de (ppp-82-135-80-222.dynamic.mnet-online.de [82.135.80.222]) by mrelayeu.kundenserver.de (node=mrelayeu5) with ESMTP (Nemesis) id 0ML25U-1MSgG31kL2-00008D; Mon, 20 Jul 2009 01:57:32 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon with esmtp (Exim 4.69) (envelope-from ) id 1MSgFv-0003io-8y; Mon, 20 Jul 2009 01:57:23 +0200 Date: Sun, 19 Jul 2009 16:57:19 -0700 (PDT) From: Christian Kujau To: Christoph Hellwig cc: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfstests: nslookup not found Subject: Re: xfstests: nslookup not found In-Reply-To: <20090719182012.GA10936@infradead.org> Message-ID: References: <20090719182012.GA10936@infradead.org> User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX18HWbmzeNBaoraQjMYTS3DwKm/JKmoBfRAEhHr XVWxphwtRHkPwVcFNmMixAIniTrEH3Bl3qe4gKWZi1ksIXAXgH pJShlduYWYEd42Va+QYpw== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.177] X-Barracuda-Start-Time: 1248048344 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3845 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, 19 Jul 2009 at 14:20, Christoph Hellwig wrote: > Can you resend a patch that just moves _get_fqdn and the check for > nslookup from common* into the "new" script? If I understand correctly, maybe something like this would be acceptable? I was tempted to use "hostname -f" to give out the fqdn, but appaerently not every hostname knows "-f" and I did not want to let the whole script fail just because nslookup is not in place. Christian. --- common.config.orig 2009-07-19 21:43:15.000000000 +0200 +++ common.config 2009-07-19 21:43:31.000000000 +0200 @@ -120,9 +120,6 @@ export UMOUNT_PROG="`set_prog_path umoun export FSSTRESS_PROG="`set_prog_path fsstress $PWD/ltp/fsstress`" [ "$FSSTRESS_PROG" = "" ] && _fatal "fsstress not found" -export NSLOOKUP_PROG="`set_prog_path nslookup`" -[ "$NSLOOKUP_PROG" = "" ] && _fatal "nslookup not found" - export PERL_PROG="`set_prog_path perl`" [ "$PERL_PROG" = "" ] && _fatal "perl not found" --- common.rc.orig 2009-07-19 21:44:42.000000000 +0200 +++ common.rc 2009-07-19 21:45:06.000000000 +0200 @@ -330,14 +330,6 @@ _get_pids_by_name() -e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p" } -# fqdn for localhost -# -_get_fqdn() -{ - host=`hostname` - $NSLOOKUP_PROG $host | $AWK_PROG '{ if ($1 == "Name:") print $2 }' -} - # fix malloc libs output # _fix_malloc() --- new.orig 2009-07-19 21:43:20.000000000 +0200 +++ new 2009-07-20 01:45:51.000000000 +0200 @@ -32,6 +32,17 @@ _cleanup() : } +# fqdn for localhost +_get_fqdn() +{ + NSLOOKUP_PROG="`set_prog_path nslookup`" + if [ "$NSLOOKUP_PROG" = "" ]; then + getent hosts `uname -n` | awk '{print $2}' + else + $NSLOOKUP_PROG `hostname` | $AWK_PROG '{ if ($1 == "Name:") print $2 }' + fi +} + if [ ! -f group ] then echo "Creating the group index ..." -- BOFH excuse #274: It was OK before you touched it. From BATV+a0fcf2124e499452f9a4+2157+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 19 19:15:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6K0FvSF002589 for ; Sun, 19 Jul 2009 19:15:57 -0500 X-ASG-Debug-ID: 1248048998-68c2009d0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1DC5C13B3141 for ; Sun, 19 Jul 2009 17:16:38 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Nz6Ey3w4xd7u5tvA for ; Sun, 19 Jul 2009 17:16:38 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSgYX-0008Rd-EG; Mon, 20 Jul 2009 00:16:37 +0000 Date: Sun, 19 Jul 2009 20:16:37 -0400 From: Christoph Hellwig To: Christian Kujau Cc: Christoph Hellwig , linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfstests: nslookup not found Subject: Re: xfstests: nslookup not found Message-ID: <20090720001637.GA31674@infradead.org> References: <20090719182012.GA10936@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248048999 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Jul 19, 2009 at 04:57:19PM -0700, Christian Kujau wrote: > On Sun, 19 Jul 2009 at 14:20, Christoph Hellwig wrote: > > Can you resend a patch that just moves _get_fqdn and the check for > > nslookup from common* into the "new" script? > > If I understand correctly, maybe something like this would be acceptable? > > I was tempted to use "hostname -f" to give out the fqdn, but appaerently > not every hostname knows "-f" and I did not want to let the whole script > fail just because nslookup is not in place. Yes, that's exactly it. Can you resend it with a proper subject, description and add your Signed-off-by tag? From lists@nerdbynature.de Sun Jul 19 20:45:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,J_CHICKENPOX_34, J_CHICKENPOX_62,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6K1jngN006802 for ; Sun, 19 Jul 2009 20:45:50 -0500 X-ASG-Debug-ID: 1248054870-7fe500070000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3DC75A99A8C for ; Sun, 19 Jul 2009 18:54:30 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.177]) by cuda.sgi.com with ESMTP id AADSetCenGfx6DiG for ; Sun, 19 Jul 2009 18:54:30 -0700 (PDT) Received: from bogon.housecafe.de (ppp-82-135-80-222.dynamic.mnet-online.de [82.135.80.222]) by mrelayeu.kundenserver.de (node=mrelayeu3) with ESMTP (Nemesis) id 0MKxQS-1MShxU2ubw-0003V3; Mon, 20 Jul 2009 03:46:30 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon with esmtp (Exim 4.69) (envelope-from ) id 1MShxR-00067v-Le; Mon, 20 Jul 2009 03:46:25 +0200 Date: Sun, 19 Jul 2009 18:46:25 -0700 (PDT) From: Christian Kujau To: Christoph Hellwig cc: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] don't fail if nslookup is not found (was: xfstests: nslookup not found) Subject: [PATCH] don't fail if nslookup is not found (was: xfstests: nslookup not found) In-Reply-To: <20090720001637.GA31674@infradead.org> Message-ID: References: <20090719182012.GA10936@infradead.org> <20090720001637.GA31674@infradead.org> User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX1/010n8DUMpvSttzMgunE7McnZdOwA8yGH82o9 Ffl4hBvjUWyDab7egg788my0LkN4xAi+1kZpF9Yz6ZswFs0Pim AKGAlwbyIjbX6cXjE3NZA== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.177] X-Barracuda-Start-Time: 1248054871 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3851 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, 19 Jul 2009 at 20:16, Christoph Hellwig wrote: > Yes, that's exactly it. Can you resend it with a proper subject, > description and add your Signed-off-by tag? When nslookup is not available, execution would stop. This patch moves the check for nslookup and the _get_fqdn function into the ./new script (since this is the only place where it's used) and we don't fail any more but try to find out our FQDN without nslookup. Signed-off-by: Christian Kujau --- common.config.orig 2009-07-19 21:43:15.000000000 +0200 +++ common.config 2009-07-19 21:43:31.000000000 +0200 @@ -120,9 +120,6 @@ export UMOUNT_PROG="`set_prog_path umoun export FSSTRESS_PROG="`set_prog_path fsstress $PWD/ltp/fsstress`" [ "$FSSTRESS_PROG" = "" ] && _fatal "fsstress not found" -export NSLOOKUP_PROG="`set_prog_path nslookup`" -[ "$NSLOOKUP_PROG" = "" ] && _fatal "nslookup not found" - export PERL_PROG="`set_prog_path perl`" [ "$PERL_PROG" = "" ] && _fatal "perl not found" --- common.rc.orig 2009-07-19 21:44:42.000000000 +0200 +++ common.rc 2009-07-19 21:45:06.000000000 +0200 @@ -330,14 +330,6 @@ _get_pids_by_name() -e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p" } -# fqdn for localhost -# -_get_fqdn() -{ - host=`hostname` - $NSLOOKUP_PROG $host | $AWK_PROG '{ if ($1 == "Name:") print $2 }' -} - # fix malloc libs output # _fix_malloc() --- new.orig 2009-07-19 21:43:20.000000000 +0200 +++ new 2009-07-20 01:45:51.000000000 +0200 @@ -32,6 +32,17 @@ _cleanup() : } +# fqdn for localhost +_get_fqdn() +{ + NSLOOKUP_PROG="`set_prog_path nslookup`" + if [ "$NSLOOKUP_PROG" = "" ]; then + getent hosts `uname -n` | awk '{print $2}' + else + $NSLOOKUP_PROG `hostname` | $AWK_PROG '{ if ($1 == "Name:") print $2 }' + fi +} + if [ ! -f group ] then echo "Creating the group index ..." -- BOFH excuse #334: 50% of the manual is in .pdf readme files From SEMA-CR-1-5OTZ5I@ptcmarketing.com Mon Jul 20 00:15:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.4 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6K5FG62020962 for ; Mon, 20 Jul 2009 00:15:17 -0500 X-ASG-Debug-ID: 1248066956-5a76007b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay2.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8FFAA13B56A1 for ; Sun, 19 Jul 2009 22:15:56 -0700 (PDT) Received: from relay2.ptc.com (relay2.ptc.com [12.11.148.122]) by cuda.sgi.com with ESMTP id YRtHwGhMv9C75RtD for ; Sun, 19 Jul 2009 22:15:56 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.43,232,1246852800"; d="scan'208,217";a="307491693" Received: from hqcrmprdint18.ptcnet.ptc.com ([132.253.201.206]) by crmmaxx.ptc.com with ESMTP; 20 Jul 2009 01:10:04 -0400 To: MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Info" X-ASG-Orig-Subj: Are You Putting Your IP at Risk? Live Webcast: Protecting IP in Nuclear & Energy Subject: Are You Putting Your IP at Risk? Live Webcast: Protecting IP in Nuclear & Energy Sender: "PTC Info" Message-ID: Content-Type: multipart/alternative; boundary=BF_1248066005858_1913985998 X-Barracuda-Connect: relay2.ptc.com[12.11.148.122] X-Barracuda-Start-Time: 1248066957 Date: Sun, 19 Jul 2009 22:15:56 -0700 (PDT) X-Barracuda-Bayes: INNOCENT GLOBAL 0.3946 1.0000 -0.0138 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.81 X-Barracuda-Spam-Status: No, SCORE=1.81 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA041a, HTML_MESSAGE, MIME_QP_LONG_LINE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3864 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.82 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 1.00 BSF_SC5_SA041a Custom Rule SA041a X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1248066005858_1913985998 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Live Webcast: Protecting IP in Nuclear & Energy Organizations (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-4Z14I5= &o=3D= 1-5C5LA7= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D96545) Tuesday, July 28 at 1 p.m. ET Why are the leaders in Nuclear & Energy investing in solutions to capture an= d safeguard their engineering intellectual property? It's simple: they no longer can afford to waste valuable time and money repr= oducing engineering information whenever it gets lost, or walks out the door= with retirees, or disappears as engineers move into new positions and organ= izations. Boosting Productivity, Building Better Products Here's your opportunity to see how the safest, easiest and most affordable s= olution for creating and documenting engineering calculations is helping top= companies in Nuclear & Energy get better products--and projects--out the do= or faster. See how today's engineering calculation software helps you: * Perform, record and share calculation and design work * Promote engineering design best practices * Verify, validate and audit engineering work and design results from othe= r applications * Reduce errors from transferring information between applications * Document regulatory and standards compliance information =E2=80=93 and m= ore! Register Now =E2=80=93 Live Webcast =E2=80=93 Tuesday, July 28 at 1 p.m. ET (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-4Z14I5= &o=3D= 1-5C5LA7= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D96545) Don't miss this opportunity to learn about the industry's most powerful and = reliable solution for capturing knowledge, reusing calculations, and collabo= rating in Nuclear & Energy. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-5C5LA7= &campd=3D= 1-4Z14I5= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change email preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-5C5LA7= &campd=3D= 1-4Z14I5= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= . --BF_1248066005858_1913985998 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Email IC Mathcad Nuclear&Energy LIVE Webcast NA Q4FY09
3D"PTC.com"
3D"

Live Webcast:
=20

Protecting IP in Nuclear & Energy Organizati= ons

Tuesday, July 28 at 1 p.m. ET

Why are the leaders in Nuclear & Energy investing in solutions to cap= ture and safeguard their engineering intellectual property?

It's simple: they no longer can afford to waste valuable time and money r= eproducing engineering information whenever it gets lost, or walks out the d= oor with retirees, or disappears as engineers move into new positions and or= ganizations.

Boosting Productivity, Building Better Products

Here's your opportunity to see how the safest, easiest and most affordabl= e solution for creating and documenting engineering calculations is helping = top companies in Nuclear & Energy get better products--and projects--out= the door faster. 

See how today's engineering calculation software helps you:

  • Perform, record and share calculation and design work

  • Promote engineering design best practices

  • Verify, validate and audit engineering work and design results from othe= r applications

  • Reduce errors from transferring information between applications

  • Document regulatory and standards compliance information – and mor= e!

Registe= r Now – Live Webcast – Tuesday, July 28 at 1 p.m. ET

Don't miss this opportunity to learn about the industry's most powerful a= nd reliable solution for capturing knowledge, reusing calculations, and coll= aborating in Nuclear & Energy.

3D""

contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1248066005858_1913985998-- From BATV+a0fcf2124e499452f9a4+2157+infradead.org+hch@bombadil.srs.infradead.org Mon Jul 20 04:32:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6K9Vx2S034533 for ; Mon, 20 Jul 2009 04:32:02 -0500 X-ASG-Debug-ID: 1248082842-5cdb030a0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F33AEA99FF5 for ; Mon, 20 Jul 2009 02:40:42 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id fQBjsEQI6lEsuxNf for ; Mon, 20 Jul 2009 02:40:42 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSpEe-00072M-Mc; Mon, 20 Jul 2009 09:32:40 +0000 Date: Mon, 20 Jul 2009 05:32:40 -0400 From: Christoph Hellwig To: Christian Kujau Cc: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] don't fail if nslookup is not found (was: xfstests: nslookup not found) Subject: Re: [PATCH] don't fail if nslookup is not found (was: xfstests: nslookup not found) Message-ID: <20090720093240.GA24549@infradead.org> References: <20090719182012.GA10936@infradead.org> <20090720001637.GA31674@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248082842 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Jul 19, 2009 at 06:46:25PM -0700, Christian Kujau wrote: > On Sun, 19 Jul 2009 at 20:16, Christoph Hellwig wrote: > > Yes, that's exactly it. Can you resend it with a proper subject, > > description and add your Signed-off-by tag? > > > When nslookup is not available, execution would stop. This patch moves the > check for nslookup and the _get_fqdn function into the ./new script (since > this is the only place where it's used) and we don't fail any more but try > to find out our FQDN without nslookup. Thanks, I've put the patch in and pushed it to the kernel.org repository. From michael.monnerie@is.it-management.at Mon Jul 20 06:00:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KB0SbU072585 for ; Mon, 20 Jul 2009 06:00:29 -0500 X-ASG-Debug-ID: 1248088149-20f300ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AC4B412A5998 for ; Mon, 20 Jul 2009 04:09:10 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id 2bcaeVauDjIPY1RW for ; Mon, 20 Jul 2009 04:09:10 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id E16B54DAF for ; Mon, 20 Jul 2009 13:01:38 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id E7B8A40017E for ; Mon, 20 Jul 2009 13:01:05 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Write barriers and hardware RAID Subject: Re: Write barriers and hardware RAID Date: Mon, 20 Jul 2009 13:01:01 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2903107.zRqvKR97H9"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907201301.05472@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248088151 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3889 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart2903107.zRqvKR97H9 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline I wrote that sections of the FAQ, so I should answer: On Freitag 17 Juli 2009 J P=E4lve wrote: > - The XFS FAQ states that with battery backup'd RAID hardware, both > write barriers and individual disk cache should be turned off. > However, I'm getting better benchmark results with both turned on. I guess it's only the "hard disk cache" turned on leading to better=20 performance. But that is a very, very dangerous setup: If you use a RAID=20 with 16 hard disks, each having 32MB cache, on a power fail you can=20 loose up to 16*32 =3D 512MB of data, as on a power outage hard disks=20 simply drop their caches. And chances are *very* big that a significant=20 amount of filesystem metadata is in there, trashing your filesystem=20 badly. Never turn this on if you care about your data. =46or write barriers, the performance should be a little bit lower if ON=20 instead OFF. > What I'm wondering is, will write barriers work as intended when used > with hardware RAID controller (PERC 6/E)? Googling only turned up > results relating to software RAID. No. RAID controllers simulate written data by telling the host that a=20 disk block has been written while it's only in the controller's cache.=20 The controller will write it later, when he has time. So basically=20 barriers only generate extra I/O there. This is valid if the controller=20 has writes "write back". If set to "write through", the RAID controller=20 simply does not cache writes, and directly writes them to disk, and only=20 afterwards tell the host that data has been written. This will drop your=20 write performance very significantly, on a server with much I/O you=20 don't want to use write through (aka write cache off). > - The XFS FAQ also states that virtualization products prevent write > barriers from working correctly. Is this still the case (specifically > with ESXi 3.5 and later) and is there anything that can be done about > it? Does VMFS somehow work around this, or is the problem then just > "out of sight, out of mind"? I found an entry for the ".vmx" config file: scsi0:0.writeThrough =3D "TRUE" That should do the desired "do not cache this disk", but I didn't test=20 it so far. I wonder if someone knows of such a setting for XenServer? If someone has a solution to "VM disk writes cached", I'd be happy to=20 hear how to do that. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart2903107.zRqvKR97H9 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpkTnEACgkQzhSR9xwSCbTDegCgovqblhdjq/2E6YNXtqZCkNgK NuoAoOiysou7agqkCFRthpES8S7OJ6hD =MxEg -----END PGP SIGNATURE----- --nextPart2903107.zRqvKR97H9-- From michael.monnerie@is.it-management.at Mon Jul 20 06:11:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33, SUBJ_CONCERN autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KBBVJi075074 for ; Mon, 20 Jul 2009 06:11:31 -0500 X-ASG-Debug-ID: 1248088331-1cac02030000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A1546371BF1 for ; Mon, 20 Jul 2009 04:12:12 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id pFfdMR9zV59lwGNO for ; Mon, 20 Jul 2009 04:12:12 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 3620F4DAF for ; Mon, 20 Jul 2009 13:12:43 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 8C78940017E for ; Mon, 20 Jul 2009 13:12:10 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: concerning 'optimal' strip size on RAID disks... Subject: Re: concerning 'optimal' strip size on RAID disks... Date: Mon, 20 Jul 2009 13:12:05 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: <4A611851.8060904@tlinx.org> In-Reply-To: <4A611851.8060904@tlinx.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2554431.G1PSpzaxgO"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907201312.10058@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248088332 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3888 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart2554431.G1PSpzaxgO Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Samstag 18 Juli 2009 Linda A. Walsh wrote: > Concerning strip-size. What are the considerations for that? Any > reason not to chose the largest? Seems that at sizes up to 1MB, the > larger the better. > > For direct I/O (which is what the RAID controller would be doing to > it's disks, seems a larger write would be better). > > Would I be na=C3=AFve to assume that if a RAID controller only needed to > update 1 block, it wouldn't need to update the entire strip? I'd say exactly your last sentence tells you why a smaller stripe size=20 can be better. > Would there be a benefit in running a smaller strip size? If you run virtualization (say 20 virtual servers on a single hardware),=20 you will basically only have random I/O. Each of those 20 servers might=20 have sequential I/O, but the RAID controller sees 20 streams of I/O,=20 making the whole thing quite random. Has anyone benchmarked on this? > I know when I can control the hard disks, I can enable their write > caches, so having them do physical writes the keep their write > buffers saturated would optimize write performance, at least, but if > it's a BIOS or hardware controlled RAID, I don't know if I'd have the > option to turn the disk's write buffer on or off. So that likely > wouldn't matter much. That setting should be possible via the RAID controller. On Areca you=20 can set "Disk Write Cache Mode" to off, on HP it's called "write=20 through" or "write back disabled" IIRC. > Ideally, I think, it be optimal if a RAID controller (hardware or > software) really knew the the layout of the data on disk -- as in > sectors/track. On today's hardware that's not needed anymore, as already a simple RAID=20 level virtualizes accesses. > Then it really might be able to interleave tracks > among disk units (unless all the tracks can be written contiguously > w/no delay, then I'd guess there'd be no benefit...oh well.. Yeah, I'm so old that twenty years ago I really still learned that at=20 school, but those really don't matter anymore. > But how does one decide a strip size for RAID disks? > What criteria does one use? If someone *really* knows, I'd be interested as well. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart2554431.G1PSpzaxgO Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpkUQoACgkQzhSR9xwSCbQf7QCfYLi8C5ihFrbEBxIY1WFmsoVN f3UAn1IATEpk8Lr73DjdCLt56Mj6+57B =CTNB -----END PGP SIGNATURE----- --nextPart2554431.G1PSpzaxgO-- From michael.monnerie@is.it-management.at Mon Jul 20 06:13:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KBDYPc075583 for ; Mon, 20 Jul 2009 06:13:34 -0500 X-ASG-Debug-ID: 1248088937-210200ff0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0D177A9A1DA for ; Mon, 20 Jul 2009 04:22:17 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id CVFdk9CFZITtvwQd for ; Mon, 20 Jul 2009 04:22:17 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id A6CAA4DAF for ; Mon, 20 Jul 2009 13:14:42 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 14F9440017E for ; Mon, 20 Jul 2009 13:14:10 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: does XFS support block sizes other than 512 bytes? Subject: Re: does XFS support block sizes other than 512 bytes? Date: Mon, 20 Jul 2009 13:14:09 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: <4A6119B5.6000706@tlinx.org> In-Reply-To: <4A6119B5.6000706@tlinx.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2412106.dS2Xou9ea9"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907201314.09615@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248088938 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3889 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart2412106.dS2Xou9ea9 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Samstag 18 Juli 2009 Linda A. Walsh wrote: > This one's a bit more specific than the last. =A0If memory serves me, > XFS supported differing block sizes (which you could do on a hardware > format of a SCSI drive) back on IRIX. =A0But when first ported to Linux > it didn't work. =A0Was that ever fixed? =A0I seem to remember that going > to 1-2K block sizes gave and extra 10%, and it almost seems logical > that going to a 4kK block size would be ideal for xfs (presuming your > disk doesn't start getting errors, then it might get harder to remap > sectors and you'd hit hard disk failure (w/o remappable sectors) > sooner. > > But at least 1K might be a reasonable tradeoff? =A0Been quite a while > since I tried it and don't even know if the SAS drives allow it (if > they do, I wonder if the newer SATA drives do?) XFS can only use sector sizes that the hard disks provide. There will be=20 4K drives from vendors "soon", and XFS is prepared to use that.=20 mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart2412106.dS2Xou9ea9 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpkUYEACgkQzhSR9xwSCbRGagCg9WRCoLYWP3tgm0aAfjhdoKPX 1uEAoIHDy5vkl1cWj2ROwcblaZXonml3 =V2bs -----END PGP SIGNATURE----- --nextPart2412106.dS2Xou9ea9-- From michael.monnerie@is.it-management.at Mon Jul 20 06:21:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_22, J_CHICKENPOX_33,J_CHICKENPOX_56 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KBLgfa077352 for ; Mon, 20 Jul 2009 06:21:42 -0500 X-ASG-Debug-ID: 1248088943-216001b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 09851371CFD for ; Mon, 20 Jul 2009 04:22:23 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id Tk1QTmb3BIOmF0BW for ; Mon, 20 Jul 2009 04:22:23 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 2DBF44DAF for ; Mon, 20 Jul 2009 13:22:55 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 907CC40017E for ; Mon, 20 Jul 2009 13:22:22 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: data switchs su,sw and sunit,swidth Subject: Re: data switchs su,sw and sunit,swidth Date: Mon, 20 Jul 2009 13:22:21 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: <4A626EC5.3090100@tlinx.org> In-Reply-To: <4A626EC5.3090100@tlinx.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2080549.len0J7tyI9"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907201322.22102@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248088944 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3890 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart2080549.len0J7tyI9 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Sonntag 19 Juli 2009 Linda Walsh wrote: > Then, for RAID 1 (mirror) would 'sw'=3D=3D1? =A0Would setting the =A0su/sw > =A0value for a RAID 1 actually matter in any way? =A0Ie, technically -- > it would fill in numbers for OS book-keeping, but wouldn't change > anything in terms of performance or layout, vs. 'physically' -- where > it could change disk layout or performance? > > At RAID 0, I'd guess =A0sw=3D=3D2? Both RAID0 and RAID1 use sw=3D0. > In RAID 5, would it be =A0 sw =A0=3D=3D #Disks-1? =A0So even w/6 disks, it > still only uses 1 disk for parity and =A0sw =3D=3D 5? RAID5: sw =3D #Disks-1 ( so with 8 disks use 7) RAID6: sw =3D #Disks-2 ( so with 8 disks use 6) > I wonder what becomes a max-safe RAID 5 size? (or is the number of > parity disks a settable option with RAID 5?) RAID5 always only has 1 parity disk (well, technically it's not a=20 physical disk, but the parity is distributed over all disks in the=20 array). Don't know what you mean by "max-safe" size. The more disks you have,=20 the bigger the chance that a single disk breaks. Also, I tested with=20 Areca controllers, using more than 7 disks in a single RAID array=20 doesn't improve speed anymore. So I use RAID-6 for up to 8 disks, and=20 make it RAID-60 for up to 16 disks (with Areca controllers). mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart2080549.len0J7tyI9 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpkU24ACgkQzhSR9xwSCbRBHQCdFEiFEEdfQy3ZZ7CfZnTdGF79 lWMAnjDSVCEHFxd3K0cSGqRLCne1H60n =jLpb -----END PGP SIGNATURE----- --nextPart2080549.len0J7tyI9-- From sandeen@sandeen.net Mon Jul 20 10:51:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KFpaaG092816 for ; Mon, 20 Jul 2009 10:51:37 -0500 X-ASG-Debug-ID: 1248105137-4c9f00680000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CAA0E372DDD for ; Mon, 20 Jul 2009 08:52:17 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 97ANfvUxtXl6OopB for ; Mon, 20 Jul 2009 08:52:17 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6KFqHDQ017111 for ; Mon, 20 Jul 2009 11:52:17 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6KFqGnJ009867 for ; Mon, 20 Jul 2009 11:52:16 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6KFqF1a018376 for ; Mon, 20 Jul 2009 11:52:15 -0400 Message-ID: <4A6492AF.3030809@sandeen.net> Date: Mon, 20 Jul 2009 10:52:15 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] use XFS_CORRUPTION_ERROR in xfs_btree_check_sblock Subject: [PATCH] use XFS_CORRUPTION_ERROR in xfs_btree_check_sblock Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248105138 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3908 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean In Red Hat Bug 512552 - Can't write to XFS mount during raid5 resync a user ran into corruption while resyncing a raid, and we failed a consistency test, but didn't get much more info; it'd be nice to call XFS_CORRUPTION_ERROR here so we can see the buffer contents. Compile-tested only... Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c index e9df995..2671738 100644 --- a/fs/xfs/xfs_btree.c +++ b/fs/xfs/xfs_btree.c @@ -120,8 +120,8 @@ xfs_btree_check_sblock( XFS_RANDOM_BTREE_CHECK_SBLOCK))) { if (bp) xfs_buftrace("SBTREE ERROR", bp); - XFS_ERROR_REPORT("xfs_btree_check_sblock", XFS_ERRLEVEL_LOW, - cur->bc_mp); + XFS_CORRUPTION_ERROR("xfs_btree_check_sblock", + XFS_ERRLEVEL_LOW, cur->bc_mp, block); return XFS_ERROR(EFSCORRUPTED); } return 0; From lists@nerdbynature.de Mon Jul 20 12:03:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KH38dB097091 for ; Mon, 20 Jul 2009 12:03:08 -0500 X-ASG-Debug-ID: 1248109429-4cab01fb0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 33C95373148 for ; Mon, 20 Jul 2009 10:03:49 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by cuda.sgi.com with ESMTP id olpKdijgB88LkarR for ; Mon, 20 Jul 2009 10:03:49 -0700 (PDT) Received: from bogon.housecafe.de (ppp-82-135-80-222.dynamic.mnet-online.de [82.135.80.222]) by mrelayeu.kundenserver.de (node=mreu2) with ESMTP (Nemesis) id 0MKv5w-1MSwHE0S4Q-000kVM; Mon, 20 Jul 2009 19:03:48 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon with esmtp (Exim 4.69) (envelope-from ) id 1MSwH8-0008HI-76; Mon, 20 Jul 2009 19:03:42 +0200 Date: Mon, 20 Jul 2009 10:03:37 -0700 (PDT) From: Christian Kujau To: Christoph Hellwig cc: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] don't fail if nslookup is not found (was: xfstests: nslookup not found) Subject: Re: [PATCH] don't fail if nslookup is not found (was: xfstests: nslookup not found) In-Reply-To: <20090720093240.GA24549@infradead.org> Message-ID: References: <20090719182012.GA10936@infradead.org> <20090720001637.GA31674@infradead.org> <20090720093240.GA24549@infradead.org> User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX1+M92H0sEKmimJNLoJCqyJdO0PuRucej3+du6b rKMieLc6i0eqz5c30DZEoEE5+B4XoAzUzYdnZi4FxlNY9Bu3lB B4+EsJ3i+hqdmmCAqd4Qg== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.171] X-Barracuda-Start-Time: 1248109430 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3912 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, 20 Jul 2009 at 05:32, Christoph Hellwig wrote: > Thanks, I've put the patch in and pushed it to the kernel.org > repository. Thanks, Christoph. This reminds me to ask: why is there also a kernel.org repo, when there's one on oss.sgi.com too? (The latter being referenced in the XFS wiki) Christian. -- BOFH excuse #9: doppler effect From sandeen@sandeen.net Mon Jul 20 12:56:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KHu8x4099362 for ; Mon, 20 Jul 2009 12:56:09 -0500 X-ASG-Debug-ID: 1248112607-473b03580000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 24E4D3736CB for ; Mon, 20 Jul 2009 10:56:47 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 4CrKEZwkOE19fzi9 for ; Mon, 20 Jul 2009 10:56:47 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6KHubei020675; Mon, 20 Jul 2009 13:56:37 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6KHublX012968; Mon, 20 Jul 2009 13:56:37 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6KHuavG008251; Mon, 20 Jul 2009 13:56:36 -0400 Message-ID: <4A64AFD4.90407@sandeen.net> Date: Mon, 20 Jul 2009 12:56:36 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Christian Kujau CC: Christoph Hellwig , linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] don't fail if nslookup is not found Subject: Re: [PATCH] don't fail if nslookup is not found References: <20090719182012.GA10936@infradead.org> <20090720001637.GA31674@infradead.org> <20090720093240.GA24549@infradead.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248112608 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3916 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christian Kujau wrote: > On Mon, 20 Jul 2009 at 05:32, Christoph Hellwig wrote: >> Thanks, I've put the patch in and pushed it to the kernel.org >> repository. > > Thanks, Christoph. This reminds me to ask: why is there also a kernel.org > repo, when there's one on oss.sgi.com too? (The latter being referenced in > the XFS wiki) outsiders can't commit to sgi's git repo, so those doing active development can commit to the one on kernel.org, and then sgi periodically pulls those in to oss.sgi.com. -Eric From sandeen@sandeen.net Mon Jul 20 14:06:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.1 required=5.0 tests=AWL,BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KJ6aMx102949 for ; Mon, 20 Jul 2009 14:06:36 -0500 X-ASG-Debug-ID: 1248116837-7dc9015e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8210D13BA3E8 for ; Mon, 20 Jul 2009 12:07:17 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 6RYqptCcsgurNACM for ; Mon, 20 Jul 2009 12:07:17 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6KJ7H4s006453 for ; Mon, 20 Jul 2009 15:07:17 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6KJ7Gvm000554 for ; Mon, 20 Jul 2009 15:07:16 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6KJ7F09021190 for ; Mon, 20 Jul 2009 15:07:15 -0400 Message-ID: <4A64C063.2070807@sandeen.net> Date: Mon, 20 Jul 2009 14:07:15 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfs_metadump: Allow operation on frozen filesystems Subject: [PATCH] xfs_metadump: Allow operation on frozen filesystems Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248116838 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0195 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3920 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The xfs_metadump manpage says that it works on a frozen filesystem, but in reality it does not, and fails because the fs still looks mounted & writable. I don't think we have a way to test for frozen (!) so add a -F option which essentially overrides the xfs_db "-i" option with a later "-r" which is more forgiving. Document this, and a few other missing bits in the manpage. Signed-off-by: Eric Sandeen --- iff --git a/db/xfs_metadump.sh b/db/xfs_metadump.sh index 28b04b8..ef51678 100755 --- a/db/xfs_metadump.sh +++ b/db/xfs_metadump.sh @@ -5,9 +5,9 @@ OPTS=" " DBOPTS=" " -USAGE="Usage: xfs_metadump [-efogwV] [-m max_extents] [-l logdev] source target" +USAGE="Usage: xfs_metadump [-efogwFV] [-m max_extent] [-l logdev] source target" -while getopts "efgl:m:owV" c +while getopts "efgl:m:owFV" c do case $c in e) OPTS=$OPTS"-e ";; @@ -17,6 +17,7 @@ do w) OPTS=$OPTS"-w ";; f) DBOPTS=$DBOPTS" -f";; l) DBOPTS=$DBOPTS" -l "$OPTARG" ";; + F) DBOPTS=$DBOPTS" -r";; V) xfs_db -p xfs_metadump -V status=$? exit $status @@ -29,7 +30,7 @@ done set -- extra $@ shift $OPTIND case $# in - 2) xfs_db$DBOPTS -F -i -p xfs_metadump -c "metadump$OPTS $2" $1 + 2) xfs_db -F -i $DBOPTS -p xfs_metadump -c "metadump$OPTS $2" $1 status=$? ;; *) echo $USAGE 1>&2 diff --git a/man/man8/xfs_metadump.8 b/man/man8/xfs_metadump.8 index f0ff1ae..1f74dd4 100644 --- a/man/man8/xfs_metadump.8 +++ b/man/man8/xfs_metadump.8 @@ -4,11 +4,15 @@ xfs_metadump \- copy XFS filesystem metadata to a file .SH SYNOPSIS .B xfs_metadump [ -.B \-efgow +.B \-efgowFV ] [ .B \-l .I logdev ] +] [ +.B \-m +.I max_extent +] .I source .I target .SH DESCRIPTION @@ -28,7 +32,10 @@ redirected to another program such as a compression application. .B xfs_metadump should only be used to copy unmounted filesystems, read-only mounted filesystems, or frozen filesystems (see -.BR xfs_freeze (8)). +.BR xfs_freeze (8) +and the +.B \-F +option below). Otherwise, the generated dump could be inconsistent or corrupt. .PP .B xfs_metadump @@ -94,12 +101,28 @@ For filesystems which use an external log, this specifies the device where the external log resides. The external log is not copied, only internal logs are copied. .TP +.BI \-m " max_extent" +Specify the maximum size of a metadata extent to process, in filesystem blocks. +Anything larger than this will be considered corrupt metadata, and skipped. +The default is 1000 blocks. +.TP .B \-o Disables obfuscation of file names and extended attributes. .TP .B \-w Prints warnings of inconsistant metadata encountered to stderr. Bad metadata is still copied. +.TP +.B \-F +Allows a metadump of a filesystem frozen with +.BR xfs_freeze (8). +This overrides the normal tests that the fileystem is either unmounted +or readonly; because there is no way to test for a frozen filesystem, +this option must be manually specified. Specifying this option on a +writable, non-frozen filesystem will likely result in a corrupted dump image. +.TP +.B \-V +Prints out the current version number and exits. .SH DIAGNOSTICS .B xfs_metadump returns an exit code of 0 if all readable metadata is succesfully copied or From patrick@news-service.com Mon Jul 20 14:19:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KJJ9f5103811 for ; Mon, 20 Jul 2009 14:19:10 -0500 X-ASG-Debug-ID: 1248118073-505301e90000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pu01.news-service.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0C01210A8B8E for ; Mon, 20 Jul 2009 12:27:53 -0700 (PDT) Received: from pu01.news-service.com (ns1.news-service.com [195.114.240.3]) by cuda.sgi.com with ESMTP id Hh6hfv0K9VOScNZ0 for ; Mon, 20 Jul 2009 12:27:53 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by pu01.news-service.com (Postfix) with ESMTP id 209B71165FA; Mon, 20 Jul 2009 21:19:49 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at pu01.news-service.com Received: from pu01.news-service.com ([127.0.0.1]) by localhost (pu01.nse [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6ElSyRj3ZuPD; Mon, 20 Jul 2009 21:19:46 +0200 (CEST) Received: from [172.25.4.14] (unknown [172.25.8.1]) by pu01.news-service.com (Postfix) with ESMTP id ACA241165F5; Mon, 20 Jul 2009 21:19:46 +0200 (CEST) Message-ID: <4A64C34F.80807@news-service.com> Date: Mon, 20 Jul 2009 21:19:43 +0200 From: Patrick Schreurs Organization: News-Service.com User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090630204256.GA1891@infradead.org> In-Reply-To: <20090630204256.GA1891@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ns1.news-service.com[195.114.240.3] X-Barracuda-Start-Time: 1248118075 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3921 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hi Christoph, I saw some patches from your hand on this list ("fixes for memory allocator recursions into the filesystem"). Are these patches related to this issue? Thanks, -Patrick Christoph Hellwig wrote: > On Tue, Jun 30, 2009 at 10:13:57PM +0200, Patrick Schreurs wrote: >> Hi (again), >> >> Anyone has any advice to prevent this from happening? We've seen 10 >> crashes in the last 14 days. Would it be helpful to enable >> CONFIG_XFS_DEBUG? Does this result in a big performance hit on busy xfs >> filesystems? If we can help troubleshoot this problem, please advice. >> >> If i understand correctly this issue also exists in 2.6.29? Should i >> downgrade to the latest 2.6.28 kernel to regain stability? > > For now please downgrade to the latest 2.6.28, yes. I hope I will have > time and machine ressources to dig deeper into the problem this week. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From BATV+a0fcf2124e499452f9a4+2157+infradead.org+hch@bombadil.srs.infradead.org Mon Jul 20 15:14:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KKE9xv106505 for ; Mon, 20 Jul 2009 15:14:09 -0500 X-ASG-Debug-ID: 1248120891-5d6d009e0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 644851B0C8AA for ; Mon, 20 Jul 2009 13:14:51 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id JLKp21bmKS2CWYsd for ; Mon, 20 Jul 2009 13:14:51 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSzG5-0004VG-Vv; Mon, 20 Jul 2009 20:14:50 +0000 Date: Mon, 20 Jul 2009 16:14:49 -0400 From: Christoph Hellwig To: Patrick Schreurs Cc: Christoph Hellwig , linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode Message-ID: <20090720201449.GA1646@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090630204256.GA1891@infradead.org> <4A64C34F.80807@news-service.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A64C34F.80807@news-service.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248120891 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 20, 2009 at 09:19:43PM +0200, Patrick Schreurs wrote: > Hi Christoph, > > I saw some patches from your hand on this list ("fixes for memory > allocator recursions into the filesystem"). Are these patches related to > this issue? I don't think they are, but if you have sparse testing cycles it would be great if you could test it. I'm a bit overloaded right now and can't do as much debugging of these problems as I'd wish to. From BATV+a0fcf2124e499452f9a4+2157+infradead.org+hch@bombadil.srs.infradead.org Mon Jul 20 15:38:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KKcvgS107974 for ; Mon, 20 Jul 2009 15:38:57 -0500 X-ASG-Debug-ID: 1248122379-3bce01e10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EFB5E37414F for ; Mon, 20 Jul 2009 13:39:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id CpecnIhUZVMeAcXt for ; Mon, 20 Jul 2009 13:39:39 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MSze7-0001Vw-Bj; Mon, 20 Jul 2009 20:39:39 +0000 Date: Mon, 20 Jul 2009 16:39:39 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_metadump: Allow operation on frozen filesystems Subject: Re: [PATCH] xfs_metadump: Allow operation on frozen filesystems Message-ID: <20090720203939.GA5517@infradead.org> References: <4A64C063.2070807@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A64C063.2070807@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248122379 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 20, 2009 at 02:07:15PM -0500, Eric Sandeen wrote: > The xfs_metadump manpage says that it works on a frozen filesystem, > but in reality it does not, and fails because the fs still looks > mounted & writable. > > I don't think we have a way to test for frozen (!) so add a -F > option which essentially overrides the xfs_db "-i" option with > a later "-r" which is more forgiving. Hmm, that feels a bit dagerous to me. What about just adding an option to xfs_metadump to freeze the filesystem itself before performing the dump and then unfreeze it when done? From BATV+a0fcf2124e499452f9a4+2157+infradead.org+hch@bombadil.srs.infradead.org Mon Jul 20 16:21:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6KLLB9c111703 for ; Mon, 20 Jul 2009 16:21:12 -0500 X-ASG-Debug-ID: 1248124914-452003490000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 643AD374466 for ; Mon, 20 Jul 2009 14:21:54 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Xw5j2FsRWmqu1mpo for ; Mon, 20 Jul 2009 14:21:54 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MT0Iz-0001vN-VQ; Mon, 20 Jul 2009 21:21:53 +0000 Date: Mon, 20 Jul 2009 17:21:53 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] use XFS_CORRUPTION_ERROR in xfs_btree_check_sblock Subject: Re: [PATCH] use XFS_CORRUPTION_ERROR in xfs_btree_check_sblock Message-ID: <20090720212153.GA6832@infradead.org> References: <4A6492AF.3030809@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A6492AF.3030809@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248124914 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Jul 20, 2009 at 10:52:15AM -0500, Eric Sandeen wrote: > In Red Hat Bug 512552 > - Can't write to XFS mount during raid5 resync > > a user ran into corruption while resyncing a raid, and we failed > a consistency test, but didn't get much more info; it'd be nice > to call XFS_CORRUPTION_ERROR here so we can see the buffer > contents. > > Compile-tested only... Looks good to me, I'll throw it into my XFSQA queue.. From michael@rlogin.dk Mon Jul 20 20:22:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33, J_CHICKENPOX_46,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6L1MaBf126063 for ; Mon, 20 Jul 2009 20:22:38 -0500 X-ASG-Debug-ID: 1248139396-708f01e00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rlogin.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 99F8B374E6F for ; Mon, 20 Jul 2009 18:23:17 -0700 (PDT) Received: from rlogin.dk (rlogin.dk [81.161.188.225]) by cuda.sgi.com with ESMTP id MROdgZnxIluEfFhJ for ; Mon, 20 Jul 2009 18:23:17 -0700 (PDT) Received: by rlogin.dk (Postfix, from userid 1000) id 455981801274; Tue, 21 Jul 2009 03:24:55 +0200 (CEST) Date: Tue, 21 Jul 2009 03:24:55 +0200 From: Michael Ole Olsen To: xfs X-ASG-Orig-Subj: patch 2.6.30 and 2.6.30.1 xfs/nfs oops fix, radix tree Subject: patch 2.6.30 and 2.6.30.1 xfs/nfs oops fix, radix tree Message-ID: <20090721012455.GG3229@rlogin.dk> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="sfyO1m2EN8ZOtJL6" Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: rlogin.dk[81.161.188.225] X-Barracuda-Start-Time: 1248139398 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3946 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --sfyO1m2EN8ZOtJL6 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Eric has been very helpful in helping me downgrade xfs in 2.6.30.1 to 2.6.2= 8.7 version (getting 2.6.28.7 to compile in 2.6.30.1) which removed the oopses. Just wanted to post here for other people like me that don't have an option of downgrading their kernel (need i.e. mdadm>=3D2.6.30). for those that use special features of i.e. mdadm for raid which requires at least 2.6.30 to assemble the raid6 with Q blocks on the last disk i.e. this= is about the only option. Xfs seems to oops all the time in >=3D2.6.30 on my boxes with radix tree tr= ace,=20 that is why the downgrade was made. I havn't had a single issue since downgrading which is a few days ago now, before I used to get up to 3-4 oopses a day in 2.6.30 or 2.6.30.1 with nfs+xfs and lots of npd!=3Dnp in dmesg which are now gone Here is the patch that I got from him that fixes the oopses in >=3D2.6.30 w= ith nfs, I will be adding it to the bugzilla as well until the real bug is fixed http://bugzilla.kernel.org/show_bug.cgi?id=3D13375 The patch is simply the 2.6.28.7 xfs code, modified to compile on 2.6.30 and 2.6.30.1 , no guarantees (although I have extensively tested for some d= ays now without problems whatsoever). # author eric @ xfs.org # fixes xfs radix tree oopses in 2.6.30 and 2.6.30.1 with nfs kernel server # and also perhaps selinux oopses (nfs_setuid) as well (havn't tested) # this patch is based on linux 2.6.28.7 xfs kernel code, # and should only be needed if you need kernel code from # 2.6.30 but xfs keeps oopsing in that kernel, i.e. mdadm from >=3D2.6.30 k= ernel Index: linux-2.6.28.7/fs/xfs/linux-2.6/xfs_cred.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.28.7.orig/fs/xfs/linux-2.6/xfs_cred.h +++ linux-2.6.28.7/fs/xfs/linux-2.6/xfs_cred.h @@ -23,9 +23,7 @@ /* * Credentials */ -typedef struct cred { - /* EMPTY */ -} cred_t; +typedef struct cred cred_t; extern struct cred *sys_cred; Index: linux-2.6.28.7/fs/xfs/xfs_acl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.28.7.orig/fs/xfs/xfs_acl.c +++ linux-2.6.28.7/fs/xfs/xfs_acl.c @@ -366,7 +366,7 @@ xfs_acl_allow_set( return ENOTDIR; if (vp->i_sb->s_flags & MS_RDONLY) return EROFS; - if (XFS_I(vp)->i_d.di_uid !=3D current->fsuid && !capable(CAP_FOWNE= R)) + if (XFS_I(vp)->i_d.di_uid !=3D current_fsuid() && !capable(CAP_FOWN= ER)) return EPERM; return 0; } @@ -413,13 +413,13 @@ xfs_acl_access( switch (fap->acl_entry[i].ae_tag) { case ACL_USER_OBJ: seen_userobj =3D 1; - if (fuid !=3D current->fsuid) + if (fuid !=3D current_fsuid()) continue; matched.ae_tag =3D ACL_USER_OBJ; matched.ae_perm =3D allows; break; case ACL_USER: - if (fap->acl_entry[i].ae_id !=3D current->fsuid) + if (fap->acl_entry[i].ae_id !=3D current_fsuid()) continue; matched.ae_tag =3D ACL_USER; matched.ae_perm =3D allows; Index: linux-2.6.28.7/fs/xfs/linux-2.6/xfs_ioctl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.28.7.orig/fs/xfs/linux-2.6/xfs_ioctl.c +++ linux-2.6.28.7/fs/xfs/linux-2.6/xfs_ioctl.c @@ -256,6 +256,7 @@ xfs_open_by_handle( struct file *parfilp, struct inode *parinode) { + const struct cred *cred =3D current_cred(); int error; int new_fd; int permflag; @@ -321,7 +322,7 @@ xfs_open_by_handle( mntget(parfilp->f_path.mnt); /* Create file pointer. */ - filp =3D dentry_open(dentry, parfilp->f_path.mnt, hreq.oflags); + filp =3D dentry_open(dentry, parfilp->f_path.mnt, hreq.oflags, cred= ); if (IS_ERR(filp)) { put_unused_fd(new_fd); return -XFS_ERROR(-PTR_ERR(filp)); @@ -1007,7 +1008,7 @@ xfs_ioctl_setattr( * to the file owner ID, except in cases where the * CAP_FSETID capability is applicable. */ - if (current->fsuid !=3D ip->i_d.di_uid && !capable(CAP_FOWNER)) { + if (current_fsuid() !=3D ip->i_d.di_uid && !capable(CAP_FOWNER)) { code =3D XFS_ERROR(EPERM); goto error_return; } Index: linux-2.6.28.7/fs/xfs/linux-2.6/xfs_iops.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.28.7.orig/fs/xfs/linux-2.6/xfs_iops.c +++ linux-2.6.28.7/fs/xfs/linux-2.6/xfs_iops.c @@ -228,7 +228,7 @@ xfs_vn_mknod( xfs_dentry_to_name(&name, dentry); if (IS_POSIXACL(dir) && !default_acl) - mode &=3D ~current->fs->umask; + mode &=3D ~current_umask(); switch (mode & S_IFMT) { case S_IFCHR: @@ -422,7 +422,7 @@ xfs_vn_symlink( mode_t mode; mode =3D S_IFLNK | - (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO= ); + (irix_symlink_mode ? 0777 & ~current_umask() : S_IRWXUGO); xfs_dentry_to_name(&name, dentry); error =3D xfs_symlink(XFS_I(dir), &name, symname, mode, &cip, NULL); Index: linux-2.6.28.7/fs/xfs/linux-2.6/xfs_super.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.28.7.orig/fs/xfs/linux-2.6/xfs_super.c +++ linux-2.6.28.7/fs/xfs/linux-2.6/xfs_super.c @@ -1351,14 +1351,15 @@ xfs_fs_remount( * need to take care of themetadata. Once that's done write a dummy * record to dirty the log in case of a crash while frozen. */ -STATIC void -xfs_fs_lockfs( +STATIC int +xfs_fs_freeze( struct super_block *sb) { struct xfs_mount *mp =3D XFS_M(sb); xfs_attr_quiesce(mp); xfs_fs_log_dummy(mp); + return 0; } STATIC int @@ -1847,7 +1848,7 @@ static struct super_operations xfs_super .put_super =3D xfs_fs_put_super, .write_super =3D xfs_fs_write_super, .sync_fs =3D xfs_fs_sync_super, - .write_super_lockfs =3D xfs_fs_lockfs, + .freeze_fs =3D xfs_fs_freeze, .statfs =3D xfs_fs_statfs, .remount_fs =3D xfs_fs_remount, .show_options =3D xfs_fs_show_options, Index: linux-2.6.28.7/fs/xfs/linux-2.6/xfs_file.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.28.7.orig/fs/xfs/linux-2.6/xfs_file.c +++ linux-2.6.28.7/fs/xfs/linux-2.6/xfs_file.c @@ -299,9 +299,9 @@ xfs_file_ioctl_invis( STATIC int xfs_vm_page_mkwrite( struct vm_area_struct *vma, - struct page *page) + struct vm_fault *vmf) { - return block_page_mkwrite(vma, page, xfs_get_blocks); + return block_page_mkwrite(vma, vmf, xfs_get_blocks); } const struct file_operations xfs_file_operations =3D { --sfyO1m2EN8ZOtJL6 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iQIcBAEBAgAGBQJKZRjmAAoJECXlragqp/ZIp8gP/2//Xig2wxQalk1QVmY16X3j 65WFd8pzpxdiWU82s6pahNuMuEO00tafenruvuMDLIg65itRvUJt24u2VjwZVsh/ mr7wxlOxSdsPA3Qu9CbQWzspBDVOh/noRIxmNxSzg6emuNZs3fRD+Lky/JBoUN7H BVCOL2KApGltilhxXNn6DIHhKTpCdo6vEJprMyNG6gJc465/hh5MV4jB3AePS93z jXB8Q2Wd0bEgQKB8qQFXNdIvOmOzMKWD17OkWYvDM9wIvLygDPrG8nG1CTj1k1Rq oARiwp9IeQR6sDED6fuC1EJkI0u2G45dYOj6N2fiSlPdHAuzZnwqxqahWFFUoeA8 ri2FI40homDGh+vyfHs7IJ0OO+pMtGMY79LanVtwNhaJj799DiDNJL/QWq890Jey DDlsJdLpzRNNQbMvnX1uC9e+DnNsN4A+aR5yc869lZoDduRmSVl2XbTdOysM2gi0 0z5/34y4B/81VQDwpq2ZTbMYzpyJ8btgkfQ9UBeyYEsK6ueFYugSgEBy5tFRAt4W rLF5K+nZPshFcVj9OlAZweAYKp/09Yqn0KOSs1j250Oulrl30n1ZKaLYYRhCxhYo MhvScJQacdIKrefRKvN8dvNDaLazUsjrT6JRetUE2q+meEO9ehmEivMyWFpJ0Jhx OeZdLdVjSwAgjSaZex5Q =U5NG -----END PGP SIGNATURE----- --sfyO1m2EN8ZOtJL6-- From mw@dermichi.com Tue Jul 21 02:33:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6L7XIiE147072 for ; Tue, 21 Jul 2009 02:33:19 -0500 X-ASG-Debug-ID: 1248161640-606e03800000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from firestarter.dermichi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4DFAB37597C for ; Tue, 21 Jul 2009 00:34:01 -0700 (PDT) Received: from firestarter.dermichi.com (firestarter.dermichi.com [83.64.48.195]) by cuda.sgi.com with ESMTP id EQVB8RIgSZJj2IQc for ; Tue, 21 Jul 2009 00:34:01 -0700 (PDT) Received: from cerberus.net4you.net ([194.177.153.130] helo=[192.168.200.110]) by firestarter.dermichi.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1MT9rM-0008Kj-0m; Tue, 21 Jul 2009 09:34:00 +0200 Message-ID: <4A656F65.3090606@dermichi.com> Date: Tue, 21 Jul 2009 09:33:57 +0200 From: Michael Weissenbacher User-Agent: Thunderbird 2.0.0.22 (X11/20090608) MIME-Version: 1.0 To: Michael Ole Olsen CC: xfs X-ASG-Orig-Subj: Re: patch 2.6.30 and 2.6.30.1 xfs/nfs oops fix, radix tree Subject: Re: patch 2.6.30 and 2.6.30.1 xfs/nfs oops fix, radix tree References: <20090721012455.GG3229@rlogin.dk> In-Reply-To: <20090721012455.GG3229@rlogin.dk> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: firestarter.dermichi.com[83.64.48.195] X-Barracuda-Start-Time: 1248161641 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4900 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3970 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi! > Eric has been very helpful in helping me downgrade xfs in 2.6.30.1 to 2.6.28.7 > version (getting 2.6.28.7 to compile in 2.6.30.1) which removed the oopses. Thank you for posting this patch. I have a few production boxes too which i needed to downgrade back to 2.6.28 because of the "radix tree oops" problem. Will try if the patch fixes my problems in 2.6.30 too and report back here. kind regards, Michael From michael.monnerie@is.it-management.at Tue Jul 21 03:11:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33, MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6L8BsiI149319 for ; Tue, 21 Jul 2009 03:11:55 -0500 X-ASG-Debug-ID: 1248164439-467d03020000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EC1EDAB051B for ; Tue, 21 Jul 2009 01:20:39 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id K5YpRZtNVZRwFDNu for ; Tue, 21 Jul 2009 01:20:39 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id D4D6E4E84; Tue, 21 Jul 2009 10:13:02 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id AC22240017E; Tue, 21 Jul 2009 10:12:31 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: J =?utf-8?q?P=C3=A4lve?= , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Write barriers and hardware RAID Subject: Re: Write barriers and hardware RAID Date: Tue, 21 Jul 2009 10:12:26 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1759792.ujOdXkpOIO"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907211012.31257@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248164440 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0205 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3973 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart1759792.ujOdXkpOIO Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Please keep the discussion on the list also for others who search the=20 same info later. On Dienstag 21 Juli 2009 J P=E4lve wrote: > Thank you for your clarification. I'm still wondering about this > mention in the FAQ: > > "With a RAID controller with battery backed controller cache and > cache in write back mode, you should turn off barriers - they are > unnecessary in this case, and if the controller honors the cache > flushes, it will be harmful to performance." > > If you issue a cache flush request to one of these controllers that > honor them, will it only flush its own cache or also issue a cache > flush request to the disks? In the latter case, wouldn't write > barriers work correctly even with both controller and disk cache > enabled? If you use a RAID controller but then it allows cache flushes from the=20 host to really flush it's cache, it's basically the same as setting the=20 whole controller to "write through" mode (where he doesn't buffer=20 anything). Your expensive RAID controller then acts like a dump switch=20 and your only advantage is that you can connect several disks with=20 parity. But your performance will be a mess. I can't believe anybody=20 wanting performance will do that. ( We have some "up to 4 people" companies with HP servers where the 3- disk RAID-5 is setup this way. As long as they only store word documents=20 and such it's enough. We setup the whole controller write through then,=20 battery backup is of course not needed. But disk write cache is always=20 set to off, to prevent data loss on power fail.) Back to your question: If there exists a hardware RAID controller=20 honoring flushes, it should also flush the disks (I'd expect that). But=20 I don't know any controller to really do that. If you do, please tell=20 me. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart1759792.ujOdXkpOIO Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpleG8ACgkQzhSR9xwSCbRnegCfaLRFRyWT45dMRcD2G/HuR1uD ZF8An0l/UTriGiHci9hlGCadHaZkfKuE =SYXQ -----END PGP SIGNATURE----- --nextPart1759792.ujOdXkpOIO-- From msmtp@michael-prokop.at Tue Jul 21 05:50:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LAonYe158145 for ; Tue, 21 Jul 2009 05:50:50 -0500 X-ASG-Debug-ID: 1248173489-56bf03020000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.michael-prokop.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B64A71D4DF71 for ; Tue, 21 Jul 2009 03:51:29 -0700 (PDT) Received: from mail.michael-prokop.at (mail.michael-prokop.at [88.198.6.110]) by cuda.sgi.com with ESMTP id uZ13eM0jYn5cTto9 for ; Tue, 21 Jul 2009 03:51:29 -0700 (PDT) Received: from mail.michael-prokop.at (grmlvrs [127.0.0.1]) by mail.michael-prokop.at (Postfix) with ESMTP id 021733BC007 for ; Tue, 21 Jul 2009 12:51:28 +0200 (CEST) Received: by mail.michael-prokop.at (Postfix, from userid 5001) id E90163BC03A; Tue, 21 Jul 2009 12:51:27 +0200 (CEST) Received: from localhost (grmlvrs [127.0.0.1]) by mail.michael-prokop.at (Postfix) with ESMTP id 9531D3BC007 for ; Tue, 21 Jul 2009 12:51:20 +0200 (CEST) Date: Tue, 21 Jul 2009 12:51:20 +0200 From: Michael Prokop To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs tries to write on readonly device on unmount Subject: xfs tries to write on readonly device on unmount Message-ID: <2009-07-21T12-28-50@devnull.michael-prokop.at> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="qyHYMwAXsHLOQihY" Content-Disposition: inline X-URL: http://michael-prokop.at/ X-GPG-Key-ID: 0x37E272E8 X-GPG-Key: http://www.michael-prokop.at/gpg X-GPG-Fingerprint: 04AE E62C 9502 CD34 A7DA 857B D8DF 53FB 37E2 72E8 User-Agent: Mutt/1.5.13 (2006-08-11) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: mail.michael-prokop.at[88.198.6.110] X-Barracuda-Start-Time: 1248173490 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3984 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Status: Clean --qyHYMwAXsHLOQihY Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi, This issue might be related to http://oss.sgi.com/bugzilla/show_bug.cgi?id=3D413 A XFS partition is set to read-only mode (using 'blockdev --setro') and mounted. As soon as I *un*mount the filesystem there seem to happen write requests. I've a Tableau Forensic Bridge=B9 which avoids the write requests and attached it to a Linux live-system running kernel 2.6.28 inside VMware and Virtualbox. I can easily reproduce the problem. Full debugging details: # vol_id /dev/sdb2 ID_FS_USAGE=3Dfilesystem ID_FS_TYPE=3Dxfs ID_FS_VERSION=3D ID_FS_UUID=3D884331b1-0d0b-4314-abc8-46f7ddb96c68 ID_FS_UUID_ENC=3D884331b1-0d0b-4314-abc8-46f7ddb96c68 ID_FS_LABEL=3D ID_FS_LABEL_ENC=3D # blockdev --getro /dev/sdb2 1 # logger before-mounting # sysctl -w vm.block_dump=3D1 vm.block_dump =3D 1 # mount /dev/sdb2 /mnt/test mount: block device /dev/sdb2 is write-protected, mounting read-only # logger finished-mounting-now-unmounting # umount /mnt/test # logger finished-unmounting Quoting /var/log/syslog: Jul 21 14:31:19 grml logger: before-mounting [...] Jul 21 14:31:31 grml kernel: [ 535.624072] mount(5945): READ block 385408 = on sdb2 Jul 21 14:31:31 grml kernel: [ 535.676864] mount(5945): dirtied inode 1173= 1 (sdb2) on tmpfs Jul 21 14:31:31 grml kernel: [ 535.676942] mount(5945): READ block 0 on sd= b2 Jul 21 14:31:31 grml kernel: [ 535.676959] mount(5945): READ block 8 on sd= b2 Jul 21 14:31:31 grml kernel: [ 535.676968] mount(5945): READ block 16 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.676974] mount(5945): READ block 24 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.676979] mount(5945): READ block 32 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.676985] mount(5945): READ block 40 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.676991] mount(5945): READ block 48 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.676996] mount(5945): READ block 56 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.677003] mount(5945): READ block 64 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.677009] mount(5945): READ block 72 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.677014] mount(5945): READ block 80 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.677026] mount(5945): READ block 88 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.677033] mount(5945): READ block 96 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.677040] mount(5945): READ block 104 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.677045] mount(5945): READ block 112 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.677051] mount(5945): READ block 120 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.677056] mount(5945): READ block 128 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.740494] mount(5945): READ block 385408 = on sdb2 Jul 21 14:31:31 grml kernel: [ 535.790687] mount(5945): READ block 0 on sd= b2 Jul 21 14:31:31 grml kernel: [ 535.790707] mount(5945): READ block 8 on sd= b2 Jul 21 14:31:31 grml kernel: [ 535.790716] mount(5945): READ block 16 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790723] mount(5945): READ block 24 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790730] mount(5945): READ block 32 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790737] mount(5945): READ block 40 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790743] mount(5945): READ block 48 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790750] mount(5945): READ block 56 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790757] mount(5945): READ block 64 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790763] mount(5945): READ block 72 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790770] mount(5945): READ block 80 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790776] mount(5945): READ block 88 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790784] mount(5945): READ block 96 on s= db2 Jul 21 14:31:31 grml kernel: [ 535.790791] mount(5945): READ block 104 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.790798] mount(5945): READ block 112 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.790805] mount(5945): READ block 120 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.790812] mount(5945): READ block 128 on = sdb2 Jul 21 14:31:31 grml kernel: [ 535.867701] mount(5945): READ block 0 on sd= b2 Jul 21 14:31:31 grml kernel: [ 535.900281] Filesystem "sdb2": Disabling ba= rriers, underlying device is readonly Jul 21 14:31:31 grml kernel: [ 535.900313] mount(5945): READ block 385552 = on sdb2 Jul 21 14:31:31 grml kernel: [ 535.930552] XFS mounting filesystem sdb2 Jul 21 14:31:31 grml kernel: [ 535.931159] mount(5945): READ block 192816 = on sdb2 Jul 21 14:31:31 grml kernel: [ 535.953967] mount(5945): READ block 202415 = on sdb2 Jul 21 14:31:31 grml kernel: [ 535.987222] mount(5945): READ block 197615 = on sdb2 Jul 21 14:31:31 grml kernel: [ 536.007964] mount(5945): READ block 195215 = on sdb2 Jul 21 14:31:31 grml kernel: [ 536.041195] mount(5945): READ block 194015 = on sdb2 Jul 21 14:31:31 grml kernel: [ 536.066990] mount(5945): READ block 193415 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.134166] mount(5945): READ block 193115 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.180253] mount(5945): READ block 192965 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.251434] mount(5945): READ block 192890 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.321465] mount(5945): READ block 192853 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.391436] mount(5945): READ block 192834 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.461507] mount(5945): READ block 192825 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.491863] mount(5945): READ block 192829 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.521982] mount(5945): READ block 192831 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.548595] mount(5945): READ block 192832 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.581878] mount(5945): READ block 192833 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.612013] mount(5945): READ block 192816 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.638629] mount(5945): READ block 192818 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.671866] mount(5945): READ block 192820 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.701942] mount(5945): READ block 192822 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.728635] mount(5945): READ block 192824 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.756766] mount(5945): READ block 192826 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.781954] mount(5945): READ block 192828 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.817006] mount(5945): READ block 192830 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.848537] mount(5945): READ block 192832 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.872031] mount(5945): READ block 192816 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.905224] mount(5945): READ block 192832 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.935298] mount(5945): READ block 192831 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.956758] mount(5945): READ block 192832 = on sdb2 Jul 21 14:31:32 grml kernel: [ 536.991921] mount(5945): READ block 64 on s= db2 Jul 21 14:31:32 grml kernel: [ 537.035209] Ending clean XFS mount for file= system: sdb2 Jul 21 14:31:44 grml logger: finished-mounting-now-unmounting Jul 21 14:31:50 grml kernel: [ 554.547532] umount(5982): WRITE block 0 on = sdb2 Jul 21 14:32:20 grml kernel: [ 585.113445] usb 1-1: reset high speed USB d= evice using ehci_hcd and address 2 Jul 21 14:32:21 grml kernel: [ 585.917964] sd 2:0:0:0: [sdb] Result: hostb= yte=3DDID_OK driverbyte=3DDRIVER_SENSE,SUGGEST_OK Jul 21 14:32:21 grml kernel: [ 585.917987] sd 2:0:0:0: [sdb] Sense Key : D= ata Protect [current] Jul 21 14:32:21 grml kernel: [ 585.918004] sd 2:0:0:0: [sdb] Add. Sense: W= rite protected Jul 21 14:32:21 grml kernel: [ 585.918022] end_request: I/O error, dev sdb= , sector 385560 Jul 21 14:32:21 grml kernel: [ 585.918135] xfs_force_shutdown(sdb2,0x1) ca= lled from line 420 of file fs/xfs/xfs_rw.c. Return address =3D 0xc029a511 Jul 21 14:32:21 grml kernel: [ 585.918172] Filesystem "sdb2": I/O Error De= tected. Shutting down filesystem: sdb2 Jul 21 14:32:21 grml kernel: [ 585.918185] Please umount the filesystem, a= nd rectify the problem(s) Jul 21 14:32:21 grml kernel: [ 585.918213] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.918226] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.918243] xfs_force_shutdown(sdb2,0x1) ca= lled from line 420 of file fs/xfs/xfs_rw.c. Return address =3D 0xc029a511 Jul 21 14:32:21 grml kernel: [ 585.918305] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.918317] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.918387] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.918408] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.918421] Filesystem "sdb2": xfs_log_forc= e: error 5 returned. Jul 21 14:32:21 grml kernel: [ 585.923639] umount(5982): dirtied inode 157= 99 (mtab.tmp) on tmpfs Jul 21 14:32:21 grml kernel: [ 585.923894] umount(5982): dirtied inode 157= 99 (mtab.tmp) on tmpfs Jul 21 14:33:03 grml logger: finished-unmounting I couldn't reproduce the same problem with other filesystems. Let me know if you need any further details. Please Cc me on replies as I'm not subscribed to the mailinglist. =B9 http://www.tableau.com/index.php?pageid=3Dproducts&category=3Dforensic_= bridges regards, -mika- --=20 http://michael-prokop.at/ || http://adminzen.org/ http://grml-solutions.com/ || http://grml.org/ --qyHYMwAXsHLOQihY Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFKZZ2o2N9T+zficugRAmCiAJ47L6oYFSDT3DweTsM2s4JK2ZkVWQCfXarv y4HRBUcCE1xGHVozvbgihCI= =P+d4 -----END PGP SIGNATURE----- --qyHYMwAXsHLOQihY-- From BATV+773999e1df7261c70f43+2158+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 21 06:18:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LBISNo159828 for ; Tue, 21 Jul 2009 06:18:28 -0500 X-ASG-Debug-ID: 1248175637-24ab01540000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3B085130D9C2 for ; Tue, 21 Jul 2009 04:27:18 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id AbWlvYquJndDBl5b for ; Tue, 21 Jul 2009 04:27:18 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MTDNF-0003nD-UB; Tue, 21 Jul 2009 11:19:09 +0000 Date: Tue, 21 Jul 2009 07:19:09 -0400 From: Christoph Hellwig To: Michael Prokop Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs tries to write on readonly device on unmount Subject: Re: xfs tries to write on readonly device on unmount Message-ID: <20090721111909.GA29399@infradead.org> References: <2009-07-21T12-28-50@devnull.michael-prokop.at> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2009-07-21T12-28-50@devnull.michael-prokop.at> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248175638 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Jul 21, 2009 at 12:51:20PM +0200, Michael Prokop wrote: > Hi, > > This issue might be related to > http://oss.sgi.com/bugzilla/show_bug.cgi?id=413 > > A XFS partition is set to read-only mode (using 'blockdev --setro') > and mounted. As soon as I *un*mount the filesystem there seem to > happen write requests. > > I've a Tableau Forensic Bridge? which avoids the write requests and > attached it to a Linux live-system running kernel 2.6.28 inside > VMware and Virtualbox. I can easily reproduce the problem. Block 0 is the superblock, so it appears like there is a superblock write somewhere not guarded by an read-only check. Can you still reproduce this with a current kernel? We now do have a testcase in xfsqa (test 200) that checks exactly that scenario, but it doesn't show issues on recent kernels. From glonevis@sify.com Tue Jul 21 07:35:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_50 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LCZcGD163826 for ; Tue, 21 Jul 2009 07:35:38 -0500 X-ASG-Debug-ID: 1248180266-16d603340000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.obsa.com.ec (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E5EC3149DD48 for ; Tue, 21 Jul 2009 05:44:26 -0700 (PDT) Received: from mail.obsa.com.ec (mail.obsa.com.ec [157.100.192.242]) by cuda.sgi.com with ESMTP id 2ZSPWJrmY1F1nq96 for ; Tue, 21 Jul 2009 05:44:26 -0700 (PDT) Received: by mail.obsa.com.ec (Postfix, from userid 48) id DAFD4127FFD; Mon, 20 Jul 2009 16:07:06 -0500 (ECT) Received: from 81.91.228.131 (proxying for 10.220.70.196) (SquirrelMail authenticated user tramos) by mail.obsa.com.ec with HTTP; Mon, 20 Jul 2009 23:07:06 +0200 (CEST) Message-ID: <63897.81.91.228.131.1248124026.squirrel@mail.obsa.com.ec> Date: Mon, 20 Jul 2009 23:07:06 +0200 (CEST) X-ASG-Orig-Subj: I seek your permission before Subject: I seek your permission before From: "MISS GLORIA NEVIS" Reply-To: glorian@xpmail.net User-Agent: SquirrelMail/1.4.8-4.el4.centos MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-Barracuda-Connect: mail.obsa.com.ec[157.100.192.242] X-Barracuda-Start-Time: 1248180267 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4996 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3991 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean X-OBSA S.A-MailScanner-Information: Please contact the ISP for more information X-OBSA S.A-MailScanner: Found to be clean X-OBSA S.A-MailScanner-From: glonevis@sify.com X-Spam-Status: No Dearest, My name is Miss Gloria Nevis. I have a very urgent personal message for you, I seek your permission before I send you the message. Thanks as I await your response. Yours Sincerely, Gloria. -- Este mensaje ha sido analizado por MailScanner en busca de virus y otros contenidos peligrosos, y se considera que está limpio. For all your IT requirements visit: http://www.transtec.co.uk From BATV+773999e1df7261c70f43+2158+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 21 09:11:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LEBhNe168826 for ; Tue, 21 Jul 2009 09:11:45 -0500 X-ASG-Debug-ID: 1248185546-798d00bd0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D5EF1376C34 for ; Tue, 21 Jul 2009 07:12:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id xvEMCZeXWZyzzgMR for ; Tue, 21 Jul 2009 07:12:26 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MTG4v-0004sn-DG; Tue, 21 Jul 2009 14:12:25 +0000 Date: Tue, 21 Jul 2009 10:12:25 -0400 From: Christoph Hellwig To: Patrick Schreurs Cc: Christoph Hellwig , linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode Message-ID: <20090721141225.GA24330@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090701124441.GA12844@infradead.org> <4A4CEEF2.7040101@news-service.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4CEEF2.7040101@news-service.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248185546 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 02, 2009 at 07:31:30PM +0200, Patrick Schreurs wrote: > Hi Christoph, > > With this patch we see the following: > > kernel BUG at fs/inode.c:1288! Okay, I think I figured out what this is. You hit the case where we re-use an inode that is gone from the VFS point of view, but still in xfs reclaimable state. We reinitialize it using inode_init_always, but inode_init_always does not touch i_state, which still includes I_CLEAR. See the patch below which sets it to the expected state. What really worries me is that I don't seem to be able to actually hit that case in testing. Can you try the patch below ontop of the previous one? Index: linux-2.6/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iget.c 2009-07-21 16:07:41.654923213 +0200 +++ linux-2.6/fs/xfs/xfs_iget.c 2009-07-21 16:08:55.064151137 +0200 @@ -206,6 +206,7 @@ xfs_iget_cache_hit( error = ENOMEM; goto out_error; } + inode->i_state = I_LOCK|I_NEW; } else { /* If the VFS inode is being torn down, pause and try again. */ if (!igrab(inode)) From glonevis@sify.com Tue Jul 21 09:43:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LEhbKa171316 for ; Tue, 21 Jul 2009 09:43:37 -0500 X-ASG-Debug-ID: 1248187459-799201760000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.obsa.com.ec (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F280C376EA9 for ; Tue, 21 Jul 2009 07:44:19 -0700 (PDT) Received: from mail.obsa.com.ec (mail.obsa.com.ec [157.100.192.242]) by cuda.sgi.com with ESMTP id zQgcJicLesxL6Ymk for ; Tue, 21 Jul 2009 07:44:19 -0700 (PDT) Received: by mail.obsa.com.ec (Postfix, from userid 48) id 66458127FF6; Mon, 20 Jul 2009 16:03:04 -0500 (ECT) Received: from 81.91.228.131 (proxying for 10.220.70.196) (SquirrelMail authenticated user tramos) by mail.obsa.com.ec with HTTP; Mon, 20 Jul 2009 23:03:03 +0200 (CEST) Message-ID: <62277.81.91.228.131.1248123783.squirrel@mail.obsa.com.ec> Date: Mon, 20 Jul 2009 23:03:03 +0200 (CEST) X-ASG-Orig-Subj: I seek your permission before Subject: I seek your permission before From: "MISS GLORIA NEVIS" Reply-To: glorian@xpmail.net User-Agent: SquirrelMail/1.4.8-4.el4.centos MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-Barracuda-Connect: mail.obsa.com.ec[157.100.192.242] X-Barracuda-Start-Time: 1248187459 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5001 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3998 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean X-OBSA S.A-MailScanner-Information: Please contact the ISP for more information X-OBSA S.A-MailScanner: Found to be clean X-OBSA S.A-MailScanner-From: glonevis@sify.com X-Spam-Status: No Dearest, My name is Miss Gloria Nevis. I have a very urgent personal message for you, I seek your permission before I send you the message. Thanks as I await your response. Yours Sincerely, Gloria. -- Este mensaje ha sido analizado por MailScanner en busca de virus y otros contenidos peligrosos, y se considera que está limpio. For all your IT requirements visit: http://www.transtec.co.uk From cattelan@thebarn.com Tue Jul 21 10:32:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LFWapQ175157 for ; Tue, 21 Jul 2009 10:32:37 -0500 X-ASG-Debug-ID: 1248190398-799702810000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from slurp.thebarn.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 51ECF376B8F for ; Tue, 21 Jul 2009 08:33:18 -0700 (PDT) Received: from slurp.thebarn.com (mail.thebarn.com [208.42.117.202]) by cuda.sgi.com with ESMTP id IRyqU1VwbPN8mxa3 for ; Tue, 21 Jul 2009 08:33:18 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.x.thebarn.com [10.0.0.11]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n6LFVIrt006246; Tue, 21 Jul 2009 10:31:35 -0500 (CDT) (envelope-from cattelan@xfs.org) Message-ID: <4A65DF46.1000900@xfs.org> Date: Tue, 21 Jul 2009 10:31:18 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Michael Monnerie , xfs-oss X-ASG-Orig-Subj: Re: Who did Aberdeen name as 2009 PLM Champion? Subject: Re: Who did Aberdeen name as 2009 PLM Champion? References: <200907170815.02493@zmi.at> In-Reply-To: <200907170815.02493@zmi.at> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.thebarn.com[208.42.117.202] X-Barracuda-Start-Time: 1248190399 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4826 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4002 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Monnerie wrote: > On Donnerstag 16 Juli 2009 PTC Info wrote: > >> This email was sent to: xfs@oss.sgi.com >> >> PTC, 140 Kendrick Street, Needham, MA 02494 USA >> >> If you wish to unsubscribe from all PTC Emails, please send a blank >> email to unsubscribe@ptc.com. >> > > Did someone try to unsubscribe from this? Maybe they do it really? > no but I blacklisted all ptc.com addresses. > mfg zmi > From felixb@sgi.com Tue Jul 21 17:30:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6LMU1mP197112 for ; Tue, 21 Jul 2009 17:30:02 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3876F8F80B6 for ; Tue, 21 Jul 2009 15:30:42 -0700 (PDT) Received: from eagdhcp-232-162.americas.sgi.com (eagdhcp-232-162.americas.sgi.com [128.162.232.162]) by estes.americas.sgi.com (Postfix) with ESMTP id D451D7000103; Tue, 21 Jul 2009 17:30:41 -0500 (CDT) Cc: xfs-oss list , Olaf Weber Message-Id: <4AEA29AC-5807-470F-8F39-370E85695867@sgi.com> From: Felix Blyakher To: Felix Blyakher In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: maintainer on vacation, backup from sgi Date: Tue, 21 Jul 2009 17:30:41 -0500 References: X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 6, 2009, at 12:32 AM, Felix Blyakher wrote: > Hi, > > I'm going to be on vacation and not reachable till July 20. Back from the 12 days 110 miles backpacking hike in the mountains of New Mexico! > The whole xfs SGI team will be backing me up for the maintainership > tasks. The point man for this, though, will be Olaf Weber >. Thanks to Olaf (and others) for backing me up here. I'm slowly going through the pile of mail as well as handling current issues. As usual, I'll pay more attention to new mails while catching up gradually on old ones. If there are any issues mentioned before, which needs my immediate attention, please bring them up again, so I see them before I'm done with the backlog. Thanks, Felix > > > See you all in two weeks. > Felix > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From SEMA-CR-1-5T6IUG@ptcmarketing.com Wed Jul 22 01:23:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.2 required=5.0 tests=ACT_NOW_CAPS,AWL,BAYES_50, HTML_MESSAGE,J_CHICKENPOX_83 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6M6N1x7221566 for ; Wed, 22 Jul 2009 01:23:04 -0500 X-ASG-Debug-ID: 1248244313-68ae00bc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay2.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 98D8610AB4D1 for ; Tue, 21 Jul 2009 23:31:54 -0700 (PDT) Received: from relay2.ptc.com (relay2.ptc.com [12.11.148.122]) by cuda.sgi.com with ESMTP id gVLMKB24aVFPy2XM for ; Tue, 21 Jul 2009 23:31:54 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.43,245,1246852800"; d="scan'208,217";a="308363812" Received: from hqcrmprdint18.ptcnet.ptc.com ([132.253.201.206]) by crmmaxx.ptc.com with ESMTP; 22 Jul 2009 02:05:49 -0400 Date: Wed, 22 Jul 2009 01:55:56 -0400 To: X-Mailer: Siebel EMS 80 [EMS 2012] main/200904271731 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Info" X-ASG-Orig-Subj: PTC's 0% financing makes it easy to invest in your technology now Subject: PTC's 0% financing makes it easy to invest in your technology now Sender: "PTC Info" Message-ID: Content-Type: multipart/alternative; boundary=BF_1248240149129_961133719 X-Barracuda-Connect: relay2.ptc.com[12.11.148.122] X-Barracuda-Start-Time: 1248244315 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0017 1.0000 -2.0100 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.81 X-Barracuda-Spam-Status: No, SCORE=-1.81 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=ACT_NOW_CAPS, BSF_SC5_SA161f, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4060 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 ACT_NOW_CAPS BODY: Talks about 'acting now' with capitals 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC5_SA161f Custom Rule SA161f X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1248240149129_961133719 Content-Type: text/plain; charset=UTF-8 =============================================================================== SPECIAL OFFER =============================================================================== Offer Ends September 30th 2009 - Act Now! ------------------------------------------------------------------------------- Don't Put Your Technology Investments on the Back-burner When the economy bounces back from the current turmoil, will your organization be positioned to outpace the competition during the recovery? Organizations that make the right strategic moves now will be poised to accelerate and grab imarket share during the recovery.PTC Offers 0% Financing! Now is the time to invest in improvements to your technical infrastructure and product development process. And to make it easier for you, we're offering 0% financing on PTC's world-class software solutions*. (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-5GUBZ7&o=1-5H76TK&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fappserver%2Fwcms%2Fforms%2Findex.jsp%3Fim_dbkey%3D86854%26amp%3Bicg_dbkey%3D482) Benefits of financing include: * Conserve your working capital for smarter cash-flow management * Spread cost over time with 90-day deferral of first payment followed by low monthly installments * Enjoy easier financial approval than bank loans * Deploy technical solutions for improving business efficiency today, when you need them most Next Steps: * Fill out the preliminary financing application today to begin the qualification process (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-5GUBZ7&o=1-5H76TK&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fappserver%2Fwcms%2Fforms%2Findex.jsp%3Fim_dbkey%3D86854%26amp%3Bicg_dbkey%3D482) * Check out the brand new Pro/ENGINEER Showcase Demo to see how delivers you integrated CAD/CAM/CAE solutions with no compromise (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-5GUBZ7&o=1-5H76TK&w=2354034&t=http%3A%2F%2Fdownload.ptc.com%2Fvideos%2Fmkt%2Fswf%2Fshowcase%2Fstart.html) * Visit the PTC Business Resource Center to see how PTC solutions can improve your business processes (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-5GUBZ7&o=1-5H76TK&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fsolutions%2Fsmall-medium-business%2Findex.htm) 12 month, 0% offer is available for orders with a total cost of $7,500 or greater (software and PTC University costs only - services and maintenance costs are excluded from this offer but can be negotiated separately). Your first payment may be deferred for 90 days. After the initial 90 days, the lessee will make regular payments. Promotion begins 7/13/2009 and ttransactions must fund by 9/30/2009. Other financing packages are available. Financing is available to qualified business customers through Key Equipment Finance or other financial providers in partnership with PTC and PTC resellers in the USA and Canada. Financing is subject to credit approval and execution of standard documentation. PTC and Key Equipment Finance reserve the right to change or cancel this program at any time without notice. Terms & conditions apply. =============================================================================== contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-5H76TK&campd=1-5GUBZ7&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com change email preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-5H76TK&campd=1-5GUBZ7&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com edit profile http://www.ptc.com/read?&w=2354034&t=/common/account/index.htm ------------------------------------------------------------------------------- This email was sent to: xfs@oss.sgi.com PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to unsubscribe@ptc.com. --BF_1248240149129_961133719 Content-Type: text/html; charset=UTF-8 0% Financing Email - ProE
PTC.com

Special Offer

Offer Ends September 30th 2009 - Act Now!

Don't Put Your Technology Investments on the Back-burner

When the economy bounces back from the current turmoil, will your organization be positioned to outpace the competition during the recovery?  Organizations that make the right strategic moves now will be poised to accelerate and grab market share during the recovery.

PTC Offers 0% Financing!

Now is the time to invest in improvements to your technical infrastructure and product development process.  And to make it easier for you, we're offering 0% financing on PTC's world-class software solutions*.  Benefits of financing include:

  • Conserve your working capital for smarter cash-flow management
  • Spread cost over time with 90-day deferral of first payment followed by low monthly installments
  • Enjoy easier financial approval than bank loans
  • Deploy technical solutions for improving business efficiency today, when you need them most

Next Steps:

 

12 month, 0% offer is available for orders with a total cost of $7,500 or greater (software and PTC University costs only – services and maintenance costs are excluded from this offer but can be negotiated separately). Your first payment may be deferred for 90 days. After the initial 90 days, the lessee will make regular payments. Promotion begins 7/13/2009 and transactions must fund by 9/30/2009. Other financing packages are available. Financing is available to qualified business customers through Key Equipment Finance or other financial providers in partnership with PTC and PTC resellers in the USA and Canada. Financing is subject to credit approval and execution of standard documentation. PTC and Key Equipment Finance reserve the right to change or cancel this program at any time without notice. Terms & conditions apply.

 


contact PTC | privacy policy | unsubscribe | change email preferences | edit profile
This email was sent to: xfs@oss.sgi.com     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank email to unsubscribe@ptc.com.
--BF_1248240149129_961133719-- From mw@dermichi.com Wed Jul 22 02:24:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6M7OXJj224717 for ; Wed, 22 Jul 2009 02:24:33 -0500 X-ASG-Debug-ID: 1248247514-418e00b50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from firestarter.dermichi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DC47612E82ED for ; Wed, 22 Jul 2009 00:25:15 -0700 (PDT) Received: from firestarter.dermichi.com (firestarter.dermichi.com [83.64.48.195]) by cuda.sgi.com with ESMTP id KKRG1yPpDcxX3yjy for ; Wed, 22 Jul 2009 00:25:15 -0700 (PDT) Received: from cerberus.net4you.net ([194.177.153.130] helo=[192.168.200.110]) by firestarter.dermichi.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1MTWC6-0007B2-QU; Wed, 22 Jul 2009 09:24:54 +0200 Message-ID: <4A66BEC3.2080507@dermichi.com> Date: Wed, 22 Jul 2009 09:24:51 +0200 From: Michael Weissenbacher User-Agent: Thunderbird 2.0.0.22 (X11/20090608) MIME-Version: 1.0 To: Russell Cattelan CC: Michael Monnerie , xfs-oss X-ASG-Orig-Subj: Re: Who did Aberdeen name as 2009 PLM Champion? Subject: Re: Who did Aberdeen name as 2009 PLM Champion? References: <200907170815.02493@zmi.at> <4A65DF46.1000900@xfs.org> In-Reply-To: <4A65DF46.1000900@xfs.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: firestarter.dermichi.com[83.64.48.195] X-Barracuda-Start-Time: 1248247516 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0048 1.0000 -1.9898 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.99 X-Barracuda-Spam-Status: No, SCORE=-1.99 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4065 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Russell! > no but I blacklisted all ptc.com addresses. Which seems to not have worked, i just recieved another one. Maybe you can look into that again? thanks From d.nuzzo@readytec.it Wed Jul 22 02:54:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=BAYES_00,HTML_MESSAGE, RCVD_IN_BL_SPAMCOP_NET autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6M7se4c226309 for ; Wed, 22 Jul 2009 02:54:43 -0500 X-ASG-Debug-ID: 1248249813-118701010000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from readytec.it (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1400410ABAE5 for ; Wed, 22 Jul 2009 01:03:33 -0700 (PDT) Received: from readytec.it (out.readytec.it [85.45.153.42]) by cuda.sgi.com with ESMTP id zhh3MLOo5xXTugm9 for ; Wed, 22 Jul 2009 01:03:33 -0700 (PDT) Received: from [192.168.0.4] [62.94.216.152] by readytec.it with ESMTP (SMTPD32-8.15) id A5621A2600B2; Wed, 22 Jul 2009 09:53:06 +0200 Message-ID: <4A66C5E7.7050408@readytec.it> Disposition-Notification-To: Daniele Nuzzo - Readytec SPA Date: Wed, 22 Jul 2009 09:55:19 +0200 From: Daniele Nuzzo - Readytec SPA User-Agent: Thunderbird 2.0.0.22 (X11/20090608) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: umount xfs filesystem Subject: umount xfs filesystem X-Priority: 1 (Highest) Content-Type: multipart/mixed; boundary="------------050507030008030108060906" X-Barracuda-Connect: out.readytec.it[85.45.153.42] X-Barracuda-Start-Time: 1248249815 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4850 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4066 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. --------------050507030008030108060906 Content-Type: multipart/alternative; boundary="------------090704070803090004020100" --------------090704070803090004020100 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit hi, I think I need your advice-opinion ... I set up a system like CentOS 5.3, lvm, drbd 8.2, various systems raid (Adaptec aacraid or LSI MegaRAID with or without write back cache) after some time of work (a few hours or days) do the umount is slow... even a few minutes ... why? I have already disabled barrier and write cache on drbd, but not on the controller or the sas drives... ideas? thanks a lot. p.s. drbd partitions formatted with the default options. --------------090704070803090004020100 Content-Type: text/html; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit
hi,
I think I need your advice-opinion ...
I set up a system like CentOS 5.3, lvm, drbd 8.2, various systems raid (Adaptec aacraid or LSI MegaRAID with or without write back cache) after some time of work (a few hours or days) do the umount is slow... even a few minutes ... why?
I have already disabled barrier and write cache on drbd, but not on the controller or the sas  drives... ideas?
thanks a lot.

p.s.
drbd partitions formatted with the default options.
--------------090704070803090004020100-- --------------050507030008030108060906 Content-Type: text/x-vcard; charset=utf-8; name="d_nuzzo.vcf" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="d_nuzzo.vcf" begin:vcard fn:Daniele Nuzzo - Readytec SpA n:Nuzzo;Daniele org:Readytec;Assistenza HW/SW adr:;;via vinicio cortese 147f;roma;rm;00128;italia email;internet:d.nuzzo@readytec.it title:Readytec tel;work:+3906507501 tel;fax:+390650750638 tel;cell:+393358770793 x-mozilla-html:TRUE url:www.readytec.it version:2.1 end:vcard --------------050507030008030108060906-- From chiparus@gmail.com Wed Jul 22 03:55:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6M8tDNe229571 for ; Wed, 22 Jul 2009 03:55:13 -0500 X-ASG-Debug-ID: 1248252955-01d500e10000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-ew0-f213.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 79EAE379FD8 for ; Wed, 22 Jul 2009 01:55:55 -0700 (PDT) Received: from mail-ew0-f213.google.com (mail-ew0-f213.google.com [209.85.219.213]) by cuda.sgi.com with ESMTP id P9mWpB10oDfJrYNj for ; Wed, 22 Jul 2009 01:55:55 -0700 (PDT) Received: by ewy9 with SMTP id 9so44005ewy.20 for ; Wed, 22 Jul 2009 01:55:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type:content-transfer-encoding; bh=MT1OQ6cbYAcadj6mQWu74d28izGVXdsnmpipCms1dPk=; b=YfFLJO7DrtiuyjDBLcSX83z/e2J3PPfFZxxEZiDLXXoxmjn80oguZDuhgMqHtX4Zd/ Ph5fWLU4Ijx5aoOjpZ4Z0e0amFgXbDZ4OvBwU0Fi7Xqjv21KOlq96RJNuzjJlEbTB4FW x/nFqjv42B9wvH28cfB2W4CUuE8VaDtV1VdVA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=woIGoRv5x9scam2fBvjuHPFQPQHta6DOT9HObDvi0E1ygrv9WzfeofR3VNHyxE+hsR QBo73DxOLwZH48ENvJqHLzLAw2Jm38BxWFP7xUOp1j+3sUJMz8prNwXXv3Zj3OoRqIVH OvZoapK5XpZdwekFe38oR56ykSsKw3chC8SKo= MIME-Version: 1.0 Sender: chiparus@gmail.com Received: by 10.216.38.68 with SMTP id z46mr190874wea.6.1248252954616; Wed, 22 Jul 2009 01:55:54 -0700 (PDT) In-Reply-To: <20090721141225.GA24330@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090701124441.GA12844@infradead.org> <4A4CEEF2.7040101@news-service.com> <20090721141225.GA24330@infradead.org> Date: Wed, 22 Jul 2009 10:55:54 +0200 X-Google-Sender-Auth: 5238a20fa46056bd Message-ID: <89c4f90c0907220155u5d9331dj3cbe53efcf6b51f2@mail.gmail.com> X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode From: Tommy van Leeuwen To: Christoph Hellwig Cc: Patrick Schreurs , linux-xfs@oss.sgi.com, Lachlan McIlroy , Eric Sandeen Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-ew0-f213.google.com[209.85.219.213] X-Barracuda-Start-Time: 1248252956 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.02 X-Barracuda-Spam-Status: No, SCORE=-1.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, BSF_RULE_7582B X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4071 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M 0.50 BSF_RULE_7582B Custom Rule 7582B X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, On Tue, Jul 21, 2009 at 4:12 PM, Christoph Hellwig wrote= : > On Thu, Jul 02, 2009 at 07:31:30PM +0200, Patrick Schreurs wrote: >> Hi Christoph, >> >> With this patch we see the following: >> >> kernel BUG at fs/inode.c:1288! > > Okay, I think I figured out what this is. =A0You hit the case where > we re-use an inode that is gone from the VFS point of view, but > still in xfs reclaimable state. =A0We reinitialize it using > inode_init_always, but inode_init_always does not touch i_state, which > still includes I_CLEAR. =A0See the patch below which sets it to the > expected state. =A0What really worries me is that I don't seem to be > able to actually hit that case in testing. > > Can you try the patch below ontop of the previous one? > > > Index: linux-2.6/fs/xfs/xfs_iget.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- linux-2.6.orig/fs/xfs/xfs_iget.c =A0 =A02009-07-21 16:07:41.654923213= +0200 > +++ linux-2.6/fs/xfs/xfs_iget.c 2009-07-21 16:08:55.064151137 +0200 > @@ -206,6 +206,7 @@ xfs_iget_cache_hit( > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0error =3D ENOMEM; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto out_error; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 inode->i_state =3D I_LOCK|I_NEW; > =A0 =A0 =A0 =A0} else { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* If the VFS inode is being torn down, pa= use and try again. */ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (!igrab(inode)) > Unfortunately we still get errors, with this patch on top of the previous one: The difference is that is now crashes within an hour instead of once a week, so that might be good for troubleshooting. Jul 22 10:46:13 sb07 kernel: ------------[ cut here ]------------ Jul 22 10:46:13 sb07 kernel: kernel BUG at fs/inode.c:1288! Jul 22 10:46:13 sb07 kernel: invalid opcode: 0000 [#1] SMP Jul 22 10:46:13 sb07 kernel: last sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map Jul 22 10:46:13 sb07 kernel: CPU 3 Jul 22 10:46:13 sb07 kernel: Modules linked in: cpufreq_ondemand acpi_cpufreq ipmi_si ipmi_devintf ipmi_msghandler bonding rng_core serio_raw e1000e bnx2 thermal processor 8250_pnp 8250 serial_core thermal_sys Jul 22 10:46:13 sb07 kernel: Pid: 251, comm: kswapd0 Not tainted 2.6.30.1-xfs #5 PowerEdge 1950 Jul 22 10:46:13 sb07 kernel: RIP: 0010:[] [] iput+0x13/0x60 Jul 22 10:46:13 sb07 kernel: RSP: 0000:ffff88043fab1cb0 EFLAGS: 00010246 Jul 22 10:46:13 sb07 kernel: RAX: 0000000000000000 RBX: ffff88006fcc7980 RCX: ffff88026411aaf0 Jul 22 10:46:13 sb07 kernel: RDX: ffff88006fcc79b0 RSI: ffff88026411aa88 RDI: ffff88006fcc7980 Jul 22 10:46:13 sb07 kernel: RBP: ffff880373b1ecc8 R08: ffff88043fab1cf0 R09: 0000000000000246 Jul 22 10:46:13 sb07 kernel: R10: 0000000000000010 R11: ffffffff8028b7b0 R12: ffff88043c7f0400 Jul 22 10:46:13 sb07 kernel: R13: ffff88043fab1cf0 R14: ffff88043c7f0518 R15: ffff88043fab1d64 Jul 22 10:46:13 sb07 kernel: FS: 0000000000000000(0000) GS:ffff88002807f000(0000) knlGS:0000000000000000 Jul 22 10:46:13 sb07 kernel: CS: 0010 DS: 0018 ES: 0018 CR0: 0000000080050= 03b Jul 22 10:46:13 sb07 kernel: CR2: 00007f4078709320 CR3: 000000043bd8f000 CR4: 00000000000006a0 Jul 22 10:46:13 sb07 kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 Jul 22 10:46:13 sb07 kernel: DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Jul 22 10:46:13 sb07 kernel: Process kswapd0 (pid: 251, threadinfo ffff88043fab0000, task ffff88043fa726f0) Jul 22 10:46:13 sb07 kernel: Stack: Jul 22 10:46:13 sb07 kernel: ffff88026411aa80 ffffffff802884ff 0000000000000010 ffff88026411aa80 Jul 22 10:46:13 sb07 kernel: ffff8802978404c0 ffff8802978404c0 ffff88043fab1d00 ffff88043fab1d00 Jul 22 10:46:13 sb07 kernel: Call Trace: Jul 22 10:46:13 sb07 kernel: [] ? __shrink_dcache_sb+0x26b/0x301 Jul 22 10:46:13 sb07 kernel: [] ? shrink_dcache_memory+0xdf/0x16e Jul 22 10:46:13 sb07 kernel: [] ? kswapd+0x448/0x5bf Jul 22 10:46:13 sb07 kernel: ffff88043c7f0400 ffffffff8028878b 00000000000000c0 0000000000000008 Jul 22 10:46:13 sb07 kernel: [] ? d_kill+0x34/0x55 Jul 22 10:46:13 sb07 kernel: [] ? shrink_slab+0xe0/0x153 Jul 22 10:46:13 sb07 kernel: [] ? isolate_pages_global+0x0/0x231 Jul 22 10:46:13 sb07 kernel: [] ? kswapd+0x0/0x5bf Jul 22 10:46:13 sb07 kernel: [] ? child_rip+0xa/0x20 Jul 22 10:46:13 sb07 kernel: [] ? autoremove_wake_function+0x0/0x2e Jul 22 10:46:13 sb07 kernel: [] ? kswapd+0x0/0x5bf Jul 22 10:46:13 sb07 kernel: [] ? kthread+0x0/0x80 Jul 22 10:46:13 sb07 kernel: [] ? __wake_up_common+0x44/0= x73 Jul 22 10:46:13 sb07 kernel: [] ? kthread+0x54/0x80 Jul 22 10:46:13 sb07 kernel: [] ? child_rip+0x0/0x20 Jul 22 10:46:13 sb07 kernel: Code: 4b 70 be 01 00 00 00 48 89 df e8 c2 86 00 00 eb db 48 83 c4 28 5b 5d c3 53 48 85 ff 48 89 fb 74 55 48 83 bf f8 01 00 00 40 75 04 <0f> 0b eb fe 48 8d 7f 48 48 c7 c6 f0 2a 5c 80 e8 25 4b 0a 00 85 Jul 22 10:46:13 sb07 kernel: RIP [] iput+0x13/0x60 Jul 22 10:46:13 sb07 kernel: RSP Jul 22 10:46:13 sb07 kernel: ---[ end trace 2d9673758108d2e3 ]--- Thanks, Tommy From msmtp@michael-prokop.at Wed Jul 22 06:26:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6MBQrMx237278 for ; Wed, 22 Jul 2009 06:26:54 -0500 X-ASG-Debug-ID: 1248262545-470300ce0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.michael-prokop.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A18E8ABFA7A for ; Wed, 22 Jul 2009 04:35:45 -0700 (PDT) Received: from mail.michael-prokop.at (mail.michael-prokop.at [88.198.6.110]) by cuda.sgi.com with ESMTP id 7L4K9EQMuSmk9eet for ; Wed, 22 Jul 2009 04:35:45 -0700 (PDT) Received: from mail.michael-prokop.at (grmlvrs [127.0.0.1]) by mail.michael-prokop.at (Postfix) with ESMTP id 10ADB3BC038; Wed, 22 Jul 2009 13:27:32 +0200 (CEST) Received: by mail.michael-prokop.at (Postfix, from userid 5001) id 035153BC039; Wed, 22 Jul 2009 13:27:31 +0200 (CEST) Received: from localhost (grmlvrs [127.0.0.1]) by mail.michael-prokop.at (Postfix) with ESMTP id 7C0563BC038; Wed, 22 Jul 2009 13:27:25 +0200 (CEST) Date: Wed, 22 Jul 2009 13:27:25 +0200 From: Michael Prokop To: Christoph Hellwig Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs tries to write on readonly device on unmount Subject: Re: xfs tries to write on readonly device on unmount Message-ID: <2009-07-22T13-22-51@devnull.michael-prokop.at> References: <2009-07-21T12-28-50@devnull.michael-prokop.at> <20090721111909.GA29399@infradead.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="8GpibOaaTibBMecb" Content-Disposition: inline In-Reply-To: <20090721111909.GA29399@infradead.org> X-URL: http://michael-prokop.at/ X-GPG-Key-ID: 0x37E272E8 X-GPG-Key: http://www.michael-prokop.at/gpg X-GPG-Fingerprint: 04AE E62C 9502 CD34 A7DA 857B D8DF 53FB 37E2 72E8 User-Agent: Mutt/1.5.13 (2006-08-11) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: mail.michael-prokop.at[88.198.6.110] X-Barracuda-Start-Time: 1248262546 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4082 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean --8GpibOaaTibBMecb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable * Christoph Hellwig [20090721 13:19]: > On Tue, Jul 21, 2009 at 12:51:20PM +0200, Michael Prokop wrote: > > This issue might be related to > > http://oss.sgi.com/bugzilla/show_bug.cgi?id=3D413 > > A XFS partition is set to read-only mode (using 'blockdev --setro') > > and mounted. As soon as I *un*mount the filesystem there seem to > > happen write requests. > > I've a Tableau Forensic Bridge? which avoids the write requests and > > attached it to a Linux live-system running kernel 2.6.28 inside > > VMware and Virtualbox. I can easily reproduce the problem. > Block 0 is the superblock, so it appears like there is a superblock > write somewhere not guarded by an read-only check. Can you still > reproduce this with a current kernel? We now do have a testcase in > xfsqa (test 200) that checks exactly that scenario, but it doesn't > show issues on recent kernels. I reran the test procedure with kernel 2.6.31-rc3 and could not reproduce the issue. Thanks. regards, -mika- --=20 http://michael-prokop.at/ || http://adminzen.org/ http://grml-solutions.com/ || http://grml.org/ --8GpibOaaTibBMecb Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFKZved2N9T+zficugRAonRAJ9OJoS8M8eEzJu4QM+8G+JnR/bMDwCeMbYi EPnW/npavyijj5fjPe5ZYQI= =ZnLA -----END PGP SIGNATURE----- --8GpibOaaTibBMecb-- From news@mgras.net Wed Jul 22 07:46:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6MCk7Xh241682 for ; Wed, 22 Jul 2009 07:46:09 -0500 X-ASG-Debug-ID: 1248267300-470602770000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from quickstep.mgras.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 11C76ABFFB2 for ; Wed, 22 Jul 2009 05:55:00 -0700 (PDT) Received: from quickstep.mgras.net (quickstep.mgras.net [213.146.115.59]) by cuda.sgi.com with ESMTP id 7R9d2ZWUbty57lp8 for ; Wed, 22 Jul 2009 05:55:00 -0700 (PDT) Received: from osprey.mgras.de (osprey.mgras.de [192.168.48.3]) by quickstep.mgras.net (8.13.1/8.13.0) with ESMTP id n6MCju3V019039 for ; Wed, 22 Jul 2009 14:45:57 +0200 (CEST) Received: (from news@localhost) by osprey.mgras.de (AIX5.1/8.11.6p2/8.11.0) id n6MCjua26142 for linux-xfs@oss.sgi.com; Wed, 22 Jul 2009 14:45:56 +0200 To: linux-xfs@oss.sgi.com Path: not-for-mail From: Martin Spott Newsgroups: list.linux-xfs X-ASG-Orig-Subj: Re: patch 2.6.30 and 2.6.30.1 xfs/nfs oops fix, radix tree Subject: Re: patch 2.6.30 and 2.6.30.1 xfs/nfs oops fix, radix tree Date: Wed, 22 Jul 2009 12:45:55 +0000 (UTC) Organization: home Lines: 19 Message-ID: References: <20090721012455.GG3229@rlogin.dk> NNTP-Posting-Host: jive.mgras.de X-Trace: osprey.mgras.de 1248266755 33992 192.168.48.5 (22 Jul 2009 12:45:55 GMT) X-Complaints-To: usenet@mgras.net NNTP-Posting-Date: Wed, 22 Jul 2009 12:45:55 +0000 (UTC) User-Agent: tin/1.9.3-20080506 ("Dalintober") (UNIX) (Linux/2.6.29.1 (x86_64)) X-Barracuda-Connect: quickstep.mgras.net[213.146.115.59] X-Barracuda-Start-Time: 1248267303 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4086 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Ole Olsen wrote: > Eric has been very helpful in helping me downgrade xfs in 2.6.30.1 to 2.6.28.7 > version (getting 2.6.28.7 to compile in 2.6.30.1) which removed the oopses. > > Just wanted to post here for other people like me that don't have an option > of downgrading their kernel (need i.e. mdadm>=2.6.30). A little side note here: Just I as an excercise, because I'm a curious person, I performed a similar procedure, taking the xfs sources from 2.6.28.10, put them into a 2.6.30.2 tree, applied the patch and finally booted the resulting kernel: Don't try this on a machine you don't have console access to ;-) Cheers, Martin. -- Unix _IS_ user friendly - it's just selective about who its friends are ! -------------------------------------------------------------------------- From martin.geng@mlinkingbiz.com Wed Jul 22 08:24:08 2009 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6MDO5F0243727 for ; Wed, 22 Jul 2009 08:24:08 -0500 X-ASG-Debug-ID: 1248269073-1703025f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mlinkingbiz.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 736DC37B0C9 for ; Wed, 22 Jul 2009 06:24:33 -0700 (PDT) Received: from mlinkingbiz.com ([98.142.211.36]) by cuda.sgi.com with ESMTP id PuZUzKNJt01vZNPQ for ; Wed, 22 Jul 2009 06:24:33 -0700 (PDT) Received: (qmail 11558 invoked by uid 0); 22 Jul 2009 13:23:49 -0000 Received: from unknown (HELO MartinThinkpad) (martin.geng@mlinkingbiz.com@125.69.54.219) by 98.142.211.36 with ESMTPA; 22 Jul 2009 13:23:18 -0000 Reply-To: From: "Martin Geng" To: "Martin Geng" X-ASG-Orig-Subj: Best Practices for Sustainable Corporate Social Responsibility 2009-- **Last Reminder to Register- 5 Seats Left** Subject: Best Practices for Sustainable Corporate Social Responsibility 2009-- **Last Reminder to Register- 5 Seats Left** Date: Wed, 22 Jul 2009 20:56:36 +0800 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_001A_01CA0B12.A0F0C150" X-Priority: 1 (Highest) X-MSMail-Priority: High X-Mailer: Microsoft Office Outlook 11 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 Thread-Index: Acm3MWbMjyAdF18mSVWUnTSQPD0h1AA1eOjgAWGx3HAAKXadsAOQBpkwAD/JHuAAAZNIAAAlzBwQAAKqgqAAALgo8AACrGpQAAMaJHAAMGn/oAADN5OgAIwWLJAAOnAEYAAvX11gADnFo4AAHbkGEABCDt1gAJmdeWAAXfY3UAAraY+wAAX6vkAAluWoIAFT6ByAABL3dTAAH4sFgAAQnppQACJshJAAQ7+Q4AArzuKwAAZbJXAAAEYeIAH9D6VgAACOrlAAjYTu0AA10p2wACG685ACMsWmoAABKAZgAAC/amAAAFu6gAACSk2gAArYg1AAFaxhoAAESB3wAACXD8AAAD+wwAAtRT/wADJQBwAAcV6o4AAEuL5QACHOXgAANa7Z8AAygPwgAAB10HAAC/spQAACHxngAAiwWJAAI8YkMAAAhQhgAARRKXAAlrdssAAt7+SwAABKdjAAA+FM8AAvOKxQADFhFEAAMyJ1AAAkCZaAAAS5IMAABPmCoAAA5rhwAAMX6XAAlsp84AAjqVpwAArmtKAABxh3kAAuQvCA Importance: High X-Barracuda-Connect: UNKNOWN[98.142.211.36] X-Barracuda-Start-Time: 1248269074 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1224 1.0000 -1.2598 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.15 X-Barracuda-Spam-Status: No, SCORE=-1.15 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH, HTML_MESSAGE, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4089 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_001A_01CA0B12.A0F0C150 Content-Type: multipart/alternative; boundary="----=_NextPart_001_001B_01CA0B12.A0F0C150" ------=_NextPart_001_001B_01CA0B12.A0F0C150 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit This is your last chance to register for Best Practices for Sustainable Corporate Social Responsibility 2009. We have only 5 seats left; therefore, do not miss this opportunity to register! Best Practices for Sustainable Corporate Social Responsibility 2009 20th & 21st August 2009 Shanghai, China Hello, How are you? We are currently organizing the Best Practices for Sustainable Corporate Social Responsibility 2009 forum in Shanghai. This forum will optimize your CSR plan in economic crisis with the efficient toolboxes from experienced practitioners. Attending this informative event and gain practical insights into: $B!&(B Improving risk management skill from experienced organizations to make right decision on making CSR plan $B!&(B Implementing a vertical and horizon CSR plan in supply chain $B!&(B Obtaining the most practical toolbox to customizing a solution which suits your company most $B!&(B Tailoring efficient CSR plan for SMEs $B!&(B Optimizing your social responsible solution for an downsizing organization $B!&(B Enhancing the social responsibility inside the company by providing a better and more prospective environment to Employees $B!&(B Developing curricula to make the employees$B!G(B skill sustainable. $B!&(B Highlighting the value of non financial performance with sustainability report $B!&(B Maintaining employees$B!G(B trust and loyalty in the changeable world with efficient communication $B!&(B Making suitable CSR plan by earning the trend of CSR in such critical time Equipping companies and stakeholders with the most practical toolboxes on Corporate Social Responsibility from our honored guru: In the past decades, with the business expanding, companies have been considering the impacts of CSR as an important factor for business strategy. Product quality is not the only thing customer cares, contribution the company has done to society and environment becomes another important motive to encourage them to buy. This also turns out to be a factor for corporate sustainable development. We provide the most practical toolboxes in this event, including information, ideas and advice designed to help companies and their stakeholders address socio-economic and environmental challenges and integrate CSR into mainstream business practice. Sustainable Production & Consumption: $B!|(B Sustainable Marketing $B!|(B Environment and Financial Sector Revolutionary Business Models: $B!|(B Supply Chain Management $B!|(B Social Inclusion $B!|(B R&D Innovation Networks Communication & Transparency: $B!|(B Stakeholder Engagement $B!|(B CSR Reporting Human Capital: $B!|(B Skills for Employability $B!|(B Employee Community Engagement $B!|(B Wellbeing at Work Some of the eminent speakers we are inviting include: l Carla May B. Kim Head Sustainable Development Department Manila Water Company, Inc. l Louise Vogler Senior Credit Officer - East China, Wholesale Banking / Living with HIV Champion - East China Standard Chartered Bank l Sam Yoonsuk Lee CEO InnoCSR l Murray King GM APCO Worldwide(Shanghai) l Oliver Yang Manager,CSR and Government Relations The American Chamber of Commerce in Shanghai l Richard Brubaker Managing Director Crossroads l Sam Flemming CEO CIC l Sue Su Leader of the Sustainability Team APP China l Qian Yingchu GM Environmental Marketing Solutions, Inc., Shanghai Two days conference fee is USD 1195. Please find an agenda in both English and Chinese attached with this email and feel free to contact me for more information. To register the very limited 20% off seats, simply fill out the registration form, attention it to Martin Geng and fax it to + 86 28 6552 1233. If you don't want to receive any further email from us, please reply this email to unsubscribe with correct email address. Best Regards, Martin Geng __________________________________________ Martin Linking Business Consulting Company Limited Room 808A, Times Plaza, No.2 Zongfu Road, Chengdu, Sichuan 610016, China T: +86 28 65521255 F: +86 28 65521233 E: martin.geng@martinlinking.net W: www.martinlinking.com We are dedicated to offer our clients cutting edge information they can use immediately. Upcoming Martin Linking events: Title : Best Practice in Integrated Talent Management 2009 Date : 29&30 October, 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/tm_ws.pdf Title : Total Productive Maintenance (TPM) Best Practice 2009 Date : 30th - 31st July 2009 Location : Shanghai, China Link : http://www.martinlinking.com/documents/ws/tpm_ws.pdf Title : Continuous Application of Behavior-Based Safety 2009 Date : 30th - 31st July 2009 Location : Shanghai, China Link : http://www.martinlinking.com/documents/ws/bbs_ws.pdf Title : Best Practices for Sustainable Corporate Social Responsibility 2009 Date : 20th - 21st August 2009 Location : Shanghai, China Link : http://www.martinlinking.com/documents/ws/csr_ws.pdf Title : Successful Project Management Date : 27&28 August 2009 Location : Shanghai, China Link : http://www.martinlinking.com/documents/ws/pm_ws.pdf ------=_NextPart_001_001B_01CA0B12.A0F0C150 Content-Type: text/html; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable
 
This is = your last=20 chance to register for Best=20 Practices for Sustainable Corporate Social Responsibility=20 2009.=20 We have=20 only 5=20 seats=20 left; = therefore, do=20 not miss this opportunity to register!

 

Best = Practices for=20 Sustainable Corporate Social Responsibility = 2009

20th & = 21st August=20 2009

Shanghai,=20 China

 

Hello,

How are = you? We are=20 currently organizing the=20 Best=20 Practices for Sustainable Corporate Social Responsibility 2009 = forum in = Shanghai.=20 This forum will optimize your CSR plan in economic crisis with the = efficient=20 toolboxes from experienced practitioners.

 

Attending=20 this informative event and gain practical insights into:=20

·       =20 Improving=20 risk management skill from experienced organizations to make right = decision on=20 making CSR plan

·       =20 Implementing=20 a vertical and horizon CSR plan in supply chain

·       =20 Obtaining=20 the most practical toolbox to customizing a solution which suits your = company=20 most

·       =20 Tailoring=20 efficient CSR plan for SMEs

·       =20 Optimizing=20 your social responsible solution for an downsizing organization=20

·       =20 Enhancing=20 the social responsibility inside the company by providing a better and = more=20 prospective environment to Employees

·       =20 Developing=20 curricula to make the employees=1B$B!G=1B(B skill sustainable. =

·       =20 Highlighting=20 the value of non financial performance with sustainability report=20

·       =20 Maintaining=20 employees=1B$B!G=1B(B trust and loyalty in the changeable world with = efficient=20 communication

·       =20 Making = suitable CSR=20 plan by earning the trend of CSR in such critical = time

 

Equipping=20 companies and stakeholders with the most practical toolboxes on = Corporate Social=20 Responsibility from our honored guru:

In the past = decades,=20 with the business expanding, companies have been considering the impacts = of CSR=20 as an important factor for business strategy. Product quality is not the = only=20 thing customer cares, contribution the company has done to society and=20 environment becomes another important motive to encourage them to buy. = This also=20 turns out to be a factor for corporate sustainable development.=20

We provide = the most=20 practical toolboxes in this event, including information, ideas and = advice=20 designed to help companies and their stakeholders address socio-economic = and=20 environmental challenges and integrate CSR into mainstream business=20 practice.

Sustainable=20 Production & Consumption:

=1B$B!|=1B(B Sustainable=20 Marketing

=1B$B!|=1B(B Environment=20 and Financial Sector

Revolutionary=20 Business Models:

=1B$B!|=1B(B Supply Chain=20 Management

=1B$B!|=1B(B Social=20 Inclusion

=1B$B!|=1B(B R&D=20 Innovation Networks

Communication=20 & Transparency:

=1B$B!|=1B(B Stakeholder=20 Engagement

=1B$B!|=1B(B CSR=20 Reporting

Human=20 Capital:

=1B$B!|=1B(B Skills for=20 Employability

=1B$B!|=1B(B Employee=20 Community Engagement

=1B$B!|=1B(B Wellbeing at=20 Work

 

Some=20 of the eminent speakers we are inviting = include:

l =20 Carla=20 May B. Kim  Head=20 Sustainable Development Department  Manila Water Company,=20 Inc.

l =20 Louise=20 Vogler  Senior=20 Credit Officer - East China, Wholesale Banking / Living with HIV = Champion – East=20 China  Standard Chartered Bank

l =20 Sam=20 Yoonsuk Lee  CEO=20  InnoCSR

l =20 Murray=20 King  GM =20 APCO Worldwide(Shanghai)

l =20 Oliver=20 Yang  Manager,CSR=20 and Government Relations  The American Chamber of Commerce in=20 Shanghai

l =20 Richard=20 Brubaker  Managing=20 Director  Crossroads

l =20 Sam=20 Flemming  CEO=20  CIC

l =20 Sue Su=20  Leader=20 of the Sustainability Team  APP China

l =20 Qian=20 Yingchu  GM=20  Environmental Marketing Solutions, Inc.,=20 Shanghai

 

Two days = conference=20 fee is USD 1195.

 

Please find = an agenda=20 in both English and Chinese attached with this email and feel free to = contact me=20 for more information.

 

To register = the very=20 limited 20% off seats, simply fill out the registration = form, attention it to  Martin=20 Geng and fax it to + 86 28 6552 = 1233. 

 

If=20 you don't want to receive any further email from us, please reply = this=20 email to unsubscribe with correct email = address.  

 <= /P>

Best=20 Regards, 

Martin=20 Geng

__________________________________________

Martin=20 Linking = Business Consulting=20 Company=20 Limited

Room 808A, = Times=20 Plaza, = No.2 Zongfu Road, = Chengdu,

Sichuan 610016, = China

 

T: +86 28=20 65521255

F: +86 28=20 65521233

E:=20 martin.geng@martinlinking.net

W:=20 www.martinlinking.com

We are = dedicated to=20 offer our clients cutting edge information they can use=20 immediately.

 

Upcoming Martin Linking events:   

Title   =20   : Best Practice in Integrated Talent Management=20 2009
Date     :  29&30 = October,=20 2009

Location: Shanghai, China
Link    =20 :  http://www.m= artinlinking.com/documents/ws/tm_ws.pdf

 

Title      :  Total = Productive=20 Maintenance (TPM) Best Practice 2009

Date     : =20 30th – 31st  July 2009

Location : Shanghai,=20 China

Link        : http://www.= martinlinking.com/documents/ws/tpm_ws.pdf

 

Title      :  Continuous = Application=20 of Behavior-Based Safety 2009

Date     : =20 30th – 31st  July 2009

Location : Shanghai,=20 China

Link      : = http://www.= martinlinking.com/documents/ws/bbs_ws.pdf

 

Title      :  Best = Practices for=20 Sustainable Corporate Social Responsibility=20 2009

Date     : =20 20th – 21st August 2009

Location : Shanghai,=20 China

Link      : = http://www.= martinlinking.com/documents/ws/csr_ws.pdf

 

Title        = :  Successful=20 Project Management

Date        = : =20 27&28 August 2009

Location : Shanghai,=20 China

Link        =20 : http://www.m= artinlinking.com/documents/ws/pm_ws.pdf

------=_NextPart_001_001B_01CA0B12.A0F0C150-- ------=_NextPart_000_001A_01CA0B12.A0F0C150 Content-Type: application/pdf; name="Best Practices for Sustainable Corporate Social Responsibility 2009.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Best Practices for Sustainable Corporate Social Responsibility 2009.pdf" JVBERi0xLjYNJeLjz9MNCjEwMTkgMCBvYmoNPDwvTGluZWFyaXplZCAxL0wgNDAwOTY1L08gMTAy MS9FIDk4MzgwL04gNC9UIDM4MDUzNi9IIFsgMTEzNiA0MzRdPj4NZW5kb2JqDSAgICAgICAgICAg DQp4cmVmDQoxMDE5IDQyDQowMDAwMDAwMDE2IDAwMDAwIG4NCjAwMDAwMDE1NzAgMDAwMDAgbg0K MDAwMDAwMTcwMyAwMDAwMCBuDQowMDAwMDAyMjAyIDAwMDAwIG4NCjAwMDAwMDI2NzkgMDAwMDAg bg0KMDAwMDAwMzEyMCAwMDAwMCBuDQowMDAwMDAzMjU2IDAwMDAwIG4NCjAwMDAwMDMyOTUgMDAw MDAgbg0KMDAwMDAwMzM0NiAwMDAwMCBuDQowMDAwMDAzMzk3IDAwMDAwIG4NCjAwMDAwMDM0NDgg MDAwMDAgbg0KMDAwMDAwMzY3OCAwMDAwMCBuDQowMDAwMDAzNzU3IDAwMDAwIG4NCjAwMDAwMDQw MDcgMDAwMDAgbg0KMDAwMDAwNDc3MCAwMDAwMCBuDQowMDAwMDA0OTA2IDAwMDAwIG4NCjAwMDAw MDU4MjQgMDAwMDAgbg0KMDAwMDAwNjUyNCAwMDAwMCBuDQowMDAwMDA3MzA1IDAwMDAwIG4NCjAw MDAwMDgwMTYgMDAwMDAgbg0KMDAwMDAwODg0MCAwMDAwMCBuDQowMDAwMDA5NzQyIDAwMDAwIG4N CjAwMDAwMTk0NDYgMDAwMDAgbg0KMDAwMDAyMDEyMCAwMDAwMCBuDQowMDAwMDIyODE1IDAwMDAw IG4NCjAwMDAwNTA1NTcgMDAwMDAgbg0KMDAwMDA2MTEwNSAwMDAwMCBuDQowMDAwMDYxMzU0IDAw MDAwIG4NCjAwMDAwNjE1NjMgMDAwMDAgbg0KMDAwMDA2NjczNSAwMDAwMCBuDQowMDAwMDY3NTkw IDAwMDAwIG4NCjAwMDAwNzA4NDQgMDAwMDAgbg0KMDAwMDA3MTMyMSAwMDAwMCBuDQowMDAwMDc0 MDYwIDAwMDAwIG4NCjAwMDAwODA5NjggMDAwMDAgbg0KMDAwMDA4MTgyMyAwMDAwMCBuDQowMDAw MDg4NTg4IDAwMDAwIG4NCjAwMDAwOTczNDUgMDAwMDAgbg0KMDAwMDA5NzU5NiAwMDAwMCBuDQow MDAwMDk3ODAzIDAwMDAwIG4NCjAwMDAwOTgwOTAgMDAwMDAgbg0KMDAwMDAwMTEzNiAwMDAwMCBu DQp0cmFpbGVyDQo8PC9TaXplIDEwNjEvUHJldiAzODA1MjMvUm9vdCAxMDIwIDAgUi9JbmZvIDEw MTggMCBSL0lEWzw5NkJGRUREQkMxREI2RDRCQTcxNjMzRjIxOTIyRTRFMz48MDA0NEIxNDE5N0I4 MTQ0MTgyRDlGMEVDRjRDMkM1NUQ+XT4+DQpzdGFydHhyZWYNCjANCiUlRU9GDQogICAgDQoxMDYw IDAgb2JqDTw8L0xlbmd0aCAzMzgvQyAzNzIvRmlsdGVyL0ZsYXRlRGVjb2RlL0kgMzk0L08gMzU2 L1MgMTc2Pj5zdHJlYW0NCnjaYmBgYGdgYPnKwMbAYPCFQZABAQSBYuwMLAwcDUkHlkQ0MDBl6cz+ 4LqCkwEVCDhM5ZqzO+mkdbvLqc0xe5vDukPXBN3d4MjUsqfqH4uFoaxdi8/KtOzpG7IuZm3tit6m l3DC5RHL0V4lywCwfvGOjgYQzeLeAQZgjkpoekcHgi8Btx/IUWdgetcGphkYPMFGqDMIMJ5h3MY4 iSERyOMBw/0MGgyXma4wJDLnM01lesa0gFmQOV71IFM1V0KOuSYvwyWGVSK8zAY8/YzbuHqkrjIb SLkp8TFcYVjB8IPhN8N2xmu8DIx3GS4zrP7cxnCRYanQQoYkhhDRewyLGc4xbGA4yVDJEMNwhiGK 8RbjJTA7iiEESCYxxDJOBIrsZcxACSRPBhbTFiDNzcDADPJ2CAOLxRUgewkDY8tNmCLmXwysp78B GYxAfBggwAAkxmZYDQplbmRzdHJlYW0NZW5kb2JqDTEwMjAgMCBvYmoNPDwvTWFya0luZm88PC9N YXJrZWQgZmFsc2U+Pi9PdXRsaW5lcyA3MyAwIFIvTWV0YWRhdGEgMTAxNyAwIFIvUGFnZXMgMTAx NiAwIFIvU3RydWN0VHJlZVJvb3QgODQgMCBSL1R5cGUvQ2F0YWxvZz4+DWVuZG9iag0xMDIxIDAg b2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJdL1BhcmVudCAxMDE2IDAgUi9TdHJ1Y3RQYXJl bnRzIDAvQ29udGVudHNbMTAzMiAwIFIgMTAzNCAwIFIgMTAzNSAwIFIgMTAzNiAwIFIgMTAzNyAw IFIgMTAzOCAwIFIgMTAzOSAwIFIgMTA0MSAwIFJdL1JvdGF0ZSAwL01lZGlhQm94WzAgMCA1OTUu MjIgODQyXS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDEwNDcgMCBSL0ltMSAxMDQwIDAgUi9J bTIgMTA0OSAwIFIvSW0zIDEwNTEgMCBSL0ltNCAxMDUyIDAgUi9JbTUgMTA1NCAwIFI+Pi9Db2xv clNwYWNlPDwvQ1MwIDEwMjUgMCBSL0NTMSAxMDI2IDAgUi9DUzIgMTAyNyAwIFIvQ1MzIDEwMjgg MCBSPj4vRm9udDw8L1RUMCAxMDIyIDAgUi9UVDEgMTAyMyAwIFIvQzJfMCAxMDI0IDAgUi9DMl8x IDEwMzMgMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VDL0ltYWdlSV0vRXh0R1N0YXRlPDwv R1MwIDEwMzAgMCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMTAyMiAwIG9iag08PC9TdWJ0eXBl L1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDEwMzEgMCBSL0xhc3RDaGFyIDE0Ni9XaWR0aHNbMjc4 IDAgMCAwIDAgMCA2NjcgMCAwIDAgMCAwIDI3OCAzMzMgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCA3MjIgNzIyIDY2NyA2MTEgMCA3MjIgMjc4IDAgMCAwIDgzMyA3 MjIgNzc4IDY2NyAwIDcyMiA2NjcgNjExIDAgMCA5NDQgMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDU1 NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMCA1MDAgMjIyIDgzMyA1NTYgNTU2IDU1NiA1 NTYgMzMzIDUwMCAyNzggNTU2IDUwMCA3MjIgNTAwIDUwMCA1MDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIyMl0vQmFzZUZvbnQvT0xCQUxFK0FyaWFsTVQv Rmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoN MTAyMyAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDEwMjkgMCBSL0xh c3RDaGFyIDEyMi9XaWR0aHNbMjc4IDAgMCAwIDAgMCA3MjIgMCAwIDAgMCA1ODQgMjc4IDAgMjc4 IDAgNTU2IDU1NiA1NTYgMCAwIDU1NiA1NTYgMCA1NTYgNTU2IDMzMyAwIDAgMCAwIDYxMSAwIDcy MiA3MjIgNzIyIDAgNjY3IDAgMCA3MjIgMjc4IDAgMCAwIDgzMyAwIDc3OCA2NjcgMCA3MjIgNjY3 IDYxMSAwIDAgOTQ0IDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA2MTEgNTU2IDYxMSA1NTYgMzMzIDYx MSA2MTEgMjc4IDAgNTU2IDI3OCA4ODkgNjExIDYxMSA2MTEgNjExIDM4OSA1NTYgMzMzIDYxMSA1 NTYgNzc4IDU1NiA1NTYgNTAwXS9CYXNlRm9udC9BcmlhbC1Cb2xkTVQvRmlyc3RDaGFyIDMyL0Vu Y29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTAyNCAwIG9iag08PC9T dWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1sxMDU3IDAgUl0vQmFzZUZvbnQvT0xCQUhDK0Nh bGlicmkvVG9Vbmljb2RlIDEwNTggMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4N ZW5kb2JqDTEwMjUgMCBvYmoNWy9JQ0NCYXNlZCAxMDQyIDAgUl0NZW5kb2JqDTEwMjYgMCBvYmoN Wy9JbmRleGVkIDEwMjUgMCBSIDI1NSAxMDQ4IDAgUl0NZW5kb2JqDTEwMjcgMCBvYmoNWy9JbmRl eGVkIDEwMjUgMCBSIDI1NSAxMDUwIDAgUl0NZW5kb2JqDTEwMjggMCBvYmoNWy9JbmRleGVkIDEw MjUgMCBSIDI1NSAxMDUzIDAgUl0NZW5kb2JqDTEwMjkgMCBvYmoNPDwvU3RlbVYgMTM4L0ZvbnRO YW1lL0FyaWFsLUJvbGRNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udFdlaWdodCA3MDAvRmxhZ3Mg MzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02MjggLTM3NiAyMDAwIDEwMTBdL0FzY2VudCA5MDUv Rm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0IDcxOC9YSGVpZ2h0IDUxNS9UeXBlL0ZvbnREZXNj cmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMTAzMCAwIG9iag08PC9PUE0gMS9PUCBmYWxz ZS9vcCBmYWxzZS9UeXBlL0V4dEdTdGF0ZS9TQSBmYWxzZS9TTSAwLjAyPj4NZW5kb2JqDTEwMzEg MCBvYmoNPDwvU3RlbVYgODgvRm9udE5hbWUvT0xCQUxFK0FyaWFsTVQvRm9udFN0cmV0Y2gvTm9y bWFsL0ZvbnRGaWxlMiAxMDQzIDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyAzMi9EZXNjZW50IC0y MTEvRm9udEJCb3hbLTY2NSAtMzI1IDIwMDAgMTAwNl0vQXNjZW50IDkwNS9Gb250RmFtaWx5KEFy aWFsKS9DYXBIZWlnaHQgNzE4L1hIZWlnaHQgNTE1L1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGlj QW5nbGUgMD4+DWVuZG9iag0xMDMyIDAgb2JqDTw8L0xlbmd0aCA2OTEvRmlsdGVyL0ZsYXRlRGVj b2RlPj5zdHJlYW0NCkiJjFRda9swFH33r7iPdpkVSbZlGUofkpaxQVnXGPpQxnAdJdVIrMx2abtf vyv5K01bCIFwLZ37dc69mufe7AbOz2fXi2+XQOHiYn65AG/2dUlh03izBf9NgUG+9hglCQLwqzNk RImgNIJ8551TNC7yP97VtXWeArIhIIWQkVgKyC8/R/MBnZ99DopOAcWngJJTQOIUUHoKSH4Kusq9 v8iQjDkkWUIoh1DGjCBbtfLuzqDqrxnJpEP0APyyALyfLVCvsrH6EMHxL0kFQFNW6JdSRlI5RGYx RXd0W3s/8Td/o380DUCeT7qjWy88WoIwDpKnJOad+D4EH8k0Sn8wQ5g6FRLyEt5OUxeTYct9zHtH kCNJTOav/Pv7POPQ2CLz1UQtg41tgw2p8Ty2qSlhMsNBfAbOLYW2is7CppgEiXwlou9trpoWbuqi bHWpGlibGpZPTVvoqnjYKliYem/qolWwNKUuto4Kl0rYVKE1WWpzuQWIEmkXwL9Vzd5UjX7QW92+ Aqc0+5jE6L0e4WEnnfUMTIwiOavrJI0lYUMnP/at3ul/utrAq3mqYbG8hf22qEBXoEpTmZ0uoax1 YwvpkvCxB5q4LJJkkehovvd1A8+6fYT2UYFaByzz17rUqmqhNWb7YF4sX7XZQWB1Oyi7MyMbMexD Ijcs6cKql72qMUypVrB3xLfaVKpuIAg5Z34X7pipbHpoNocTx2MSU+kaoa6Fo1dMZDiTlInxFTte zGGzmPu5lYpwQCIJIpJECOAyI1yAsGPV7dXRTsVTacfLOY3nyLJVNaIZs8Wmw3g6I6KS4PwImeLL 0K+JfzcqEITSfwlC5u8La1YrXQWh8DcBUmbW3X1p7407H+XWzRco7aWxx7veG7006lfUCp7sebVS NWxqhbdM+K09QiEA/gswAOu3cS8NCmVuZHN0cmVhbQ1lbmRvYmoNMTAzMyAwIG9iag08PC9TdWJ0 eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1sxMDQ2IDAgUl0vQmFzZUZvbnQvT0xCQUtFK0FyaWFs TVQvVG9Vbmljb2RlIDEwNTkgMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5k b2JqDTEwMzQgMCBvYmoNPDwvTGVuZ3RoIDg0Ni9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0K SIlsVEuP2zYQvutXzKmggojmW1IRpEi8OWyALZpaQA9FD1qbttTVw5XoXey/7wxVrZ2gMGANOc/v m+EAQPU1yQQXQmio9kCikiVULyAgk1xaqO6SP9l58vN8mTxPs4LB/QwtCSFVbJF6lM5jmjk2z+1j 56NZoPN4Y4PHc+f7qB3wPhrAdvf7YjDQMYyQZjl7vMztaoapY7w5THVM609pJjV7TaVlkBbsJc1U zho0bTsP6V+ICXFIWxCO6h3W/5rmLJZ3gXryV58xlWx6aocTNPV0iJnHAeZYoX9aKjjBcQGCpoAa 6dhzKg3zE8o5VWEYRHDRrR7mFbnEmi+LVfRob5xXyGgTGg97MhPs4rsIdcUghFrbInJ905Zi6Utf T08+/ALExKdUabaPBF3qLsZ5TUvB3i8RERoyTZ8VvkO6Omh8d47a/YggLDsjjfXQRiyIZLxp8DRG 3p8pm3+LiuW3WH3J4PFCAeZ2WDt2HOliUUZIy6iVhIkkeQOpkAukGjmbQ00+xBcboogzBQfK5um0 UEjajo7E9JmUPQrRgHgN/Jr3y8MWki9VIoF+MO+HxKicWwdOao531nJhwCisAyafHJPN/dAhkF1T nz18+LB52N7foR4+fvx8h7H+SYw2PEd/K7krQBrBsSkZXpaKIvzxDga0ElAYycsCbGm5guy/ExlE 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 ntQye4eYY5pDJCkZRXC06hqt4Gh5KaqsvUSbQtLuzknyk9kt3jgbEHCj3HjkXNpXegtYnwPWechM uRFlWf8rMwfksnecTE3eUboGBgMooyFW2p60PZnJ2TFtE43s7TSQ+HyugQP+xAXir5Bj69/gyyt8 0FN0Iu+Kix4anTeoPEMCWVs+KLdwGLaG3EdSBz0ys91yrsn2gBLIYXbkl4kZzDeCc0YMpSnqaIaI eSvZLT4E1CRvvRByiLpMx7AGCl7THCziJdxYJ+ygXbrOk0FTr096cMdQyZAaASlFUZxd+fzlkVb3 X+nDh/svj5+eqGzp48eHJ1yub0uTt21wTnal+ASKP9K8RpMAiI6RTJm4k+mRjnSToOCjC6zoOEGA UXKAIjfscOn4q1/B0GTYHSb2WpkQCHMH8Av+jt7ZLm+bLpSpFlWZX8pkrBqW3kAivItQxiJZo4T1 2IZ3BFIyFCG4oSfJzXsyihPE92YfzBWeIesHPRzfGzQvNl0sV8S+LdfV2OZtajAirAlvmAldK//W BzfEqQEiPZ8mzQ0drczrmj/kCCqtEmfdyJLUG5PiwqSLXm1Eg1a5ePWmERBiRLWZwoAWJnWQw6Dt HqlFTwSmPTLv9T4ME0wpHlm4cGxw+k93RK+2UXzEvBU/wnezTzvIkSPtEG2Zw1xkdbH4LEMLvPI/ vttcfBfnJCN12DKsVSaaAkMrE3XDdMYVgmz/ijGet6v7x+8ZqRlp2RQV1i4PK2Y7zcquygyEG8o3 tSixdZVoqWlFVdGkVy+rh+0tj4r9T8RM6LcAAwDWRaEODQplbmRzdHJlYW0NZW5kb2JqDTEwNDAg MCBvYmoNPDwvU3VidHlwZS9JbWFnZS9MZW5ndGggOTU0Ny9GaWx0ZXIvRENURGVjb2RlL0JpdHNQ ZXJDb21wb25lbnQgOC9Db2xvclNwYWNlIDEwMjUgMCBSL1dpZHRoIDQ3OC9IZWlnaHQgOTcvVHlw ZS9YT2JqZWN0Pj5zdHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsR FQ8MDA8VGBMTFRMTGBcSFBQUFBIXFxscHhwbFyQkJyckJDUzMzM1Ozs7Ozs7Ozs7OwENCwsNDg0Q Dg4QFA4PDhQUEBEREBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMgKCglJSgoMjIwMjI7Ozs7Ozs7Ozs7 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 ycJ0CSdb0H7VphZAA07tjFxKMSoVUtgdydST4koySSjJtkGikkkklKSSSSUpJJJJSkkkklKSSSSU pJJJJSkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKq SSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJ KfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpMvlZJJT9VJL5VSSU /VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/wD/2QoNCmVuZHN0cmVh bQ1lbmRvYmoNMTA0MSAwIG9iag08PC9MZW5ndGggNjAyL0ZpbHRlci9GbGF0ZURlY29kZT4+c3Ry ZWFtDQpIiayUTYvbMBCG7/4Vc1qkgh1JtmVlCTnko5BCyrLxrZTiOt7UrSMv/thl/31n5CTstsn2 0BAij6QRft7xOwLwBOy8UZpKkJA+eL4IhJAxpDlQFCaQPkMSxCDwR89QhoHRoEIT6EhEkO69L+y+ 4L4M2ROXktVcsqrvuB+xkobaZtyPWcN9JdgLVwmDGfcT1mNeSzsuyxYUtm4B1vXWTSs3veVSMeBf 00/ecj0Hb3QHk8loPV8tIDIwnc4WtDhX3w4ShIMnbgG+CoRGyIU3EXIcTdOfpFUcEkmgHKQqGUt3 JNDC0OktygLgvmEbrhHWl+yRJ/jHoHrhEjG5kprNecx+ZKXFmYrYOkO1CdsVe4IubMfHl9DH76L7 AwjxG4L5P/yaqPMSYbJqAF1ZxMyrHseWNmmvxok9TxuLa9BKefSVPEOLBsF60gP57m94xBawshbr i/jOXCHLKOrKGhcthfC56J6d65pfuNby+HW5lynibgTkLb7KqAjHsXSj0ABtbr1EBsqANIOnRRwo DdpgLjSF9+DN0jefLDwW4UzPqFPPRH/1TGKCSLmWiZUIh5bZ9Fh3zTpyeEZRSZF14feqgLuG5vW2 z09pLqO2cAPz2rrT/f5x2KntLRUuvNgo0bvfL/1wjf5oye0ZOck1AarAceiSdYbfJ2FF53Ypeef2 zrLGV+kMRSeG6+wfXluiAMf0RG1d4r3U1HZP8G61A24YCbJb+Mg1Owm0Q0e5GwGoCnQkpyLUDR65 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 DTEwNDUgMCBvYmoNPDwvU3RlbVYgODgvRm9udE5hbWUvT0xCQUtFK0FyaWFsTVQvRm9udFN0cmV0 Y2gvTm9ybWFsL0ZvbnRGaWxlMiAxMDQ0IDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2Nl bnQgLTIxMS9Gb250QkJveFstNjY1IC0zMjUgMjAwMCAxMDA2XS9Bc2NlbnQgOTA1L0ZvbnRGYW1p bHkoQXJpYWwpL0NhcEhlaWdodCA3MTgvWEhlaWdodCA1MTUvVHlwZS9Gb250RGVzY3JpcHRvci9J dGFsaWNBbmdsZSAwPj4NZW5kb2JqDTEwNDYgMCBvYmoNPDwvU3VidHlwZS9DSURGb250VHlwZTIv Rm9udERlc2NyaXB0b3IgMTA0NSAwIFIvQmFzZUZvbnQvT0xCQUtFK0FyaWFsTVQvV1s0MDRbNjA0 XV0vQ0lEVG9HSURNYXAvSWRlbnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQgMC9PcmRl cmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+Pg1lbmRv YmoNMTA0NyAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA1MDE1L0ZpbHRlci9EQ1REZWNv ZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgMTAyNSAwIFIvV2lkdGggMzAyL0hlaWdo dCA2Mi9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0K/9j/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgM CQkMEQsKCxEVDwwMDxUYExMVExMYFxIUFBQUEhcXGxweHBsXJCQnJyQkNTMzMzU7Ozs7Ozs7Ozs7 AQ0LCw0ODRAODhAUDg8OFBQQEREQFB0UFBUUFB0lGhcXFxcaJSAjHh4eIyAoKCUlKCgyMjAyMjs7 Ozs7Ozs7Ozv/wAARCAA+AS4DASIAAhEBAxEB/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcI CQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCES MQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl 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 voq1vRM8V/4PIssyHPduJDQxxmXQBqeD5cLokkhKelDp2UYx6n8XAzKMzEyLrnWV/rTW1tc3+ecQ I9KpvAE9/BaXSMJ+DhMofG4alrdQCdTqdShPrwx1hr8m0uyHN/VKnNIa0Ae7afolx+9aSUieEDyv T7ExAslSSSSjXqSSSSUpJJJJSkkkklP/2QoNCmVuZHN0cmVhbQ1lbmRvYmoNMTA0OCAwIG9iag08 PC9MZW5ndGggNzgzL0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3gAAA//8AAAA////lpaW iYmJRUVFAgICAIrg/P3//f7/7fb+AHncAHbbAHjbAnzeBXncDH/dAILjAH/eAH7dAH3dAHvcAHzb An7dAn3dA4LgBIHeBH7dBYbmBYPfBoLeCYTfCoLeDovnE4bgE4beF47nII3hK5LjT6foUqfo7PX8 8Pj+AI7uAIrsAIbkAIfjAIXiAIXgAIbfAITfAIHeAILeAIDdAIPbAH3TAYrpAYPcAobiAojhAoXf AoHdAnzOA4XgBIbfBITdBoTeB4jmB4fhCIjfCongCofgDYfgEI3hEYrgFY7hGo/hHZTjI5TjKJjj LprkNJ3lOZ3lQaLnRKTlSKbnSqnpTKnoWrDqYbXtYLLrYbTrZLTrZrbsmM7ym8/ztdz21ev62e37 3e/77vf98vn+8fj99Pr+8/n9+v3/+fz++Pv9AJLyAI7qAIzlAIrkAIrjAIniAIfgAIngAIvgAIjf AYncAYfcAorhAofdAoXaA4nfA4PVBIbYBHjCBna9DI3hCXCxD5DiC2upCmagEpLjFJbsDWSbCUBk D16QEVuIIprkE1N7JZ3pJ5XdFU9zFkhnNKHmO6PmP6foQKboQ6rsRKnoRqnoSKrpTK3pUK3pU67p VrHqW7PsXLTrXrXsXbPrX7TrZLnxY7jsZbnsZrnsaLnuarrtbbztbbrtcLztc77udsDue8HufsXx fcPvgsXwhcfwhsjwjM/5icryiMjxisjxicfwi8rxj8vykszyls7ymdDzm9HzntP0ntLzn9PzrN79 p9Xzqtj1rdn1sdv1uN/3u+D3veL5vuH3wuP4w+T4xuX4yOb5zOj6zOj51uz64fH76vX8AIzgH57q GUJZHDI/esHrfsXviMvxjszxo9b0t9/2weP3y+j4zun50er54fL85PP87Pf96/b89vv+Ez1Szer5 3vH75fT85PP76PX85/T77vj98/r99/z++/7/+Pz9/v//HBwY7u7u3d3dzMzMvLy8q6urmpqaeHh4 Z2dnVlZWNTU1JCQkExMT////AgwA7wDgrwoNCmVuZHN0cmVhbQ1lbmRvYmoNMTA0OSAwIG9iag08 PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCAzMDk1L0ZpbHRlci9GbGF0ZURlY29kZS9CaXRzUGVyQ29t cG9uZW50IDgvQ29sb3JTcGFjZSAxMDI2IDAgUi9XaWR0aCAyMzAvSGVpZ2h0IDYwL1R5cGUvWE9i amVjdD4+c3RyZWFtDQpo3uyZDXQUxR3A39zelwmtXu5EoRC0rVVa6+VuUVqjtbQiJCGXIASoBUMS oBdNAndJrTxKRKA0EAuJ7VVCilqNIAlNpE1VCNWa4BVIG8DS2sZATKAFYkDTu9v7zL3uzOzH7MeF yOvHg5c/j+ze7Ozu/Ob/ObMAjMmYjMmYjMmYjMkViHPqHQMf9fWdHzhRdPYaRTSs6PO+vuvF+gV5 dQu/29hdcGaF4ZpjNK7obKnLybjZlGK2JCUlTcvKfbm9z3iNQS4/uu/h1ORky8TU2XMcufNuv31B 3iMHljrVulKsBPEpA899V/RCrx5K4f8U8tzrtQ+aUrNrt/+i6c232g8vZT1zcOD4daomG9KxwsAz f5w9owClI4QCoEFPSBtoY/+24ltbUQMSD7raQCK3Chf+K/CG3sWpFtNMz5JTFy4WG4xDQ8KVxwb6 ihXdwyxMHGowxp5ogZSS5R8NpZe7XEj+6lJSapDwRw1sAfwfsZNwHfcFyi4sZM98u8ma9nTdo+92 XSTbz3Q+uvuRd1YoMLUsTAzTDfvwEekWDGNlYmkbidLDUTaQlFuKSEo0ZMwl/pUz8WgaglhtIsAl b62Zdpfr731oVnZjrxhwivIXO2Z/e0L2EgWmD9KEGai5ACApKYKyidePGiXC8grK5DVbI6GU8EmU KtWj0Bl3JTqK3Yrbc1Nsen0abb5+zu7Oqby1nl26xzHDZLfRpuwDU+WYAQgInTIEJJQxvgmAeqyd LqBK6UFqbOCVCSm3wP5NCkp+sBoRRIQiKDWA/yfF5zLI0bnJae9V0JYpOXu9g4KxnluS92CK3c2+ MS3ltkNG1Qik00UEDQoSxnaALdJTJFgu4aiYamMRKOSVCX83IOW3q1mshtAl+qURNUpOAgevEWeD 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 TXzHGOt2vbdrX7UvOg6tpskFVd9AZR5zeA8qKEHPB7P00TYGWb5ZljoN7HJumd0KKZwyuqtTH3/t YkmgNrg9X3JmOmr399L54VE60cTbo/WR3Tt2iv1B18Lk6Tba5LqAHJ0wTQquG5vhlzmP5tu16o/p 6ef/lgp/M2ysJpstw0XYBNFpC2/I6LjhbqyfNr6nHX3tt232rSveler/P35Rqv8KMADzOJtsCg0K ZW5kc3RyZWFtDWVuZG9iag0xMDUyIDAgb2JqDTw8L1N1YnR5cGUvSW1hZ2UvTGVuZ3RoIDY3NTEv RmlsdGVyL0RDVERlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZSAxMDI1IDAgUi9X aWR0aCAyMDAvSGVpZ2h0IDYwL1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/gABBKRklGAAEBAQBI AEgAAP/bAEMAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQFhAR ExQVFRUMDxcYFhQYEhQVFP/bAEMBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQU FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIADwAyAMBIgACEQEDEQH/xAAfAAABBQEB AQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYT UWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZX WFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAA AQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGh scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq c3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV 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 yPn6+/jx8fPl5IqgtBpGbvX3+BNCavfu7RZEbLppZqS2xbjG0dqtq8B1cpgaFrxtaerS0fHh4e3a 2Z4mIuDm65aqvOjs8CVQdfXp6blkYbVdWUFmh6IxLMDM1+Lo7JGnuatFQrJVUk1wjoyitRA/aJ0k H6CywoCZrszW3n2WrM/Y4DZdgFBykDlggvr8/K5MSaQ2MVR1kmaEnnaRqLdhXfr7/MN9emSCnO/d 3HqUqsiJhqU5NaxIRbNZVniSqcWBfqlBPujNy6K1xP78/Nzj6BtIb42jtuzX1d64tseEgYifs2GA m7FST2qHoFJzkac8OMJ5dvr6+tSgnr5wbZOouoKbsJKnufLk42KBnOvv8vv397TCzz9khT1jhEtu je3Y1+/z9Y+luBVDa9+6uB5KcOru8duwr5YVEChSd8iGgxhGbrrH07/M1tPb4+7c2/v493+YrQU2 YbvI1OzV1FV2k79zcKa3xubr79anpfPo59CYls7X33SPp/3+/lh4lebIx+LAvsjT3Onu8PPm5u/e 3meFn/7+/ZQRDEhsjA8+Z+vU0/z9/ZesvRdEbag+OsyRjq++y19+mkJniPfw76G0w9bf5fn08/P1 96i5x+fs7x1KcenQzwAwXau8ytipp8+WlCBLckdri09xjy9Xe9fe5ZMOCZ0mIrXDzxlGbfv8+/jw 8Iigs8fS2xhFbTtigx1JcJ4nI5cYFNvi6Pf5+v38+50lIdTd4xtIcP3+/fDg36Gzwwg4Y/bs6/79 /Z0mIdirqZ8rJ8eIhZuvwOjt8K9RTau7ya9PS09yj/z187zJ1I+ltxpHb3uVq3yVrJ8pJR5Kcf// /wIMAKrK5DAKDQplbmRzdHJlYW0NZW5kb2JqDTEwNTQgMCBvYmoNPDwvU3VidHlwZS9JbWFnZS9M ZW5ndGggNjYwNi9GaWx0ZXIvRmxhdGVEZWNvZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3Bh Y2UgMTAyOCAwIFIvV2lkdGggMjQ1L0hlaWdodCA4My9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0KaN7k W3tcE1e+H0h4RAiB6KgIKkJ9AKlYYQRRbAU2VR4qJiKv5S2L77aGuijoqtQ34nTV+GrVRa0VEWvt EkMq0K2ofaFxV3ZLmChNuxW7ZbV2rx1v5txzZpKQBKx2t2Hr554/kplzzpzke37v3/kNAP9WC4sW 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 GNum94iEiJwZCSP6dLLrdptuDbL3GJrSJWtBepd/2CM7Rcd0ahMU1KZTTHSnSPuZt61hP39jDfsl 1bLgly26bfjMUV31G4ODNIvN1tg5tv15w+Mzp4a3jbCEtI2IjAmyt4ls3SNt5pnLozsaY3SMjuax jH8tHvi/2VLOcY5znOMc5zjHOc5xjnOc4xznOMc5zvE/DYXRPnzr5n+QKTK/DW+nn1FSgf9QM0DN DnidwtTmgLfAbw94G/yegLdTjXrQGMXSCpGO2tCA1yhMywl4HXFPwFvgawLeBr8VXsHjfLT7Ax7n o7en3eSkAdQPP0PgJlA5FVIFLaZKUEJViKXCVdAS89uDSDncIuqDmtG0AD9OmoJYKZWhrtIsFUOL 0XoZvovQMhX9FqDNXMTK0aLcbFcMrUIvo6UTLZzQYoxj1FaZUaO3E944bhFKC6EVNB+xxWf7/HFt yf/RtRhntMgcyzgbJ7lRKjfPwTh+DpzHLFWax1yEaN/AGSxudgWFKFWjtsq8SqN1n93OAf36DXFO KC+sWFy5uKTKmbq4YsniCk9V+eJFfZyjFyxwTikvLauqdE4priyuWFZc1GfS+JTRY1MTUz0LyudW lP9ZKSDO8kpncXlVWXGF0+OsKC4tr6wqriguclZVeIqKF3oq5jsXGzXNiiV/fD7O8kVODON0Lyqv Qv+cKk9VcaXTs6ioLwZYbB6gcHH1oqqK8uLKPjSJxlMKJsBY3NLEFg94ivkYqxExHsiftfy/rTs3 af8HJ635n5GxcnhoL9aIPUCjCHQuJnLFqkuxtpj/KMT4b/YhTZkz5oSPOEXtg8xl6qHPVz1v6JGU T1qd7t9U2eoB+3YUjXXKXMf+S4ABAMeevUIKDQplbmRzdHJlYW0NZW5kb2JqDTEwNTYgMCBvYmoN PDwvU3RlbVYgODAvRm9udE5hbWUvT0xCQUhDK0NhbGlicmkvRm9udFN0cmV0Y2gvTm9ybWFsL0Zv bnRGaWxlMiAxMDU1IDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTI1MC9Gb250 QkJveFstNDc2IC0xOTQgMTIxNCA5NTJdL0FzY2VudCA3NTAvRm9udEZhbWlseShDYWxpYnJpKS9D YXBIZWlnaHQgNjI1L1hIZWlnaHQgLTUzMS9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xl IDA+Pg1lbmRvYmoNMTA1NyAwIG9iag08PC9TdWJ0eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3Jp cHRvciAxMDU2IDAgUi9CYXNlRm9udC9PTEJBSEMrQ2FsaWJyaS9XWzNbMjI2XV0vQ0lEVG9HSURN YXAvSWRlbnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQgMC9PcmRlcmluZyhJZGVudGl0 eSkvUmVnaXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTA1OCAwIG9i ag08PC9MZW5ndGggMjE1L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3lRQMW7DMAzc9QqO LTpIdjMaBop08ZC2qN3uikS7AmJKoOXBv48kOAk6kASPPNyR8ti9d+QiyC/2pscIoyPLuPiVDcIZ J0dQ1WCdiXtXspl1AJnI/bZEnDsaPTSNkN9puETe4GkYqhf1DPKTLbKjKSGH+uc3If0awgVnpAgK 2hYsjkIeTzp86BlBFuIDHLaAUJe+2rW9xSVog6xpQmiUUq/trSDZ//Mb6zyaP83isf2mWpG2dzzz 8k13H2ZlThbL4cVItuAI778JPmS1HOIqwADUTWpvCg0KZW5kc3RyZWFtDWVuZG9iag0xMDU5IDAg b2JqDTw8L0xlbmd0aCAyMTgvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFA9b4UwDNzz Kzy26hBAdKiEWHiqxNAPFdo9LzE0UnEiEwb+fZMIXtXBtnz26c6WXX/pyQaQ7+z0gAEmS4ZxdRtr hCvOlqCswFgdji5nvSgPMpKHfQ249DQ5aBohP+JwDbzD3TjWD8U9yDc2yJbmiNTV51dEhs37H1yQ AhTQtmBwErJ7Uf5VLQgyE//AcfcIVe7LQ9sZXL3SyIpmhKYon+r2LEjm//xkXSf9rVic29Vj99yK uH3giZduuvnQG3O0mA/PRpIFS3j7jXc+qaUQvwIMAPClarUKDQplbmRzdHJlYW0NZW5kb2JqDTEg MCBvYmoNPDwvQ3JvcEJveFswIDAgNTk1LjIyIDg0Ml0vUGFyZW50IDEwMTYgMCBSL1N0cnVjdFBh cmVudHMgMS9Db250ZW50cyAyIDAgUi9Sb3RhdGUgMC9NZWRpYUJveFswIDAgNTk1LjIyIDg0Ml0v UmVzb3VyY2VzPDwvWE9iamVjdDw8L0ltMCAxMDQwIDAgUj4+L0NvbG9yU3BhY2U8PC9DUzAgMTAy NSAwIFI+Pi9Gb250PDwvVFQwIDQwIDAgUi9UVDEgNDIgMCBSL1RUMiA1NiAwIFIvQzJfMCA1NyAw IFIvQzJfMSA1OSAwIFIvQzJfMiA0OSAwIFIvQzJfMyA1MCAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4 dC9JbWFnZUNdL0V4dEdTdGF0ZTw8L0dTMCAxMDMwIDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2Jq DTIgMCBvYmoNWzMgMCBSIDQgMCBSIDUgMCBSIDYgMCBSIDcgMCBSIDggMCBSIDkgMCBSIDEwIDAg Ul0NZW5kb2JqDTMgMCBvYmoNPDwvTGVuZ3RoIDExMTAvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJl YW0NCkiJrFdba+NGFH73rziP0oLGc9HcIOQhTlhSCG03gj6EUtKs4qasnV07JfTf9zuju60kuzQY HY1mzv06PqsWy1/o5GR5tbo8J0mnp2fnK1osP15LWu8Xy5X+Q5Ki6n5hHI4l4RUleVMKJ6WharM4 kVicVn8vLq6YcuCmem7gohouUujoIlV3pKSwiWNaME+lRGh53iSmiXHhGgG/Vz8dSdCdBMkcJRVK lMFRdX6g1AWsvP7r9mvdU5qO8htoQ6nJRiukpiKU0MLRrl789oG27bESMSSMFgFfjIDz5QqOutuT FEGXgFElKB3R/m4LYilUz7xUDvoxKTvCRo1T7QOgBPEMwaAME3yHhDFBsvxX/M4mMVau7ONSVW1w C6gg4QV40bdh4beRQXiHCClhXBuZTOVFyDwDKSmfC4tyfeihHBgEKF9S9bmjNgmMqY8jVL5zhFT6 tT7zVgnds4ySrRyctrzcfnnY1lN9lLOdRuzUbwtlIc3HGENoKsMLx5/aI9DQAPUhnSfvrFAG+7Gk uw14bySdP4JDEnUYGzdXM8flYp0XyIbEu5wrw4sJXzvxpS6FCqQs56LSHJnWVazMIHYqERkCgUF7 IY/qvupybWrNnC1TpiXHaZ7nsRH+/xsBoN2PGRHmjNANS93Kn2XI+LpreqwD0r8/lMKAbt2+P3Jb VPQM7CsuGa0thxzluDuIOwTNyeub5UwXjoMBXauSkRsPW4Gytk1NDL2A5WvdNFQoEJP0SCoKjwRA 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 PDwvTGVuZ3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UUDFuwzAM3PUKjg0y SHEzGgaKdPHQtKid7opEuwJqSqDlwb+PJDgJOpAEjzzckfLUvrfkIsgv9qbDCIMjyzj7hQ3CFUdH cKjAOhO3rmQz6QAykbt1jji1NHioayG/03COvMJL31d7tQP5yRbZ0ZiQY3X5SUi3hPCHE1IEBU0D FgchTx86nPWEIAvxCfZrQKhKf9i0vcU5aIOsaUSolVKvzb0g2f/zO+s6mF/N4rn9phqRtjc88/JN Dx9mYU4Wy+HFSLbgCB+/CT5ktRziJsAA1epqcQoNCmVuZHN0cmVhbQ1lbmRvYmoNMTMgMCBvYmoN PDwvTGVuZ3RoIDIxNC9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UUDFuwzAM3PUKjgky SHEzGl6SxUObona6KxLtCqgpgZYH/76S4CToQBI88nBHynN7aclFkJ/sTYcRBkeWcfYLG4Q7jo7g WIF1Jm5dyWbSAWQid+sccWpp8FDXQn6l4Rx5hV3fnw5qD/LKFtnRmJBTdftOSLeE8IsTUgQFTQMW ByHP7zp86AlBFuIL7NeAUJX+uGl7i3PQBlnTiFArpd6aR0Gy/+cP1n0wP5rFa7tSjUjbG555+aan D7MwJ4vl8GIkW3CEz98EH7JaDvEnwADUsGpmCg0KZW5kc3RyZWFtDWVuZG9iag0xNCAwIG9iag08 PC9Dcm9wQm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgMTAxNiAwIFIvU3RydWN0UGFyZW50cyAy L0NvbnRlbnRzIDE1IDAgUi9Sb3RhdGUgMC9NZWRpYUJveFswIDAgNTk1LjIyIDg0Ml0vUmVzb3Vy Y2VzPDwvWE9iamVjdDw8L0ltMCAxMDQwIDAgUj4+L0NvbG9yU3BhY2U8PC9DUzAgMTAyNSAwIFI+ Pi9Gb250PDwvVFQwIDYwIDAgUi9UVDEgNjEgMCBSL1RUMiA2MiAwIFIvQzJfMCA2MyAwIFIvQzJf MSA2NCAwIFIvQzJfMiA2NyAwIFIvQzJfMyA2NSAwIFIvQzJfNCA2OCAwIFIvQzJfNSA2NiAwIFI+ Pi9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUNdL0V4dEdTdGF0ZTw8L0dTMCAxMDMwIDAgUj4+Pj4v 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 OpAEjzzckfLUvrfkIsgv9qbDCIMjyzj7hQ3CFUdHcKjAOhO3rmQz6QAykbt1jji1NHioayG/03CO vMJL31d7tQP5yRbZ0ZiQY3X5SUi3hPCHE1IEBU0DFgchTx86nPWEIAvxCfZrQKhKf9i0vcU5aIOs aUSolVKvzb0g2f/zO+s6mF/N4rn9phqRtjc88/JNDx9mYU4Wy+HFSLbgCB+/CT5ktRziJsAA1epq cQoNCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvTGVuZ3RoIDIxNC9GaWx0ZXIvRmxhdGVE ZWNvZGU+PnN0cmVhbQ0KaN5UUDFuwzAM3PUKjgkySHEzGl6SxUObona6KxLtCqgpgZYH/76S4CTo QBI88nBHynN7aclFkJ/sTYcRBkeWcfYLG4Q7jo7gWIF1Jm5dyWbSAWQid+sccWpp8FDXQn6l4Rx5 hV3fnw5qD/LKFtnRmJBTdftOSLeE8IsTUgQFTQMWByHP7zp86AlBFuIL7NeAUJX+uGl7i3PQBlnT iFArpd6aR0Gy/+cP1n0wP5rFa7tSjUjbG555+aanD7MwJ4vl8GIkW3CEz98EH7JaDvEnwADUsGpm Cg0KZW5kc3RyZWFtDWVuZG9iag0yNyAwIG9iag08PC9MZW5ndGggMjE5L0ZpbHRlci9GbGF0ZURl Y29kZT4+c3RyZWFtDQpo3lRQsU7EMAzd8xUeQQxpq0MIqepShNSBO0QLey5xSyTqRG469O9JovYQ g2352U/v2bLtXjqyAeQ7O91jgNGSYVzcyhrhipMlKCswVoe9y1nPyoOM5H5bAs4djQ7qWsiPOFwC b3A3DE8PxT3ICxtkS1NETtXnV0T61fsfnJECFNA0YHAUsn1T/qxmBJmJf+CweYQq9+Wu7QwuXmlk RRNCXZTPp+YoSOb//GBdR/2tWBzb1WP72oi4veOJl266+dArc7SYD89GkgVLePuNdz6ppRC/AgwA 9XxquwoNCmVuZHN0cmVhbQ1lbmRvYmoNMjggMCBvYmoNPDwvTGVuZ3RoIDM2OTYvRmlsdGVyL0Zs YXRlRGVjb2RlL0xlbmd0aDEgNTkyND4+c3RyZWFtDQpo3uQ4a3AUx5lfd8/Mjh6glRBCD7BmPUiK tHrwMugVaSXtSqAFIaQF7/Kwd7VaPbBAOhDCCuAoEGK8GGUdu8Bn5wxx8APIxbMCfKucA7ITx6mK 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 bVYgMC9Gb250TmFtZS9OREpGREorU3ltYm9sTVQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxl MiAyOCAwIFIvRm9udFdlaWdodCA0MDAvRmxhZ3MgNC9EZXNjZW50IC0yMTkvRm9udEJCb3hbMCAt MjIwIDExMTMgMTAwNV0vQXNjZW50IDEwMDUvRm9udEZhbWlseShTeW1ib2wpL0NhcEhlaWdodCAw L1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag0zMCAwIG9iag08PC9T dWJ0eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciAyOSAwIFIvQmFzZUZvbnQvTkRKRkRK K1N5bWJvbE1UL1dbMTIwWzQ2MF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88 PC9TdXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEw MDAvVHlwZS9Gb250Pj4NZW5kb2JqDTMxIDAgb2JqDTw8L0xlbmd0aCAyMTgvRmlsdGVyL0ZsYXRl RGVjb2RlPj5zdHJlYW0NCmjeVFCxTsQwDN3zFR45MSSNkGCouhxLBw5EC3sucUsk6kRuOvTvSUp7 iMG2/Oyn92x5bp9b8gnkGwfbYYLBk2Ocw8IW4YqjJ6g0OG/T3m3ZTiaCzORunRNOLQ0B6lrI9zyc E69w1/eVvlcnkK/skD2NGXrQH58Z6ZYYv3FCSqCgacDhIOT5xcSLmRDkL/MP7deIoLe+2tWDwzka i2xoRKiVenxqjoLk/s8P1nWwX4bFsa2V1o3I2zteeOWqmxG7MGeP2+mbkWLBE96+E0MsaiXEjwAD AIGoauwKDQplbmRzdHJlYW0NZW5kb2JqDTMyIDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4 NDJdL1BhcmVudCAxMDE2IDAgUi9TdHJ1Y3RQYXJlbnRzIDMvQ29udGVudHMgMzQgMCBSL1JvdGF0 ZSAwL01lZGlhQm94WzAgMCA1OTUuMjIgODQyXS9SZXNvdXJjZXMgMzMgMCBSL1R5cGUvUGFnZT4+ DWVuZG9iag0zMyAwIG9iag08PC9YT2JqZWN0PDwvSW0xIDM2IDAgUj4+L0NvbG9yU3BhY2U8PC9D czYgMTAyNSAwIFI+Pi9Gb250PDwvVFQyIDY5IDAgUi9UVDQgNzAgMCBSL1RUNiA3MiAwIFIvVFQ4 IDcxIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MxIDEwMzAg MCBSPj4+Pg1lbmRvYmoNMzQgMCBvYmoNPDwvTGVuZ3RoIDUzNzQ2L0ZpbHRlci9GbGF0ZURlY29k ZT4+c3RyZWFtDQpIibRXS3PbyBG+syr/YQ5bKTAxIWDwdm1txZbsxKnYq6y4tQdtDhA4FBGDAA2A kpVfn6+7ByAIKbu1WxUeOA/M9PTz6+6L67zt1bffXny8/HClPPXdd2+vLv+wuLjsYlV02HBjP4t9 5UZJHCaqK+rFxV9vfHXfLbTvhqlKwsgNYxVFkZuGKkndWLVmsV28XS8u1mutfLXeLvwUlDyFQWs3 0yrJUtdLvUCt9wvQWnhqXSxWrud5Wq0fF45Sb03Xq+s2L/qyMJ3aNq26OXZ9Xtb5XWXUZdMemjbv jbppijKvlFqu/w0yK98FhauRVrHAxPct0R9Md2jqrrwrq7J/UtrzMr4HRkPLqOfiGvPKM8tu7Lu+ FnY9sEvUdUjUPaJ8C9LLVUz//1r/nQXCeS8hocHLKBxdodM3f1NetozcwPF8GVc3eWV41i1XgQPx 6r7NeaPoV9f2W96R4DzdH7DHj6Vu6GdaXmKp/fG5QJ6DkspaXeaHsoei/kG0tNP3pu1UXvNio95W efFZfag/M1HoI7b6sMrQKghg2STw3cw7KYLeC4b3AlEzidJZCYp+pt+MyWWWmp/BZ4QaEfATa7Ag E85J8FXkRk6+hEKdzq7UMnYTp2hkxargWQ/duZlj+LDqd7JbkvfItN1bC/nuYBx+9ySClodLOp86 +73Z2ClcrZLZk8pp4js13omcjSzUNv9KTgDG7ux3KFQ2+kZe9dxocK3IasBLRn2SxfToU44aNDeE UDDcDobbcQbvjMfbJ8t7gSVx+v20K/vaPKmbnamZMnQQWePyTCjGkZvok0W80FrEs4p5T1KSy3xq Xqs/p7HS6ZLFjyPQ8DUvgoDlfbdewF3CUMUpoj1U2g8R9AqvCUL8EsYE2vXBDgYPbwBbCDpSIjaA y8wz4wAwpE+IQmZlL3LeG6OuTauuTGXuYUYSHloXROJJmLgJKMAs2lIYWHP9INERBu1HCQ1RmDF/ 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 0D/uEPreIUyVj8Fdh9D2FqHtbEEur3mEK1/QrgfTJbSvsQlxLSjfj8uT3v4H8gRNXjycAgVs+xGF kj6iUHJzhYJICiU3Vyi5/RaFEtcGg/HlEqW7ROlTovQ3JUp+UKHkzwkUV0JXCuX87fTnX398O/0n wADD7yNFDQplbmRzdHJlYW0NZW5kb2JqDTM1IDAgb2JqDVsvSUNDQmFzZWQgMTA0MiAwIFJdDWVu ZG9iag0zNiAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA5MzYyL0ZpbHRlci9EQ1REZWNv ZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgMzUgMCBSL1dpZHRoIDQ3OS9IZWlnaHQg OTgvVHlwZS9YT2JqZWN0Pj5zdHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJ DBELCgsRFQ8MDA8VGBMTFRMTGBcSFBQUFBIXFxscHhwbFyQkJyckJDUzMzM1Ozs7Ozs7Ozs7OwEN CwsNDg0QDg4QFA4PDhQUEBEREBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMgKCglJSgoMjIwMjI7Ozs7 Ozs7Ozs7/8AAEQgAYgHfAwEiAAIRAQMRAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkK CwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEF QVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKz hMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAME BQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcm NcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eH l6e3x//aAAwDAQACEQMRAD8A9VVHO6z0zp525eQ2t/OzVzv81slW7S8VPNYl4ado840XkeRZdZfY /IJNznE2F3O6dZU2DCMhNmgPtY8k+HYPeW/XrozJDGXWRxDQAf8AOcFX/wCf+DP9Ft2zzLZj71w6 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 1cZuUbqb7Kayf5tmhg8tDvBXMvoeBlY9eOWmtlRlhZodeeZ5WikkckzWp02UIR103cjM+rmJk2Y8 PdVTjt2CpvcTPPZP1HoFOU3HGO/7KcfRhYO3PiNVrJI+5PTXZXBHXTdx8z6vsu6f9mpsi02Cyy6z 3Oe4Aj3H5o2L0THpxn1WudfZawsfa/V20iNrZmAFpJIe5KqvrauCN3TkdN+ruPh2C2yx2Q5v82HC Gt8w3XVFHQ8SvAvw8cmsX/Ss5d5eGgWkkkZyJu1CEezm4PQ8PExn0keq61pZZY7ktP5o8AsqzFw8 TI/Z3T912deNjrnnd6VZ5+Gi6LJ9b7PZ6ABu2n0weN0aKj0bo46ex1lrvUyrdbbPxgJ0Z6Ek/TxW yhsAPq2On9Ox8CkV1CXQA6w/SMK2kkmEkmyvAA0CkkkkEqSSSSUpJJJJSkkkklKSSSSUpJJJJSkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy qkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKq SSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJ KfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp/9kKDQplbmRzdHJlYW0NZW5kb2Jq DTM3IDAgb2JqDTw8L1N0ZW1WIDIwMC9Gb250TmFtZS9BcmlhbC1CbGFjay9Gb250U3RyZXRjaC9O b3JtYWwvRm9udFdlaWdodCA5MDAvRmxhZ3MgMzIvRGVzY2VudCAtMzA5L0ZvbnRCQm94Wy0xOTQg LTMwNyAxNjg4IDEwODNdL0FzY2VudCAxMTAwL0ZvbnRGYW1pbHkoQXJpYWwpL1hIZWlnaHQgNTE1 L0NhcEhlaWdodCA3MTgvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2Jq DTM4IDAgb2JqDTw8L1N0ZW1WIDEzNi9Gb250TmFtZS9UaW1lc05ld1JvbWFuUFMtQm9sZE1UL0Zv bnRTdHJldGNoL05vcm1hbC9Gb250V2VpZ2h0IDcwMC9GbGFncyAzNC9EZXNjZW50IC0yMTYvRm9u dEJCb3hbLTU1OCAtMzA3IDIwMDAgMTAyNl0vQXNjZW50IDg5MS9Gb250RmFtaWx5KFRpbWVzIE5l dyBSb21hbikvWEhlaWdodCAtNTQ2L0NhcEhlaWdodCA2NTYvVHlwZS9Gb250RGVzY3JpcHRvci9J dGFsaWNBbmdsZSAwPj4NZW5kb2JqDTM5IDAgb2JqDTw8L1N0ZW1WIDg4L0ZvbnROYW1lL0FyaWFs TVQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRXZWlnaHQgNDAwL0ZsYWdzIDMyL0Rlc2NlbnQgLTIx MS9Gb250QkJveFstNjY1IC0zMjUgMjAwMCAxMDA2XS9Bc2NlbnQgOTA1L0ZvbnRGYW1pbHkoQXJp YWwpL0NhcEhlaWdodCA3MTgvWEhlaWdodCA1MTUvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNB bmdsZSAwPj4NZW5kb2JqDTQwIDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0 b3IgMTAyOSAwIFIvTGFzdENoYXIgMTQ2L1dpZHRoc1syNzggMCAwIDAgMCAwIDcyMiAwIDMzMyAz MzMgMCAwIDI3OCAzMzMgMjc4IDAgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYg NTU2IDAgMCAwIDAgMCA2MTEgMCA3MjIgNzIyIDcyMiA3MjIgNjY3IDYxMSAwIDcyMiAyNzggMCA3 MjIgNjExIDgzMyA3MjIgNzc4IDY2NyAwIDcyMiA2NjcgNjExIDAgNjY3IDk0NCAwIDY2NyAwIDAg MCAwIDAgMCAwIDU1NiA2MTEgNTU2IDYxMSA1NTYgMzMzIDYxMSA2MTEgMjc4IDAgNTU2IDI3OCA4 ODkgNjExIDYxMSA2MTEgMCAzODkgNTU2IDMzMyA2MTEgNTU2IDc3OCA1NTYgNTU2IDUwMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjc4XS9CYXNlRm9udC9B cmlhbC1Cb2xkTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0Zv bnQ+Pg1lbmRvYmoNNDEgMCBvYmoNPDwvTGVuZ3RoIDMyODMvRmlsdGVyL0ZsYXRlRGVjb2RlL0xl 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 ReFcGM/eFbSWcAh1Dq0Yi/8ZzB1t71nus3uelUwx/1bPp+p9f2cdLZTPXUe58q5tu2iZFbGj/1z3 vyEzK8CaQPLz27QaQT+eTz/fc/e+l7b7VbF8I09+3/9YKTLLFPN/lFKMv0iLCnWP3XI7fAfemzTo raVB2YUZsnozb2sVWAtO0BrMpEMobcYr/JOvX83bjQrq7ESVqrXS6I7kPBvnupuhI660GdZ7rLOs adYZ1tusU6wpVg+rm9XFirMMVhtrG2szy8/ysbwszXgC/hbcBN+AG+BjcBF8AM4DG8yAaXAGTIET 4C0wDo6AQdDvtnmem7ZZ51jvsk6z3mGdYD3OamdtZ7WyBKuM5WGRYcBfgy/BNfAZ+BQsgg/BBTAP 3gcnwevgINjT3VwTqAlssnLa80aPsE4J67iwJoS1X1jPCmuvsIaEtVtYu4RlCislHpTrZUQ+IO+T 98qwrJM1skqG5BpZIYNSSr/0SY/EM+xUexOeRF9cSzgLg5TIRJzf+mI5Lbhzl1MWi2tOVYIST8bD TmuD4znmzmhy2vKspr06qqvJzCXStOXRCT1v06S6hr9v4ZK9RPLgFVqnbSKB/y3zYt0nQkX7ELXc qKWilhsNa3NJak4MjKXvp7s0/NemrZotqdmxT3U3mZqVFDd37GbPe8qD6E9aj5rxutCBNrdzW6Ph w/plH2nTVI5vegUmifcAlWpsb2xXKXzRVGqNmj/mU+HDW6P6ZW06nwohvBZD+acAAwCeCX5ODQpl bmRzdHJlYW0NZW5kb2JqDTQyIDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0 b3IgMzkgMCBSL0xhc3RDaGFyIDE1MC9XaWR0aHNbMjc4IDAgMCAwIDAgMCAwIDE5MSAzMzMgMzMz IDAgMCAyNzggMzMzIDI3OCAyNzggNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgMCAwIDAgMCAyNzgg MCAwIDAgMCA1NTYgMCA2NjcgNjY3IDcyMiA3MjIgNjY3IDYxMSA3NzggNzIyIDI3OCAwIDAgNTU2 IDgzMyA3MjIgNzc4IDY2NyAwIDcyMiA2NjcgNjExIDcyMiA2NjcgOTQ0IDAgNjY3IDAgMCAwIDAg MCAwIDAgNTU2IDU1NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMjIyIDUwMCAyMjIgODMz IDU1NiA1NTYgNTU2IDU1NiAzMzMgNTAwIDI3OCA1NTYgNTAwIDcyMiA1MDAgNTAwIDUwMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIyMiAyMjIgMCAwIDAgNTU2 XS9CYXNlRm9udC9BcmlhbE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmcv VHlwZS9Gb250Pj4NZW5kb2JqDTQzIDAgb2JqDTw8L1N0ZW1WIDAvRm9udE5hbWUvTkNJSkFLK0Fy aWFsVW5pY29kZU1TL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgNDUgMCBSL0ZvbnRXZWln aHQgNDAwL0ZsYWdzIDQvRGVzY2VudCAtMjcwL0ZvbnRCQm94Wy0xMDExIC0zMzAgMjI2MCAxMDc4 XS9Bc2NlbnQgMTA2OC9Gb250RmFtaWx5KEFyaWFsIFVuaWNvZGUgTVMpL0NhcEhlaWdodCAwL1R5 cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag00NCAwIG9iag08PC9TdWJ0 eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciA0MyAwIFIvQmFzZUZvbnQvTkNJSkFLK0Fy aWFsVW5pY29kZU1TL1dbM1syNzhdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZv PDwvU3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAx MDAwL1R5cGUvRm9udD4+DWVuZG9iag00NSAwIG9iag08PC9MZW5ndGggNjIyOTQvRmlsdGVyL0Zs YXRlRGVjb2RlL0xlbmd0aDEgNDE5MjMyPj5zdHJlYW0NCkiJ7NVrjFxVHQDw/52ZbZdXI09TjGGa 0KS1KS0tmBQltmltyqOUAK3GEMp0d3Z3Sndnnd3SLqgUIygJT0HU0pAGa1MQ+YCASHhERdSkBROC BDUkKAp8kJhgSKzS8T+zWyymHyBGP5jfOfu793/OPa977t07UUTEUbEtyrFwzcULFo3+8YkXozzz 6Kxd13flePXsi05emeX+iKO3DowODn/vjJFdUZ79u4jpGwc3TQyceObb67Lt42nFUL3W/8yMU6pR nr8qyx8fyorjbn72+Sxvy/KpQ8PjW9s/+OHTWc4xjj91U7OvFmd8OsfORZSPnzNc2zr6wq1HfCWm Lf1Ftq+O1Ibrb35y4tdRPmFOROX3o6366Bt/2L4+r7+ewz0cpc7ip8e07J2njyw9anpRKaKnfEQl ej/08r78iwWL9y3Yd/rCWcfOOnZ2HopsvH9bT/y9c44MptIKAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA3nV03BlFTKbH0mRcjhOzNBlXMn5uKp6W8atT8fToi79ly6gckTUfKy6diksxo7h+Ki5n/R1T cSXjJ6fiaRm/nnGRcRTjpeOm4unxTPn6FY3Bxnjjqnp/tb82Xqv2NUcnWo3BofHqnOVzq6cvWbJ4 /qKFCxdWlw0O1KqrmyPN8YnRenV5szXabNXGG82R06rLNm2qdruMVVv1sXrrynp/VrYatU17qo2x aq063qr114drrSuqzYHqJUP1w45T3TLU6BuqDtcmqhvqOdBgY2y83splNUaqffXWeC3PGze3GmP9 jb5O+7HTLlh+zrnLzpvXnWntSKOv2V9fffH7r/wfrDAuiOVxTpwby+K8mJfHVjSiFptibYxk1BfN 6I96rI6L46I8D8bmvFbLVu+/33+j5YosD6bxdFXW9Uc11bJcy6jTcjQmuv0HYyhrqzEnx56b59Nj SebFMT8WxcJuruZMgzHQ7bk6e46k8ew9muNWs1czxxntHmvd+TotTuv22pS5esgsY91SPc/1PF/Z Xddky4N38kCWGt12ndnGu2N27mm4u6dXZF0zV1KNS3K8+gdYTzW2ZI/OHg1l3BltIs8buj1a3efW mXW8u67J3Wp0e/V1azq7NlnemM+31W3b3x3t4PhjeR//H3eRn5fy14pboyd6e7b3LM7yNyfPpSNj oLS1t6d01LRKqZMq7UxvpGzzqc4HbvWaC9bE0qi23+l5/sBFxYzem0rzLj+7mGwxlXoei5l53N05 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 5V4RvNwGX4LRO+T4njfcDt1X/gwtn2fw8x3DeXe/+Dd6GDAP+fcKWS/xvXWp31uXeN3y+KZ85/MB evnaos7YvuLv1m/tKh6qf9iHhzI6O4Lfh8ineu2EPdWsyrcTixym/KI6vAzv7kOqL33dtoj5W+Ci Xu0Aus7TU8YJePkZt5MvLerZE3DfscgJU+ZT7qmOVb5wnJRPpna9vh2zLlvU3tvwVYaen3Gf8Xje YZTApWLRZ6huG1nkUr11YVFHdaA55kwfOb02XmJfmDfTWn1RERozu87TEJyVu8YW/VDRon64gI7q AOWvhUWOVl2p+uMmP6rJBxZ1j5/NtZL+rcCreCpa9KUP2LtvV/Y24J07CTv1X6q/9c6Ys6qFNNSX OH3Vj7+3qP8ls2rWm3crSYeirbzeTLgNwKyEvAuLnC9di24dXtb4rjGPEu5Or8qe+q7M27FFX1Wx qOlGCW/l0xFvrDPUF6geVv22CpZud3fRx132l9IoMR7Ar8vjPniEbvctakv1W1vMO+ypN5R9ltCr /E+62WCeck/zJudq6Z0a/N616DM7rFW7qY6bpbf1puNSgPcjC/8tw5uwL4LbNPGsHkBjZGErNfbq rN237yWM/dwa/1YZrqcVi/pxwJmWRc3dgrf7FvFDcaxjYUM9aO8kGcS/aoWSRW80RMYWsqlHU8we c141cgM9LcFrlfdkexWLmNAF27FFvJLfdi38LMvZT3KpT2ryhuJngTvO96aFT/XgW7ayji5W+H5o YRcr0Bnwrtv259BrJezK8DGAnmKTYueAteOxyzvqP9q8p3gtH1AcUj7tWOTTEnxpVl/j55YtfLqa 5Mx5TbFOfecaOimmIX6FcY092dAYHOqsq/yr3ZBZWGmWHZXh2cc9+FliXbaIYevsaW6nM5+kuxus a/wrIpd88T7re8zyr3tgKNwLjHJaq6fzt/vQayFzIcmg3lC5Xj6wnvgaQCvHGuUIxaUh/Amre/BX tut2pVhT5dsxW7HwQ9mN8tZW0qPTlJ2v35C/CN/qY113n3JuI83Cqcx3kfcVD8tp3rSwUb83S/dX 0v5Koq/Y0wBTYaLY7GcO2KskHbuMU/brCcM1vucWOSvrwOeHCSPVE+JRfqK35Serif+mRf6oQmPI usL+7cTrbYs86usHvFWC14ZFDNuEh+2Ee4V7t3l/Hdm1v5xwqMO3fE/6dZpddLWf+NlKNGvpfoU7 hRtzzcLnauyrnrhp47LlHvqR3Qm338Gj4phwlg7Lacjvl+FNuUjxw4fikWxQfiMbVF6tWvjQEvwV Lfy3ktaip7yjf7W0t53ur1vE1X6STdg2kp46FrW0+q6ahS+ohp1axIMVZsUt9SwlZuVjt6M74N4C 001k9f/qI+SX4q+e1pJrme8l7rWRU33CetJTlaEav8X/TbCr3DirnKG9Zejf4V+T0eD8KnMTWtWk H+HbtYgxvv/3pDfZsHomXw/gtcgd9UqqOfyNDYsaWtgrt1fSWnG/n86qtlWP9QA5JbewEV/CTfdr 8FSwiAvO03349fOfWviSMNhANulC+CqWSk9LzN10P8d82X2umbNvKh66zIqD4mWHPdVmQ+RXn/cj 599Z1KrfXo5T3v3FruLVHPkrvPOBO6pvCux77eX5QnWo6vkZZ0/473p4z5t9cJEeZsh1YlGjOd8f LeKn8smUb/8/QcfHFvH4CN4HnPW9J5fjB9a7nGmCxzR999Kdt7zTZag2d7lfWNTTzy/HBWfVOyyQ U7XCkP0Z9E/gt8PbB9Aqw59y5IRRQme7yCabecSe+hDF4KZF76UeYcZd5eAJczXpcWTh63OLGrfD +bdJvh64vLSo2WWLsvMvODthXvD+GTjMwc5pvrkcjy/HU/R5zP8OWDqve9BwzF6j1xb/nye8njHL RvTOIH0fgskEfl9Y9HQF3upb1J3nrAuc+RY62eel0z40nf4+sua+T3Wa66+e+JCNuT18ZVc26zx9 dzn+mfQ5Zs69huRQnnS6n6CjBrpVL6Q+yecli/yn3DvgnuL/qv2/R/zNOe/3mb+B7hlyrFv4wxh9 HfC9D66qYc+5u8v+IfJMWX/GmDP2OTuDx4GF3SlO93nzhP++drt6w9kJb5zx/tzCLxXLWon+iO8h Z6Zgt8c9+bry/hHzIRjucGaAzH3ODCzi75BZttzlvst0yv0ZQ+9WkWWMrC3kKbLf4q5qokXSuf/f YK+V+DzEBnY5I3llt87/F7wpHI6TPibg+hm8d+G3a2FfQwufeWnX47tizV8TbcW8EWeP4dX19Iy3 G0kHc/hzWeQjI773kpyyJ+lVNjBBP+qR9ixqsAX8dJmzPeAfv9I9gs8x5xSjL1j34WPEOzvQ6FrE yh1oCfd50pcw63NvCN2GRe7r8v4FPCq2SU/KL3N0NuLcKOl+Bh+7zPIH8SZbnCO/agD5vZ9vMg8t fMBzfh099KAvnrvoTX65yxnVgqornIdT8FhBnj68i48mOB1xfgL9toW/byY+BtDoJbnkd9L3Nv9V f4qnUaI7tfBt6UNYq77z88f8m1vUbSPkPwLfITw/trA1+ah6B39fcUvxLdcdzscydOQLyt9TC1tx v33C21voUPZwiqx+3u3lGwu7+hwehpx7lXDz8Qw6Jxa1yYDvr5FlAz5OGX/kDY9nVXjydz1Pyy8V 25zWBRg10WndIt4+t7CHpoV9yBe3LOzo3MKWG+Co2ki1sHSpmCW9Dy38/hwslSdbFr1K+8a8Z+Eb qgUmFrVbjmN+R7n1VeJJNug5UHFVPG2yr7yj+NiD9gHYH6OTUaI5tKg5Dy1izTD934DWAtqK/bkG 66A71Z/KsYqBPc7NLGLpINGRTpwPr5vO0lAOEK/74DRPuhrc4Ev+0bXwu1WLnkRy5LwiX9EdyXds 0SOcJFxkP4q7A+i3mXtpX/ofcr6edLWd9KJa3mmrh1R91OVsjitV1g2LfqdnUbOvMaZpyN8XFr3o GCx2Eg3lUsVHH7WEker3XK+q7lffpZypOlU4VJFF9tZiXreIw4rXHYs4rLX8v8Haxxbv9Bh+rmkR Fzs3sDyw8A3V1crXR9CW30kvypdOvwzNhxa5YI7uhX8LWTUr3vYs6jfFevV9ylF+3+2/bRHrlJ/9 3wZrYaA+QDQOLOyilt6SPzQtelj1uy6T8neuYRXnjhJe2zcwGvOvzj/RrlnEcc2q1QvcnVvEa8U1 56Vo1/2zY1GrNTknXi/AS/3smV3346FFray4r6E4LBv1OyWG9pQPh5xVn9NOa+XajkWPpThY52wN jFX3qMYrIWePsyVkFx+Kax4fD5P+9izs69QiTvjea2iecscxug820qXTW+F+NfGoPuJLi7pqB94u LHL9BvI8hp8+b29b9GJPkfGcc48YuWdQ33HG/pZFrpT/q0YawKv8e88i/1ct7EX6kl257h/An3oO 5QzVErL1XsJF+UPYKlb2wNHpPrHozXKtK5tXDSvf3AO3VsKhbuGP8pMt1rLPDjQVR1XbyP+ESZu1 bKptEcuUM3VG9q++QDwonyu+DuFbPUTuFYRlLWEwTjjLB51OOeHXS3daFr1EhXfq0FDukJ/0eUP1 tmrMiv2P7fKPjDtP4/jN/vU455z7b/8499epqoqIURExxBhjRIwYETFiRIwYxhgxIkZExKqqqgpV VXWqKtaqtWqtFaWqoqrOqqqqVVV1lrPOqnN/nZun83rf8yR7f3x8vt/Pj+fX5/nxfiL3KHbvW9QH yeF0Rv5YOIf8W+ikntfHnbSuHko5bo5ZPild/JxjtOvIsn1qXEzfaxZ1Sf/C/7vMz1mrWtS6Tej3 OOdDfZ7+1ecKr6xxVxgq92nCN8KOyiuip9ywgL6y8Qx20H7HAptsWeSCJYu4VM6pIFvLAgc47cP0 Rsq7uitf2rWoT8Jfy4xKol1iOK1i4t3i7BJ2aljE9IJFLlKsCIfULWqz8o6f93xYTnIL8+6m70Ga uxa4cIt153PWIjbkr54rPsBTtaSZ9lWv5EsZcy6kb8eYV1gTzptHPvVu2bbbiZ9sfcWi3qrO+719 i1rl9N2/1DcIC6mu9BNd1atFC0yxCC/l7AXGqgVebVr43UVo632c9iX21hMv9RDCK5JNviGsIz9q p/0Vi15BtWHdota3kGvA2gAaXQvMITuo7xH/rcR7M91ZgsYGugq/6F3riabozlnkVdVyyTybbKJe NNfqGveL/At/zKPbEnxr6e6yRd4XLdmjmt5MMbVqUXszdqvDT/X1vEXsC/OLl8vyFTKopqoPKycZ lStd7x1o+dy36D3U66gu1S1qr+yyBy/VFPm+zgws6r1qg/CrMHWfdcl1Iem0A33VDsWCZuWibpKv lobsrSHMKXzk8n8J7WsWPYTz7CCfx7XjMo/jxzaOH+EixetF/vV2ueaphq9axKDioc1ZH39h1Jnn OOdyTvBd4t/l2kb/UT0tzFpgM/WIwqQZy1cscM5li/wn/NK36IHUF+pdD6G7ZZEnivBx3YXxOha1 RNihiR2Vz3ew2ZRF3+IyeK6dtpO1URjCeQ+ZB2nN+Z23wFS72KcMTfV/M9AuY0P1WH5mhME/+z30 hxZ9y4vROLaxvwwscuwMNFrQEe4+4n/RAntNMkvu67ytapR60hY2usK+sHDLTuIIl089q9O8it6K yVWLute1wBD77O9b1Ma2BeacYSjX+dpZ1uQPfk89Tym907xFntN79yzys/xCdeYLRgtb+XrfIj7W eMe/WeS6iaSPcvi2Rc5WDVCeqEJjme8Vzh0gk3pLf59NC//fsfCty9ihZoEDBszC5LPYyXWY4u6s RQ+qvFdPdmxb5CD5pnKYYu6MRXxobFvk8gnOq76rTqrf7ST+0l1yZExSZP9zG/u27DhAj5ZFfq6z p55SsVW1wCjL0BY28fXH2G8F+zv/f9q49/CYuQfNa4wNaA84m23eOzWEM5R7Ve+VV1rMQ4s4y3hm yLvr/AL2Pf1uG9yVj8qv9i3yvPDtRUY78eymfdmoZxGLlyxqWYe3Uf7MObyT3nkL+XsWtXYx8fac 7DEwlUbbIkYX+B9axPdCGqrX6xY9QI37NYv+R7lRZwbILmwhfF/FFm7vWQscKMw0sJO5bjl9627+ Vw5XD9Tnu8v3nAWm0bvtsX/LIhbVY+W32rPw/Qp0rkFf9U/9V/mUzE3OC38KqwrjLDKaieeqRe+j HJbzod4k+7DXilKypXrbefakh/xzj3epsa9617OTOL7LGZdPMZTzqnJr08Jnt5BP65sWvdhGWlff 1UhncqzVk64d9Nuw8M+hRSy0eWPh2ZZFHqonnmunhjCqeKuPExZTv6d3ke7K27vI/5VFT9JFNl9X X6R8lHGrbKheTphuGrmEn1QblGfljwMLfL/K229b9JfCvvJn2cfl+NICF9csanEDe7ndXtpJDL3J /V1sdJP1Z9wXnb9a5BO9o3LFLHvO6xg+Fezga69sjLGvYsN5ZHU5JznrOc1jymPtlkWenUu0bozv Fwwaim2vOdctYq4D3xtjvQp/toi9kZ0LfxiNz8frhRH/wsiOhYnx96eaNc/9N9jj6dgehc9sjFmU V3z9u9H69Hj+9F7PuPdkNB6gS4//dzauJwcWPa/b4+GIhsvndfLtaNyBr+OG99Dws7fHfAveP3yN 7d02r6H9rUV+eYLOh+jjtB/ZOC8ccLaMbIfwfAGPY/TsYcMj9v6BHEus96D53Max4r7+jUUN8/1p /i9b5PJteCuu3fdraV/9lOI544FJfMLprljUbdXijkUOVX9wgVG06D8VD05jCtrr3HP5GonmIjx1 vsG8DD23s2LZ984gp+pfhe9Woisc07bImRcs8rJybDndd54DzpawURO5y+zVLWLa/eesBYZUXPa5 p/5zIfGtJdrbFv1DyaIWSt4F3kzv+CdortrJPC/8L+zVgFeDs8J4eiPRXcKOegPVV+WDOYva57qd h06TtXPQEwYuWuQH1XenMYFcub9VbVL+m+f+DOcn4FFO/+vsZwwzQJ/JZCfhX/Uo6itUj7vMuY6t oc8K9DZYn7LAz+pDhYkXkUc1UFheWKuOzc+hi8fxXYawCJi04PHu+e7vo++byEg+/pQrPA/sc9dz gOfAj9hnRLfwRxvnyPcW+Ex5w4f7rOe0h/y7/J53frJxbvO85T3FBxvnpyOG59g70D5kDLHDU2Q5 hEYXecro3bDwbfVDtWQr+ZHyidv8qp3E62sWvYd6VeUP4UT1u30L31OeGnJ+j/dwml/Aa4eze5zz eSvx3UKnXeaiRTwPLfx7a0yzcA+b+Hv9Aj1/J+/fvO7cZF7mLX5m/zl3Lo/PFH4L7Y+MJ7zFR97j Ifr5HcfU1zlzn9nf9DXnn6Hjz4neEvK5Hf7D8H/HIPvo4P5W4Z7L73Fxi3dW7X3A3gNo+HyXWTXT 9XsP30e8gevu9e5lovcKuz/gjOvm8XnMuTfI9S7xfsP+c2i4bT+k/1/4fsX6B76lxzF3nO4Ba3qr b1gfwP8lNI/H2OZ/9jpCr1Hc/uZH5DpKs8ab9P0e2m/TnvCG+/giZ1aQ39/7Dmdd5n+zJt7fse6Y o8dbfI8OLznn/H7iPb+F9xtkPsYurruwylt0eMT/DxZ5QHp+Dc3HFjjF1+9z/jV7r6D3I99PkcHt eRmeHd6gztozaN5C/nuc/55vp/ECHZ1XifNH3HUatznv/w30vJbe5wdoCW8PsbnnLI9Rz4keK3f5 9jzgMZF7rQucV3/q39u8oZ+9xLkdZtUX4YcN1nXH33/Cor57jlPdXUcezzm53+oir3q3ZejOWfQR fu4cPKf5L2IXr51t1hrc68BzhfUZ9lxG1T+XT5ho3gIvCqNUkWUVnZbQs8ZeD7qlpFeZvVmL3qsK 7yq0Ghb1vIo+qi2ygXhMMQvzzJxar0KrnXg0T/Esc0bn1zlfxoaSSbpvpLcSjqqn72r6X8EmVWST HYsWWF39ZiPR7NpJHCSfFd1Sop+/hXMzPpn4P3rPo5cw+xw6K0ZWsPsqs+xascC+4iGfyvJOcWYG unrzOvKKf57nGA30cB89y9oZaFUs/Fh8p5hnmJ2++gf1KYsW/lvnjvypZIFRlpHFdRT2FiaetfDf sgV+bqQxz7zJPGvR3ygGbkDP13v2655IPi6fq3FWvlK3wKb5zaWfcLXoNtL/eQs/Xknv1oDuKu9V Y6/I/zZ3hefFr4j9/Hs/vbXzG+Xmwjv07mFfz2u3LfxYQ/ZW76r4Vlyo31HPVbHwQeVJ9QvykwML n/K9PjJ6zh4me8qPleeuo4fLcSF9t3nP5aRnk3vtZLdp7g1YK1n0F8oVeqOMlYWdFXtz7Imuassq e8v869y0hb8oDlzeB0k+6bCOjdbQ3+8LJytf9qGj/nLIet0if/m/Yk29rNv9X+DcUV0t/M6ihxV+ lz2kb9Mi76qeKR63k53XkEc5Qv5dt8gLeX0dOf2O8LzOzZ+617HIZzX2KxZ5eQ1dldNLic9F7rYs MIZ06lvkjkucb1n4+CLfbtNd5J/k7gy266QzDd5aveosc5GzlaRHE77ed7lP3oKu7CT8sMm5Cjbq 8xYV6J6Dh/o/xdUZ9jUmGef5V1wLV/RZkx7qJfUWNc6VWFe9+C/b5RfZeprGcdmr53IvlrXmaqxx jDqOqqqKChURERVRERVRERElKioqqiKqIqqOKlXHcYzjOMYYxxhjr+ZmzNVerLXXa429WGtv1lpr 7dXaPvL5nudp7cXr9/u9v/d9/v/5Pk3ed9FXum4mfzeTXvqv3rLPnmSvIqN6tuKtiXzOc4idlVvC IGs8lWvue8emPYtYFgZdWMy4vk5ZZ9jc66Ln3U/Q87M+d9wij2P4Cwv8/B6aPtu9ssilLXT4A7LO +ec07rDBK4uaofl2juz+fwLdM+icYD9h0DHn3rPn5z2WNNuMkNOfFf4PLfroHJqym/LgDXrPuDvA Ln7/R+h/w92+xQz1la3yUHs97p+hcxdfLCxiSborj4VTrzgrn7zlXgdeS+i32eulVYduAxs1kOcK /Y7TUh05tOj5dYvYW1r0pDo2OUYut+09Mlxa9P2yxeyRcUDHor6eJd8cseTPDnxaSZd2ktn/qcf3 OT+GxzjpcYAON9zbgo/qUckCP5dYXWQ6R7dj6Ll+pxZz0BDa6vXqDap3I4se7bbSbCF/qd6rx8pf qkGa2WT3lkWt20OWGfocW/T8dfgLF6mHFZPcwpYun+YJ5dUW/5SrqmM1eAzheW1R53oWOFkxOMf+ A2yp2a2MTBN4Trg34p56RA9Z9pNtNCO6j1W//HsBrWuLvtyx6KPKz/aTNbCIK5djmZ4zi3pTRj7h xr20Jyyt1eHM1AIXqcfUkGOEHWWjHYuYv+W/aov7WXjY/XGDzBP4lNF/YY/7mebBAc8D7oyQTb51 PhcWdUpYV5ha+SXsqPw+RZZG8muDZ9Eiv0+5p3woWtQOYdETfD1FVs0cPYu+1kXmI/hpRhU+7ydf trDHC4v+e2aRewfwUw3x+FS/Hz3heZB4KH+FTRRHfm870cnzg/Cp5i3Jr/xqIbvwWZOz1UTXcUGF M034qC/soUfRIp/K9ngG1AygPOpxX/mhWqOZV3jS1zU2KaJrD582+Kc4U62WzYb866Jzl70B54ro 6HKMWU1k9zx4C79qopH73Ag6R4lvy6JGKTeWFrhVmFXydizm3jXe5xZ9wc/uJJ+IlzD6DjaQfzWz Cburt5YsMMsJtLfRs8l/zWL+z2P3jH/ivQFtx82aj4Szda6O3uoXmuseeBZ+j0wzi9op7FHl+bWt 4kez7HV6P4N2Jemgfq9+t4c8FYt6U/k/6x55e8g0Z/+SO76+tBVm+ppnNf1zO53j1yF3Z8hbs6gD Vc7IrsopxUEP+st0poIeLv+FxZyguUj4SO+a54Q/jy1qWwU51eNq8Jnw7v9VR8X7Al30X7PuPt/v LXrv3AJj6K56vvTdx3dlvtU/ncYO57rIrVm2l2SsWdRb9bhz+Lsuwrt6CsOq/9UtYqSS3mUz7ffS uzCc8ITwjvBEjqVGolm2iA/907lW+h7YY5nUk0/Qt4N+sqVqheJ51yLnKsne4jlK3/Jth6fbecl7 0SKnKk/uqQeN0Utytp/4ejfZfd0ibkacd11n2HDImWFa1US/nPywzrf7UPn51D978JgmewpX6r2e 6Eq/g8RzPb03sId6uWrMLPFQ3KgGKUeEe6vIp5pVscidHAv5fWiBPbLPKuz3LLDLxALja65SXone dtKtbVETFQed9C0cusldYe069zeSPvJrA58Imyt/VA8HFvOI8GWOQdlK8axeJpxRw77DJ7YrWcT6 CDqu+7Pkc9HfZV99qpl0fGYf++HPvO/eIss9T+Hbc3zvuS+MfmeBc97Yqh/6+wIeR9DbR4ZXnHef qu/dJ17qU1rVRPsMW88scO7Ios7vp3steCwT3decF49p0tPpvX/C+w7fCXttWMyi+4m367jNGY+D y/RvwJ7kkJ/7+GGUaI7S3iT9O7LABeLnT2Ed7en8NL0vkr0qia5mysxD2FLx5u+qd1mejKmEMybw GT2hO0lnnGfuG1O+31ng2D7nDtkTphXOFOZ0m95a1KIri5xy+v94wFgP80bhVw/vf7NVff6zxUzq /H9rqzh5i54n0DmE/jiehU9thYF8r2gRO6qDfu53toohj7sh+qguPpwt/BL6Hyz65D40asjncv0R nS8sZkW3nzDGjHOuv3Iiz7oVfHNsMU8Jl9SSb54nH7XQS3itbxFnu9x3WYXhevYY3zvtskUvUm/p WswMn1rMLsPEw897rqmfyv9t/vt7ySLH/2oxt7YS7xKy+vJ67Xn9El5OYxNb7GKre4s5S3kn7CF9 /bziRHj4u+Q3YXi/47VNs4Lua26oW/Rcp7nNmSl67XB2YTEbrnFHNa9sMQM2sZ/T+40F9hyj74z3 LqvEqlrgyK7F7FLivQ9f1TvdbyTbqSc9nTeEv13OF9hYedWDZtNivixi127a38OffXhW+R5gF8+p 22S7IbIXsUHfIr9rFphngG0VK/o/sKgr/7LAo7uJ7356H+LzjM+UW5ox29hjxv8D9GtZYBPhaX2f cu+O1bHHessPyrV/ousV+rst/g4Pp/t6Zb/CL2wVVw/yFH7Ou8fwS+ylGnGGrE7rOXzayCesWrTo 2cpvzWbrFjnh/z2ev0fmI3ypPPO9E3j9x1ax4uu/FjG6tdKz8GCHwhH2qPPMOGsCP2GhIWc01wkb HLDfsI9Y52O8Kobr8HY9vYZ7vBzCS7PWZxa5VIFPFdtV8ZXi9ijtdXnecbeLPH10nSO7MHMRmmXW nQVuU8ycsF9Gtjq0hXO3kG876e9LuK+c+Auvqi8pRk85dwBt1VnxcvqX3CslXlN8uvXEXqXEv5L+ veBu6cnqJp6qi7sWvWGNfy7rn7CPbH2Av4rwzHQr8FQNLGGbjKlVF/35DD0z7i5Z5Mw26xD7byLj abKvcqCF3Gvc2UzyPWdPeaK8VI3qoJPmgFuLOPZ69gP3NtK9PHfUkaORdH8Gz32LHPmM9zLvuudy /hpem/AdW8TmOu/KU/WbpkWMqeZvW9TLPc5VWTvwFt+BRT8UhlGeNeGn+x3ou87CAzvIM7bAGW3o qRY3kOmY9fC/4Do6rvs3vizx/nCv4DX2W4t65rp4THqf/AnZHdtOk500O3X593Cv8ECz8An3vV59 hb4u/wfuXELbZb+ClvcXz//XFv3h3CLuOhZ9dYJ9lKedxMN1nxMLNxbYa2lRK4/Tu3Bd3QL/Vu0x phUvx1hD3lWzheN8FblzlPx6b1GTG9huDx6quTrr915ARzW8xlMYeNMijmoW2LqPnjWLHuF0Pkc2 1cFKoi9edYu8U9/4C/5SDepCVzNRj+9DfHeNHAts63tn7J3gy0MLHOo+em8xY055XuCrK3h9YYEl b+At2v58me4tsNMY2YQLZxZzh8vg8dOBnvzxLvnIeaoXCUcWoa25zmX7EjlP4ek63Fr08R531N80 i8kXc+gsoTllr4hO50lXzTU37N1ic/Xal+h/xTqwmDk9Bt+yJtx9B98x+wuefvcN9jnlvvzdQxbh iKFF/roebYv6cJLuvbOY2ybcUw2dWuDZd9hfWN/tv4Uc0u2VxTxwjk0WFjF1hszSQ/Ob+H8LT9UB xXCfM1Nk1xzktvL4+MD+gj3l1Dnn1tBN8X9pgYsu2RtaxEkZWY8t5qAri1xyn3kclCzmUNHJs1cb vpsW8eP9Qb3He2cl3fV7dXRx/19Y5P8XFj2uYzHr3PE+Zd953CR6E+xX5dlDV/Xga4v5YYisMws8 q/oygOaY5yF8Gxaz6II7r6E7sugNLvfnFjFaT/Qm7C3gpT4j/11jozZ7A847L9XoGUuzhPDyJfst 7kkW5abb6oNF/fN9j2mvDbfc932PV89j1SPX4zvOaBbUfHmD7zaQ3X35DTaeW+SV63IFrbfIqBlp wN1b5L/gbCP5v53sdIy+PyLDnUVtk3+FDQ+h3eafbN6G99QiJzVLHic+I+zRsuiPS+ge8G+JDhvY TDa9RNdassMQG/6P7fLrcD1N4vjuXNU7WHuxF2OMMcbR2tGOiBYiIqJFREREREREhIiIiIgWrbXW WmvtcLSjtWOtNdrYq3XsG9iLtdZe7eVez91e7QvYKfP5blXaXDx+z/P8nqqn/jxV9S23jd6Qj0d0 aXPXM3rpParn22LzAT4Spigh0z36PlvEisu85FwV+jk8anyFI/sWWNLPlS1qmWL9xiKuhGsuoJ1i 52ry+Qt8hK+f+PcM3fcWsXnOvI9/lFfaFjhXufkauz0m//n9x/C4s8hpW/zwnjG1qBuKVY02vhRO EmZYwEt1bsZ3ZJGnX5BDMT+3wFTXFvG+Qv8G/I44s4PW9fb3U7TDGjawiNMFdrq26LcU98JgY4s6 rPcr3dXHLNBD72FrkdsHrIUfLpK+/tVbUE2toJNqip9Tnu0lHzfQTT2KYm9ikdca2KLCHSt0d30v 0VM559wi/wqf+nnhJ71bt4W/lwd0GVu8vR73DOE15i4fTfQdYo81fArYpsQZYQr3z0dkkN0vLDDy mn+KTWGfDbZQbflk0We4LmVk63HnFfvHFjlddf8OmSrQrSz6CNXNEufUizTg9cTZCfNd8v3cAmt2 0h3KfWfYc4U91DedI9ctdihb9IwN/LPl3yz5YsG/GnxvLXBPh38ji/d1Y4F7PyR79i3wy5z5CHu8 Yz3A5kN8srdD/KfY3llgx0uLejDFnrpT/Znyfovz6h/OLOq88pJw4BQ7DCwwSM8O35Ly7YZ94Z4N /7rwWGFvxabr/GiRu93uRc6oX1zhY5dfvYT6zja63FjUB7fri0V93HPug0VMCeMoh/fRvQc/1RD1 uA3476HpJBlX+EY4XD3P2KKP7FnkOOGqOTZqW+BsYYA5skqGJ4s+cmlRb4WxJvBZYUfVqzt8K5y6 tcCvwt4uw71FndCesKLw1hw9Mn5W7lJev8Q+uYa12BM+L/Ovx12+vrWIyVvuX6Kv26GW+DSZt7jb 10XuL8L3FJ+53kfQz6EZWMR6ySJ3tJIeLe6VL7oW2ET+m3J+aJEf/Ou5+Dt8ovw5QM+MBzcWuEX5 bAhtwwJ/KG/X055yr/pH1fe2RV0Vvx62LHLPDD267E3h14RGtc/pztIQdlc+EdYfWtT7cdJLPZVq pWr+Eh5L1up52nYY56qvL+wJE68s+sRp4iGcuuTMCbrKBi3WFxY1rwHtNOmouNlZYH/X7x383Q8e 76fM19h1Z9HDtdKdbg+9/VuLnvNPyHOHPLqvw/lZottg2yL/nW8ZXeoWuWJrUT+c9hE7DKF7tIjJ ukUeOLfA2SP02FrUwaFFbykfb/CtcKHz9FpVSnZXPhhY4KK/4M8FdGv2i9ilncYIvXbcI3w9hGaC D1cW9V91aoT8VYu3pjjTOz+3qHEZuyo+ZJsK/ixa9ILCWBPo9E4Wdhg3+u/8PyH/ziIPtSzyqOzc s6hvl/DWP70pnZ/wVW70uz4i8wdol/hb49YC038FL72vE4t3PGBU4S3sveX/99AJ46unqFj0LP1k B8WL7KdYbVjkshZzj68Zd1ctsMyWe+SThQWWld/Uq6lf+cx+Jd1dh6/y0izNexZ4pYssXWyr99jl vlOLvrCOvjPklU3kZ+ncheaM/57r9tB1kUs8cs0SjXqACTJWLTCe8njPArcId6kHXEJ7gz/7Ftjb 35vngiuLPkb199Six1JcSQ7lRsW1erM2Zz5bYI4q+njP+xY7nSUdSsg1hV7xqtjVey9y75hzx8le Z/BqIH+T/xX+/bT/xZcWfVLb4r3VLDCe6k5+x0fwUYzs7RCLuXzC003o3DY7bF7Gll9aYOXXo2fR W5xZ5B/x71vkx4EFrlAe83WBr/LxxOKNCa8s0pglnerpTv1XLpRf6pxtpPNtZK4kWQvpfCeda6NH wQIDqF4ofzbQs5v4LPnWLPCe6neOGbfzmnMVhtN9iw9dt2OLuC0x9GbHrBcWubNqUc9qyReqSeoL 9W4LFvizw6imkW3ZssCm83RfI9lYMV9Ody8ssLli9AjZ8/s/snjHI9Z658eccxqvAd/YYaxJxil3 +Pgt55Wf6/AURuswFw53Hl9Bs8K+ZYvceJTkrDAXT/m0A59T9k+QW33mwAJ7SZchfNSHvuOM0337 yj7K8218J79XknxTeBQZbyzyVinN9d/zqddiYT7HYcJWbmN/zxcWONJt5zX+a84oZhvoL9x7adG/ +Pm/WmBZyT2x6AHL8FC+lF56Sw/IPcBPyh2qT+Ukj/Lvv7ijzLzCmTfIP7TIX27nY/bf4psid/7N ImfdQ9+FtsydRejUB+2wYwu9jtGrwvkCc92nvNRK/xVXyhcNi3dWtcAY31jU1CJfYe0eslxY5EvF bM8Cq/zwU835DWd37O/Q59kCW2hcMXx+y3zAPb7n7+n3r2jc9v+xn9+D9oTZ8nrP/IHvNd+ndO79 L8iT1+pbMu992p8nmdavzqlfWqXzj9hA+qnP2P8C7S7dMYXHp1cydtK8hs+fk+7q/XYWGDDzvePs mL2MQSTfEj18Lbx7zp56uCE6zdlfJ52kn+hd5lPk0V3n6f8F9JcM0Z9z1vW/Ya0hLD6z6EfV302S D8Un93/zxEcYYPWK/12Scf6K1vf+y1z0m+T7iUX+W7zSZZ7ucnucsJ5bvJFdor9I+one5XiwwLzq F8bsqTdUzVry9VxctOgZpbfzv0X+Duev4CG91afcJjtoyNcuq3o55+s5sIZPff0Ru/7bIsavuVe2 3rOecI/ehfRYJxtIPsmwYa36vEWmCv+XybbqRbJdZfs/Qn9hkUPusPkK2W8t8sUirRWD1TSXTB8t 8Jz0VJ5wfT/gG8XgtUUsK17V72ie34xyQwv6EXfk+Mo89X7rdpgnLtgTf517YZQscp3r1rR4z0/c 3Uq2Vt9wne4R/mmznsFrnHypfKSYEcbY2/8xxhcb9pXX3nNmBq+P3Ov331vUnDHzP1jEgXKKcPIe m6mPFU5V7/CQZLphfEK2MbLfpbFP9td9XTuM81XyWRueK2Rac/59ssEeOZTjbrlraxFTC/zyxFw5 WzT38Bwjn+rXOfxG0Glvm84o303gcZP0XVvko6VF7VXMSdc5dlSMyvdjO4ytK4v8/ol/O3ystyp/ KC4W3LHB7rm+uW8HFrViZNE/umxV9tWvCtuvLXqYGufVg/jwHPsP9JGf1vhTNVk2ddsX4Ndn3CNn G387jxJ7vq7wVW91Y/GW/O56Wqv//DN6DrlbGPsZe/r6R4t+ovoz7a9/ZfFWJtw5YqgvrOObEfZc 8tW5rkX9Ua87wnbCpcLTVfbr7J3YYQ/ptJ/tsB4PmF8h+4DvwiJuGxY4ZQbdCH/8Dv7yU5ev87vA Zn7ugwW2cPu+54ziqGWRG75j/xo92nyvoe1BU2K/xd4/uauErmNk6FvkTj/7wNf19jd5n+zdTv5V TXced/DU21nDf4V9psig/H2HHL63Qfc23x+Z31r0r8qf6tcG+HOI3HordfY6fJfI/y7JM+T8CTKc WmCAZ+y+tqiZqn3K324T9VYVRpV9nxewwwje9xZYtc2dzucFvt6H1dhv8k+9zinzBn5ppnNN7m1i E/8+cfcPrLt8W4mm9epfG/5/t8BV6u/esHbb3PB/hW4tdH2LX+rMa9AO8HM9+fcIX+iOJt+BRd+n tdvh67RucGaQRgu7nmCrpkWMF/j3jrnuWrMuIFOB87XEd5NsU0XvAXZWPl4lHcqcrSBLBZo3FrjX 5fM8cIn9+sii3LxI8xrfFfMma7eJ+iTxcBt8x77yn/ToJ7q+Rc5uW2DdAvM+Mot+ZhFLLXw44Ku3 07PA/gvOTVkrp/cscpT4zNCrA53iRXf/j/Lyj4w7T+N4u87e4/44Zx3r/jj3x6qoqoioiBhDxBgj IkaMMSJGjBhhxIioiIhREStqnVBVtc6pqnWqf6xaa4VTp6qqqurUiqhVVU6tqtM/Vt08mde7z5PY f+6Pj8/38/k+v5/P53neH/UyfbexT/q0Vu24gfymBb4sEI9Gim8jxbCFnCb7q9ixYHFeZI9sm7G4 x+rrkl9Dr/pJHR3NFHPV2j38F72vdbadbhJe5XjP4o677FLy8azF+6xEPEr4ViYXsqGETKcfs+MY umJRv6WnYlGT6tiinngJm5fRofvrdqqurlvcadXLUQvMo3+lFHONcYt7Jzv8vgyzlr468drCX/mj OM7DOwrfeuKftugbJQucpfpYYC0cM2VRc5RT9+OqRW9bI14eX2H6jgX2n2MInyrHLewXXqsxT1nc zwv41CE/PnpJx/f4v4yOTezyXOl9sgWP4uR73mt2LDDrlgXO7zCLbh3bhZ+917ThrVtgFr219tJw vdctcLPPly1wsXBI1wLHNywwWTPJ3rTA4uPwCt9v488GPmZsLtub2Kw3mN5FaykGXzOkT7hPNnRZ CxNun+Bt4nfTAt+tQjfPumdxp4Q1dizemousO8jo4I/edMJVwrttZPKO/WjTIj6oZup9tUEOasjY gd/xxiQ0qltd6Jz+S+h2kz6n8Tt7JeVkOeWwx3rU4oz2LHDdxSSjB59iKxv8jtQt8KFy12Nfb8K6 RY92v6vok03qZ8vkyu2bYK064XfvHPMs+i4Sl2mLHlplKAe6A8JuwuTCMXo3CD8u4VfDAhcX2c97 bsMY9k3ip/rWqgXuEH5TP1c9ET7e4b9q3wj2CO/oLdWz6AsdvtUr2+wX8X2V770kV28t4fOWBYbN NLJZ2FbfRezWfuXE/rgF1hRWEA47b4ED3YZC4lftznFeIA5zSYf8VU+YTvlSD5tOQxiqnug1hJGF y/z7QpKtXva5BXaQHS0L/Nk6ETfJzz2tmMb0CTr1oWXWDXhr6X+223M7atG3ffzjBF0r6RHeryZ5 q6zLJ/hm7PgbVjhVbySNbKvOwZn0vwqf5C3jzwds9dz7ubzWH69tUL82sPu2DerVGvwZM+6StzVs dD+uW/QAvRF1r/ze32V9zaIu6760yZHz9SzeY65vHzrX4/1jEtkddBWRfwsfdd77tfH0H/BliT2X e4F4P7Gou0ULzPsePTv47Rjaa5nXwiF0z1n0pir6hbPUj1V/r/Cd32jrFphWZ27dAh/XidUdi159 g9zp3rm+CYu+7H2pZIGLOtAOM49a9PVd/ut8CYP3LHCczlzbop8In4zBt21xbkeQ/xiffNwjXqrx OylO/v+ZRf85A+06/pewx+0+n/7p3eU+3bY444p5YZD7I1qPyyXkbFngtFULnFNlz21T31jlW+9N 9Vrtdy0wh/qB/PM7dJ24FdibT3wd4iaMobeGsFw10W7gv85w7uMX03cX3pXkQ5u9i+jUW2iXWf4u 4mfVAk93iY/kSsedE/JzDISlutih92jPjmPLDXgUL/XLdhrL0Gxht94JXQtcmv1dYqi+6TxU2POc XELOBHx6T5WxdRaZenPoLeM2Nuz4G+xOir945bP41MtUl2uJvwLthAV+Uu9VfdG+es2KBVYRntI9 Klvc5ZIF/lU99Hkz5XnOog+J1+uqMFnVomdob9sCj6qnqabqvdpI/+fteL+sJ31FfC8zZOcMeZu0 4/1wlvzV8G3N4p6OWdRFX48kuV4LhYXK0Pr8FbqKJ3RMJ7nr+Ke1sNyEBT5SnosWWG41DfepZ9E/ S+RX+oTDlG/FxuUXoBeelg75uWxxntTf1HtKFvVigbXH4AJ7U8goQzeFviZxXrE4TzMWZ6RpgeMu QrcC3aLFO0RvprbFeSxb1I0CQ5hX/WaJfeVqA5px9E3w3bF4L6iOz1pgDvUPYfwyfDXGJP4IK+tN It6yBd4XdtT90JmZsqg1+hb+nEXOEHK0Vr8pW5w3YeIp8uPfoxb3Yot/o9g6wX4N2W57C9tmiJ/e Xecs8GkF3sWU73ELvKAzV+db7ymfR1Je5tCzaPE+cRm7yS7h3i72VcifzqvqbwOb8phK9us9oftW Qv4U3yWLc6D6rzyesTifqpc6Kw380H1q4veSBXZR/dXI+5NJXp1YzFjcScVBWG426dP50n49xbOC T/P8WyNH+U2oPDeQ47POjeKpey3cVyKPUyl2kyd4axZ1SHWzmobqUcPiTqiGVS3qWpW4KLbqAzPo lPySxT2TLRpOn7G2fGuRT/US1UT1m3Fm5aPInnRULeqsdAlrK056Y+m/aoveJOcszt14otPd0jnV /hz/5Lt6YJm983wrPjpTXid34B0mHorDiB3vrRsM1d4aNOqNTb6FY1TLJ+z4HZ/Ax0mLd4FyKyxS S3L0zvT9td/+8vGtOG/H65zqrPLkZ9Np8/tVbyr5KGyhGj6JrWsW9Vfnq25xDqaT3E6KjzCGap/q yDj7ku+5+yLR65xJ9mLak3/i0fkpJJn+X/V5DH0zxEdnrcK36oqvzyNPWLGOXxULnNAa7J/+YNFn NNQ7K2lPdSHTZeyjc6i+MPsro3KC7/8dU+g4m/ZG0/eMRV1Ur1AtmUjxkQ2T0KreOv9I0lUlF2Xy Irsn7HgMasRU/cO/u8RCdV/ncCnlcCjl9zP8Oss639kvLDD/GPny/8PobFpg1T8hewz+IfaFOeW3 bCqlfZ0dxUt1a9mir2wie4hZfV/nSmdEcSykWAqPCSup36ie6G4JL+n+N+w4tipY1MWqxb1UjxP2 nUp5lf/CjcJCsukce0PIlPx8X3WPC8RJPijvuTbI5yKxKFrUd8kbRob+F4jfiEWfalvgmyH+XSD2 2vc74O/UuzaocT4cM/n7YYP4+fyyf99/35/f9OdT/fnVYD4a/f3Tn/f3DvvjBeMZ6+fMj/s01h+f JD54Tx30598gx/c+7e+9he990n3I/Io9ZBzpezfYO9L3ir2f0Xsq5IjvSLbT/TLI1dHec2j+O7Dp SEbf31Ne535MNv8u6X0O7euBLqc7kvvzQPZHGz9A/wD/XO9/0PUIv94h4zXxe4Ldb/jn+/dZv41c HMl/c1ze0Vr+PEDfIbY+g+ZHbHId/+b/v/rjJ+Z37B0iz/nuwXvA/B561/Ew5dv/PcWfQ3gVqwPo v++Pfej28W0fm/u17ZMDfHpMLPoyTn+GvJcnxjuG67mDb4foeYeN79H1EL9v4KfGC/T17Tj9l/74 I+d6H/1P4H0D7V38dB3fIuMDNM+w+w26X8NzgA2KUY7vzRTjA+TrjN6E5hF2/ATNwzQeEUP34Wqi z3fyb8TxU/TobD1F1/3B+uj/3ZSbFyluT4nvw5S37yzuwA9pPILulcW5fUusfsCX++TsEHn72LbP 3jfwv8Lv7JPLuW2Ds/WA+Tl0z9HxGJ6XyPSa/jV82xZ40uuo12Kv3Y7hvN5W+RZGdN6WBT7qJr6u xbulBF0t7amnCYs53zryKxZY1+v3PPsz6P6zDWrxJf53sNP3ve/fskGd9nhcswF28bq+go4FxnVs EL51WX73r1jg89vI2mHP/fo7+pxn1wbny89S7sNfofsKvq4SZ+/73le+ZG+Wb8XrJnaWyPEuedEZ WUh++/D+dBce98P7nOOM77D3Fj4vQ9tG7wY2fkv8eszfoLNIjNewbcPi3ed+/BN93p/3+O5g69UU p030eD7vWfTpZ4w2YybFdxeeLjK7yG8x3K4KOb3MXjHZs07cNyz6uNv+V3RtMfRma6TvHv8WmbdP xMfXO+jt4F/XAvt2+L+DvE7KwUb6305jEx+cZpZcbSH3CrovMWu9Be88clfT8PgtYM8OcprJB81N i/PShG4F3jbr7TSa/L+M/lmLs9GBZwfaXcYeNq/D6zx+DoehX4F3F17VAL2fdtGlPKr+bMEr25RT xVJYfgmZymMLvT6XsU+694if8i5/GsgpEzu338/2/+gun8jI0zSOb+/psae1l7WHsWK0FhER2RJR SiilRPyUUkqUUkqJqC1FiVZKRImIKNEiIpoWLVobLUZrcxitD20Na8yhjTXGWnMYa8xpLGOMPexh DztbT9fnu8/bZfbw+r2/98/z/32e73Mzw3Bv363iZZ97NWyTR5YW9/eQY4d1n/+HGuN31H9WoLnD vQF6qO+Q/f1NOXb4DDm/hmcTGv5OVvFxkdGBtt7RXZth30LCV7K2OCfcXrLoK/LQfWIR/2X29Ka2 kLOe+PCYM130KsFnCdkq/I+g6T65sOj31IMcW/RtHhM5+Kgmdbh7xFz9j/tng7UtdH/K/0vkyhKb qO/bxgfr3Ntm3mUuW27h+1Xku4duOWgp78kXK9xzWsus/wjdPjKo7+la9F3qVcsWcb8M7Qb3VtlX HS9yJrPIuXf5VpHXz72PvIq/pkUf27DoPXWmkQz1sCt865zzschYQIdfMxbRbZE7DeanyO/2vJmt /9L7A+X6OmOD744FVhHeEPZos6f98tyaet6+BUbZZk1frWnU5s5IX92vYrt2YvMc+kkG0dB71/86 /tqyd7FULTmzyrxjgdfK8KqzVkp0090SNtvlzFqiQ3FOR93TO3a/3U3kkR2Ub/RO0/VV/JlnbYOv 22LaW7yNtwK66s21LPJMHnoFbFSf2frOj9hcb7SALovQV3zsYqOGBbasw6OOPbYt8kcx4VNN6DST uWylWOugT/q2yhb5tMH9dWRd53weuT+1iPXa3Chx1/OPY6N+4udd/FFK/LphkVeH8O8n/2mOHDAK 7GuksdfGrsrNwguD5Py6Rd2tJusdi5qm96i4q1rk+IZFrdxI9GvDa8Miv1ThJ19Wodu2qLXlZN6G t/97jT5lXmKvAO3MIn812MujZ5Oxw+jzrVrg34y1IjxK/KuOlpI7skMbnmPurVvkDuddx/bCB8oT BdZSutpTjVecC9etcyePzdP8fmCBjxaxeWaBrQv4bMTZNI847S58+gmPZe47D2E+xYpsJrmFMfS2 nM4foJlZ5KI6/JRLu9ATpmtxN4esz/HFBd+HyHeOj+vQT/V/Da8O54WpZFuX5QX0ZXvh145FzhBG 0VdYRN8RX71vl+NVsqdaKz73mZ9a4OGcRW/kdvzCZvjUZXFcc8O4RK8x8niP6L3JxALXX0NXuFu4 KGP+FDu5/CcWdfWIu1cWWHOC/A+w6QXyH7P2jPUP2Bth0y8Zl/C+hLZ6m6q92z9tIoswVdmi1xVO Vk8zSfxf5f++Bca/YD7ATmfoI7ldT73VHnIdWtQFlzfPft/inZxbxOfEAkup3xnB/xhZH1q8j0oy VjlXg3YdPj8k45/T8T02/MpmPcHn0/HtdPzbIt8/5L502WdeY36fMy2L+FKOy1nk1GuLnNzB/ksW +KrCnr455qpTwtMVdGpaYFgfL7G7z0sW+VkDLPCW9tbP7NeSeS+RRWvKKWV4aF1vUDm1ybru9llb sMjvFdY3kTWVo8VXtFQ3NuGjc825r4/3LGK9ZFGTW/hJ2CvVt5nQV44vJjTV77UssM9vEzvfTc7m 2fP1PYv6VE38KBrCVbvcE8bKzZ2pW2AiYY1iMpe/pnL+9K1FPSxaxFXFot7mkU31sJHQUl1uW+Tx AT73sxOLPqZqUeOFF1Xr1UfuQXOPM7KJMITP/Q2pB5QP9pBZuaBikfd7Ce3VRJcC9LSW8pT8TueC /yH08ok8irkyeitXKWfWoZ+3eEd6a8IdqsGH0BFNYV35Yyvx7yZ0N9BDdisn+hfZy1vE77pFTRdG riL7WiKzfw8s4l8YIc93Df7VhEae88vJPeEi9XfCI6qhwjHCNHq/y4wCfJbnRrp2zVfvRvaWfZax uc7/zgLn7qPLEt9f2Czv3EtorXB/zBnJLDm0dg+7yS7a3+RMle8C3/Xk7ryObmPHincTW2td/1t8 JUMnuV9ibc0C5w4S/pJXZ7ZYqyf0PcbPLOp+Y+a/O32L+qj60Gb/wAL7f4Of+8gmPF5L7vi/52iP eeXZ92d83mIPj1PPcxPOp3WvDK3P8LfXsnMLXJ72oGPkE351OsfwfMi9I+Toobf6sjJr30HziLnL 5xggQ88r6B6iU4aPhxaY0/Gi6ofLfB/dlHuU4zILjKJ3X7PAMWX0KKOD0/FY+bvNYv7Kogb/zSKX qQ/ch/45X5fnEt1Ul4UxM9ZWmHfR0fVfRZ+JBZYec069Zt/e7QPmc/KIc+pDe9jtmHkNedQH5Sx6 C/WjqiVHyCCdRhZ9jfDxFfYSvt62wKgL/LstT6H/2GbvumuBWcvIOLb/xfBPP2BfxVnNIn6f83/B mY/wTw4aLu81vM/g1YbOADmdjufDIbZbssCFDeg30HPPAie7zb5P/osWb6MLLWFO5ekJPMfIqL53 CL1D/tWPqY51uevv4w222UcmYWCf57n/R2Qa4Lcy60V4HkNTWKrCuUOLmnTOmbQWf2KBg07w+apF P9CywKfO4xn/BeR5g389t6yghzC6aqef/4vN8ofi49IiN99C/4i9Lnr/fo7OqUXfcsx4gyxO12PS e8pFi7w7hs8tOuod9iz6Vp1dQAb1bM5P9e3SIgaeY1Pl2HusleDdxjfb2Nrvb6JLGp8n6Dkdd7ye vmZ8OB1/tlnfcYHdXL4/4Zc8dJcSexSSsQR/v/MAOdbmRsa9jH+dafzM2TV8vYbN0vUtZPH9ocXb yhgN9PW53nzForcSP8VY8//c970V5FTu9zueYx5bxI3kOOB/wwLrCiO7L24Z8lMDHlX4+f8YmU+g p2+Gr4VvdyywZxM6BQs8U7LoR/oW8aw600Rm9Qmq39LR5fvXNEbeg04NWTxOz/kfQVf16YCzLzh7 wl4dmzUt6tMhuiov+LzHaCBLxrrLc2TxBj0X3yDHGWMCv32L3HgOnyHzEXKqHh5a1D0/8zH7whmK G9l1aJG3lPO2LXqWgUUNcjsWLfqjImcH8DywyCcTCxwyQv4OOkhvjR3otyzq5Cnrp9A9Y/0ksfU+ e37nEf9ji7gdwVP1Q3Ho8j5Gr3S0k3mPrzBA0yLvN6En3ysXjVlTrF/hb39vS8wXkE9vamjRj2wy ztD7mjFAnrJFHBfglWdesshh6iNqnB2ji8v/kvk++z1kdXk8rm+xwwQbet70+HCcdwO/S/gdsKdY +RAaNxa9qcvyjCGbn/D1mvMKHo4ZH7D2DfRe4FuX1fHLB9Pxlc1qpNeJ1/D2vWk83rHp+NV0/qVF vA0t+k3lFNUzxb/y6Qlz4WrFufNXfyl99rk7RMYdCxyot/YGmm38+BH0J5xrWOTbnWSot3mGjz7G dm34qrfZTeQ7Ym0E7UfMheV1Rzj/hvVnzG+Ss/p3ez/hzhP+3ffn7O/NaN75jcWbuLHAiCfcEz2P a2HiDJv0sa3//8Nmb8Xv3Vq8n5oFRlD9V45V7mlYYETldPVl6vOq2Fp2EcbMLN5eHz/es8jZG6wV kKHImvwsLKo8pXfo++9b9BiqOcoZqqOyu/xeRLcK55sWMSz/baJXCz22kyE7uJ6Of8bQ72HXJ/in BO/Pp+ML/v2d+zv22PWY8/f5KfZ8xZ6f9bfnWPRraP7VZvH9Er9eIOcYmZz3I/jqLRYtMH0z0VM1 s5/stVhTD5Hh2zb0qsx7FjWrmthhmXkp4aNaVsW3F8haw79F1tsWfZ/wvGrm00Re1eZGIs8YP+5y b8hZvXV6ubd2G8GvbFFD/Kv8qr7LaZ2hv2pchuwjCwxUT85nfCVLGT2VxxRbzsfj49Terfu6q1yi nLnHutO54t4t90bcVW48xCYX2GUPGVQnVM+6yNPBHk7rmq/qSjvxzxb2cHk+QZ+cRW2qcaaJnN7b vOCcsJR4KtafIpPnXn8L33HuyOLN/pfy8o2QO7/jeEPVR1Uf9Mnpw6p7UFUVEbFWDGvFGGOtsdYa Y6zpGmsYY6yxVoy1Yq21thFLRJw4Mc46qyIiKuI4cSrOiYioqDrn1D2pOqdOnT7ovjOv932+2Ybq g5/fv+/38/f7eX/en24kj57n/Rr6PFO6luf4Xr5vkOOS965F8iqt99wo/y6RmzHv85F8brbw133J 59RxNV4sI2MUySl8uQ7Lb2tvWed55Qr2CrvNB26Suwo26Fy4LjvkQO8zxLqGP66Lb057iny6ju56 5NwhfHo3pvUs3cbnhcLvl8h1v1dO3O/X4r+5WyeSB++iq0Jsd7HtCDmeLS6yTz4N0d/HF8+aY+Ju 2avYtcX/dexYIy+VIudlLZjT+YxdjewxPWJmnn2R+L6DvC10V9i3yd18eBv97qP94r2PDwN83Yzk 3iP2mkNuE58B8TB+G6OOiZE4xANiOiz+f0K8m5E477m0E9mfLxDjKvZ1I2eXDXKzeuYyNp79fvYy Tyi/tYrnpTNr36bL+t75H7rO6qmfuf+/V4+7Z0DF7E7kPGMsMC/0LNgjF8vo3uVflZy6f1xgzUxk /zzde+4Hp9cPY4qPfzu9vo5pjYoXvCTX4gvi9J/ht/uYeGAbu3QJRw7w44hLtu0Ua0bE3r1oA3nu M66VxlueO9h/Hv2rfFedXcTHS6yr8q+CjdeJzwprzTmNSxfYpxoYFjo32b/JfnGqxzHtKaqth/io vNyLnA0kQzOO+tBVYvcQOz4lTsdcfWKsfyeRs5t5ieI1IL7uh4pLC1+cg4VITrxKLLTnXWLr+jSn ayJLs+0WsfplJDe3bmO151LPSK1IrF3mn/uBbPotMsb8N36bE1+I5Ox15M1iw3l0nkeH+1WjkPOL mGLqImuldyaSOxiHa8g9Jr/z3F0/E3L3cCrr3E9OL82jP49p77tNPOX3TiQnrZLnX2HXd+RwF/m6 DsmL7nvYJRkvkK0aN3+7Hjn7mXduRvbhrzgH9q0VWe/S9WFkb/RMKz71RUxr2/WtXv8J1wk5u4+s B5FzoOz49vR6HolJZc/4V0z5211iNJzmQZgi/HiNK4qv+JrOv869MOEp15B/d4ndCfoVh0fcnxR2 ee6QX3/i24S83ic2/2av4vsMH5+g9y7/tF41vI9+zzyPyJPOwufs+YB977PnY2J6wrqbfG8hd4Kc CfuH2PBoeq5eY+pfyOXzSJxdjuxPiq1msXrkbNvleyeyL5sPbnDXeTa+70bytFpkTbuPeIbQ+TJ/ meF+NbIfeTYQjlwj/+4rrh/p8Fx1gr6rfL+BjtlI7iy5i+RzBdsG6HKfn4nkEXvopme9julRZJ0N yFsL2w7xzZxmAxmjSP54LZL/jZHXi+QF5uVjbN4i77rvY7Ps8/zTQ756p86FzozOnepoh3iY+ysm j8n9EvZfRZbseIGOZ/j8AnnacxMdt/HXutv48wSf9ohjG/kfsMe4rjVV/Bzgj2yYIE9yj4m1+/Y2 a1WXqpkDYjsgnuagba4D9v05ptj6MTqOCxmKwef49ox/f4ispS95FradcL/BGvfib6d5PfezmNbU K+JQQ7bwT33EZ2TCdZ9LOXqf+KsWP8Xn23w7JiZatxA5c5qHX4+cB6SrS7zl8z2+3eLdGDNC512u e8TnffBT52SG2LZYPyB/g8h+tEys/X8RG322u5FcwZzeM0s/kndVImtT8q5E1qViIZwXD6hH4n9/ uv7cJXz8hrjcIU+HxFl+73ANiOt7+K1/5kyTyJlmCz31eJO3L0XOt3Xs8HxpTu5Zo4bOOr4YO82n O+hbQr/nJN1XInFRMRpGcukDZM5EcpcOMaqxroIc40ObtbuR/LITWb+NyJo0b1nCv1nezf+6XHV0 OA6LkXi6yt34vY4NC8hqsrYWyZ+akWdnhfWzkdxxFdvFkX6MDfaxx5phJMb2kC0/HmH/eiRO94n/ RuS5NPY6rpI15hoSH2PmKJKHOr563yzy4Fg08HEJmzbws17YvoS+ReT1izgO8HeXGOl5r4ijZfTR 5Z47jMTpfmSv7nOfL9a3I+u5wX2FdbLrCHtmsX0tEgeMAZbhfLpPr7Les5958Q426lmYKmz9CDmH 5GmOd/MBcbfH6DGvcA/zHLgeOQu0yMlmkVfF71VkLep+HbvXiEsHW32GlvDlCvGRrToPH2PPKYc8 9+v4nlue+2lMe0oLX8y754nlGF9fYosw7DJ2PsenR8j+gnXisTfx70vy+Xe+S5fOh3qO8E98W/1l D1tvTXP0Gt9VH+KA70Vijny6Ftmj25Gcr078faZbxLkXyf1ct/uRPdg1VCGOnp/W0TmInGmk92Ik N2shfwGdG5GzZzOyf6wU38r8uGcMIs90jZxdjjyX89i5yP1yJEf0jDqD3AX+V5A5z7t7n+dA126N q4E+zWqz6LkaiX8r6JJM40AzcvZs8811OoecSiRHn8W+edZU0Os+VovssRVk1NjjWIwi+a982S1y XUf2KJL377J+jvdRZK3MEYch+27iq+rNM43rX/Puj2J6DnRmVQ86szqnB+D9d8jrRPau5cjzs4YN m+TD/EQ6jfuLU3mvbTB3X2Cf+eUOshbYM+S7uaZ5t3lIL3I2dZ/vRmLdfmTv9wzQiewbk8geYTwe RfZAc2TPOEP0jMiR891Htmtxu1hvflZisGvQHHsY2dNXI/mIuZzrofxnXqf75Uiu7jozl/A5W+b7 Irn1nFPHh25kjZlbLSB3I7LHGaPL/lstfDFPM14oToeFH85ZNZILLRTxdh22sF3/x5FcyzIb6DQe lb2zyx7nu8PabmQNrfPeiuzx7sHWuxl51mzjVvHfZ8uczTjs2htE8hF9u8G3I9b+FXk+//r2Ht+W ifMcvpizuicYlxxrcyLjaZN3/TsfiYXy4x/IPI48J+a5kjNLPMwpVpG7ETlbmIMYu/qFr/5ubqx/ O8RoE90+W55xjMetIl+dQl4vsp84ByPio/ttZMsX9duP8Fc9WFh5gA2ePfX8SUw5QznTfRXfc93X eTfGGX+65GsUyX+0z2fSeL0SOQO43oyVO/hpfmc5ev9dZL9usFfnwPViXuB5b8i9jw1VYtWO7I/m 42vkthrZb0pOajzxWWrwbtyYIE/+fx1vzrkfRuLSOHIOaLD+gLiLG+2Th4fIvUe+lAtxqCcx5V5P ycdnvD8prhP2iqdV0HEvkgMba/rkxHjkudd4U4nkL47RTBEr9/16JKdy32qSG/P8RXRd5JvPbTeS wzUjOUO1+CY7N4trVNhai+Rg66xvFXJ2WGust5/y45jYmec5LtXIevX5cB80ryhxWH57plnh/wz6 DpCv/N4m98K6CTmeRGLLU2RozUv8usN/19UR34z9C+RcNtzkfZ88H0XWkvu957we13bkXLGM3WPW HUb2uG3WGOfMUS4X/hv7diP5ag8ZFZ7HkTy2GjnLuiccEOu75M/zoTlTvdBlPDGu3yK2Wr9O3PZ4 N/c3Jm9h5xZyFiP5yHoRI63f4d+dyB5p7HT/H0Vipa5m4bv54D7v60Vs5yLPhLjfJjFx3A/Jo/O2 hu+7kRgyjOSZxuENcuBepbvnyK3IWjJWlrlrRtax4nE9Egvd3+v45dzpeTve7IXO33KRv3ZkP2hH 9roq+xaL/A4jMcZxM59dKb61icXv8XnMd2N2aVsrErtbxP1GJNcyl5Ttv0GG9XUjOdwqz9a1HXmm 9E/YrNo+Yb3+PSnisIw8yZ0nTpK1Q3yMY4p/JXKG6EZipt732SO9OoPiSDPYZp7R5H8lkjs45j5/ jvs3kbhQZZ3n1x66zMkkfy+ynlwDo0isNDc1b/sjMvSsOnkVyZHc70focp9oRM6tPewZY5P5gnmw 68R8wnhvPy5HYo+5QD0STxwrn4cGembIc4W9VyIx0/NDmxw3yY3O0IXIvtKN7Cvuu+6ZNXyscveZ 8BzRYN8Ktij+/4xp/9f+CTGeROKl+a9z/IB9e5G8cxz/obt8I+Neszi+w1rnxdoX++Za67qu61qr roqKiIgQY0SMMcYYEWPEGDHCiIiKiDFGVFRERIiqqKqoqqqKqqpVqqpqXddVq6KqqmrfXOuqda19 sfZ38vt873lS9754/J7f8+f8f875nsBB9UTOZYbwu+q58o1sVuJf74F8U8j0KexYYPEBdvUct23x VvYs3vlFdJFtb7FfRNZN1rax77pF/G1Y4M49C1zV5cw2e07X68R1y/Oq28vlvME59RIr2GgOe97A Vn34CP8qT/W5t8O8hy53obvPPe2pzgtb72BbvdFF1uVL1co2dFrIIBqHrKtv6/H/iPkO9q5hny18 fQm/7WKLPYveU+9sz6IGyh5dC9yt91ZFDt1THMluqoE1zm3Ad4r/1URP5VzJd4gPBujS5L5qr+tz wD2PDcfcZc5eS2yi2E/x5pB/YbVx1m4nMixh6x58exYx4esem45ti/CUr5QXD6Ah2/l3Fj5p7V5O fOny+NtVPOjtLljE3Rb8nG/a81yGd/oGDhJ/uPxjlsdRlfkaug2wWSPh4999i5onXKReYIWxjezK 2X14CLcrV+s9KOevWsR7L9FR8TawwBoLFrldGFP97DJ7XQusVIemesYmPFe42+C8+/kKsqr/2+Be Bdqqv3q3kke5XfYX1plGdtURybuS0BJmEL4VTrmEbNp3epvc6XLuMjx6FjhsAflkH8X7ArYsMurc HyCTaq96QPmnboHDuuhSw9c97qkmNpLzQ/hNszfJuYZFzZvju2wRW1UL/HCBMzOMKc4XoT2BnG1k W7LA84rRtJf0ey/QWVhdeXCYfPfYk6/1Nta5uwc/5XTtCTN3WfP/K8wXEp5Dvluc7VtgvAH72xb4 cjGhp5o9SGQQpldOFFbzN7+Z8FJ9U/38VEflV6e5wrrL8dGi7uo9yr/SRThuFfvovSzDdzm5I1w6 tMgN6seUMzWc1r6dzdeXkGGR+0MLzCIabQusKrs30UPnBvDYt3iTytt6U+K3lNBaQhbx2sAX5y3q cmqPGnL63mPLY93rh7+v+3Y2r4/CR7hmn/vzFr1ExyK/+ehDo2UR28JUsveFxB96p8LAyi8uo3od p19Chza26HKvgi1TfKtaJdqT0OhZ4Bm9k8OET9sCd6oPqvLv639DLr179a3qzVQXRGuX+UVs0WJd dUP1Qf51XfY414SPcL1wXtGi95A91H9ucVa9VYe5cMmaBcZeTujOcl52V5/S4e4s51RH5W/ZcyWR WdhbtcvnwujqcVoWddp9oLor7N5M9FG8dRO/z1nkG9WBMjzrFjm4Y4ExnY9j9kf45YVFL7iOTdRv Kg8oftN4Ec5aSHRY/ZX5L41f2t/+ZN5jKGcI83aRTXvCgmmc1BnCCl5zRviuJ/aa4Z7njjFsrHqn mFeNnGLtAmvjrKvezUHD+UzCv8iZCXRowUNvbZm50xxNZB+H16wF/qixNsX/p3W4yiih80Sio+Kp jKxTyOL0py1iX7XK7zzIxv+y8YHxn2y8zsaP2fhXNv7L+Ec2nmfjh2w8y8Z3ltenV9l4Y3ms+TnP q8fZeJmNd9l4At2MVuGPnPO969DIRuE32fdeNt5ajv+9Jzph+F3HxQuJPkMLDLlmkScVpzWLN9HA P6pNTc7ItsIFvr9nkbPKFm/1GvZ+wP8899rQ3rfIM3MWfazkUhx7vF+yeN8b6O38B+jutLb4X8VW RXwlrOjfp3YWYwkLKD+pRxSW91jzeL0A/2l0rFrE43qyN2sRwyVolpBLe8KYwv++XrGI/3FkdD6b 8PqcsxU7i7vHuD9r8TYnLN6b8xnBpo3El8uf6Cw7KUdswmMaP1QseiW/cx7ffcM531cNFCYYWuQr j9ld5sK6qhPqZ5z2Dn6cs6iFdYt862+rh79vIOtfoeF2u4evxi1w+zg05Avl/2LCv2GBWaqJD4vI pV6lYtEzKY8W7WyOEDb8kv27Fni2g7162OMIW+1ZvIV24lPZomOBm0ct+i3l/6YFtjzHuMBQL+l6 qq/xsx4fU9BuWuRU9atT6LpkkTPVa5U4+1Oit/t2A7nUN8r+wpM76H5g0Uv00UO1T7lCw2W7YzkO u5mc3Wf0c/kKf7KozZfRYdPOxprb4RgZO+goHNnJ7VVwf45YvNEZi96ygU6jFvWzzddlXeA7gg3K FnVZPvmSeQkZy9B32T+3yAWqSaMWPa/6wgYxoJyi3DzFvIpewj3z8O6wXk78qdoouWdYH0efryzq pN6k8zqPL2WnEmsXuTeJXavo4Pt6q5MWOL6a2E+5cccCo/r3AHknscUEurpMynPjuQ0Lv7WoM/6+ ruY2K/w+H6c1wPdvY781i/5ONWMD2VSbnFdWpwu/y8afs/m/s/E99txHl4vYdYBcwpVbyOZ77zl7 1eLdaE9DuUaY+DL28DrvmOMQuSr4t8R3E5n9+xj6yvuOPxx3eB52HOI5yXuVK5k+X2CzD7l8hc8s z03+73hmOz93KvMzZCnjx3lsIDzlen9t0StQAwtjrHeRo2ZR82/hU997hz3dRw8txz2P4Pd3y/OA 8M0H/p+g3xf45CV+34SX1t5ZYHuvI8fo5bRfsPaccYwczus6c68tVb6PkNljyHHODOtH0HrMfws5 Ze+n+C/bL/yBNedxn7HFvsvwBv3esfcRXt/iiwP2v0WONeT6iD0OseFtbHcPPZ6x7vXzJrL9E1uc wPcxe2+5d53zRwmtK/A7wcY/oM9xIt9V7jxCh4vQesj+GjaSfY7Q8Zi539nLeRc8b/4E/+z9FQxZ X+E7t/vrfO/0jOd61Wh/vx6TnjPnLbClD39fTb63LXo+j2u966FFT7BIHKyzNsN94YMxixzpvDxO NvGt1yF/76sWNVl5pg79PnI5PfVC88k99Vs1aPs95UXPn4NEFukhOfoWfZ2wTBF+ixb41/Of8oz0 fm2Bffxdj8JnkXXXZQQ5u8jRg4ZqjHJhP9FrhfNd1obQ7SGLcHAHH83Br8n6Crq1ud+Fp3gLhwpX Vyzqg3BbG1m6zFeZqy62sG0LHuvYvGuRg4UVVCP9rudOj1+Pd++D7iNzG/vWuLfFGdfpe/irL6tC V7VIGES1Uf3LLvY5RHdhwyJ81RupV/A3U8euLYt8PeRbgt8EOpegtWkRo7KP6/Eq1/G0fjgtz1se Mx/h8xz9/Ov5xnPhY/Tc5YznBs8Z/v49r/s79txwGx38rOewH+HtOWqH8Z4zL7kzgbxvscsbC2zx DtonnN/Al7egKT030d39eAStO5y7Br+H0L7LebeH58IXyDpPDJzgqwr6XcduTfjtIIPiosHZm5xV XtrK/V0QxvI48Fya4ZPTPHsXuyonvbfA20e5j05pPkDe+8RAdrfg9vEcq96hafEuWxa5ZN4itwoX uyxTnCuj0zesj+Iv3/M87nE5wn4tsUMd2h6nfeRz33iseb35yn7GOAWfe0wP+bbh+x02Ui+xbREj T/jfhvZebsufZaght+PUJXjVkVX9UY87HXh6vv+L5W90ijEDnZYFptTZeWxST2i63MLbc+xVEts6 L4+dz6CzxN3z+Kdo8UYryOB0z1nUEuHEjgXmdPusWdSPlcS3qifT6F+D7jI8JesM/6k+igPJVrHo Q2a5M4c91Gv6+gT/X7Pfg+4C+6WEt+w5jY3m4KH6tGtRG4qcq3KuBu0ldOta9HjyoZ/rI1MFmcct ersmNNp8zyc01u1s3qywX8MGZewu3avsdS16Ud//KrHrMnfdpxvMq8iiGjwLb88hl7DPJPYZg5f6 E+XvcxbxNmVRmyvMB/BSHKnnq1r0X+OJD9I3vA6tOYuaVraoayMW9axpgQXSONQdv3/Zoi9yOQ4s sIdySZOh9zyB72sWcVhkXbW/CB/5x+/fQbYq/9LN42DIXsMipqvJ/Uqy3safOjMNnTK0ZPsJ1iaT dX9DHgevuN/FRwvQHOXePH5weTw2nuKjk0SfkkVs1znj9ez/XJffZ6RpFscNe/H9A4a9WGOM1VqL aCUioowiSokSEaWUEqWUiFJCKRFRSomIiIjWIkJrI9qI0Vpr0dYYa4yljbUXa6yxl3sx1lzs/Vys vdw9m8/XeTIXr/d9n+c85/dzzvf8R/fY+x/I+Rf+/Ynn78i4heZHaII2+knU1G+QHXkXPeg9+2P8 6Dkiek3kSvTzwAEzYv0Ta9G3fub7SokZB0p8XMfGDt9Bc6bEx6f4sFH4Zg7dDvY7JzvIf8q6MfGG Evt08LNrlGtdH3ljvl2TfVeNvaKPLijvffBYU+LzeA6VuR7PY2WfOIHPDvqMOOPc7XJmgcd6ek4w bnX9HsG3rqyXYd8j1leVNXiR7w14u6cF/XrBZ1t5p3wPu9ixim3uA56Rgkfk8O/RaxmaSmGD133f bFeloK2iS8j6ne579xo6r0BXR9dPlfegDv3nPCvwcV3tF/5YJ45NZb2rsd8sHvvB58MXQ2WP77K2 oKzJo8L2GmsNJYaoKXtIBVrXlQ66WGdjEN8V15oW+x1lHrhGbhb7cd4zwnvWQv8z1l2j4v9nJdYL OWP09TwSe8bNrv9PlPnue+Ie+RVyo87EfQ38fIX+Lzmzx1qX8/vwmGNHF36/KGde1/u5MleDl3v1 Bd++1zvKuW6En2aFH33nG9jiOdXYIewesOe50DOlc3eMnjvo4jt3iA8Gyj4WNJfs2ffxnCt70Q10 rnkt5VzlXr4Jj1NlftjWBjp5ZjLmN1b0fLjHXh9fbyqx0IESb03Yq8PDmPEUOcbDnjnd/5usGWMv KmucccNKseZ4ryPDfjtQ5lZHicM3lXk+UM5jrqm+q84PY9wl9jagNeYaKfFIrLnnu9/7bhujxvOM +DDH/f8dOleUGPOgiLljccnZLvT2YegYGGEBHW6VeOUA23vYaXrPAxvKHNhRYnPPHS103EeH7cLv 5u2Y+T7Zbz3WjY8dhwY27irvzhA/uC9bz032D4nf35Tzz1hZU0c8Y864XjoHfXeN50y/o6yLUcsn ylz7rIjbHjx9tz37Be1rJTZfU84qE+Qe4gv3fvt4vdBvX1kvPkW3Q3hMlZh6XVk/3b9b6Ddn3bNN pdBnnf8pujhWtiHsulb22Qs97A1L+Me+qrLmOeBAOcNWlFja2H2zeHtOOS/85hnMeeP5pFnEfwC9 cceCEr+M0L2FTi8Lfs7xEyVW82zaZK2nvP89fHmirHU7RQx8D4wx3IsaSqxVzgK76Ot4xvcMXxlH NJXzoOvJt5w1D98tP54FLrHzWFl33kM/hG8T/abKvvYXaCIOf8Vnl9gePv4O2e4rQXeKjbvQ7GLX M+wOPn9GbpyPnh6Y/43uZ4RXSmxszBK0K4V9EW/XqqfE2bgjcv4TZDmXetjvGbCCjRvK/FyD3zL8 JvBYU+aT+6vrUkdZ742VXDs7hfw//O/5J2cu9BADtPWwDh4p7+lMmePxHTNQzFc/oPcv+O4FsXqG z2Kmizp4y/kb/P4D+oQuf+JMzHjf8nyAf8TlDl3+CM0d+x8KWXfYVoPmNXJa6LWlnKti7Qn+D3rP Tuv4sIr9K/ja+KMNzYhYuDc73sbTTc6FT6M+xr1ZYs/nIraPid+Ssn7V+O4p79sYHX2ny7pcZ8/Y +xPlbDNUYp+gfcS5LWgiXz9WzpLu3avKOaOYsT76je7vlfOuqcQoy+gXshaUM9SWMh+b8DJuc2+K 74ZyRhoUZ8sZY1uJ4ZvKWuaZJ3LkA2dChnPpvIh9h3PGCCecOSTm73RfV2asH7DmejLElhV4fa2c ab4o7B/zbBd8+sT6C2w418NZK2rilHPu9TvKOuMeMYSn76hr0nto36K/a28fPVfwb+j0GBrjOePQ LWV9dq/1XGNsXoVvR1ljnJ/1Yu+QtWkho87bvon74T6zhqy32GWst6HEQu6RfWXdrPK4D/u+bvG9 oaxdW8r7sIU9K8qe77ptjN3mWUNf11Pf9ePinO2uK/GHz1eU+fwx++65VXwQNXGODM9gZ8pZa6aH s9EUO1r40X1hDdo95WwwRI8+Zzxbxf8+MivKOWAb+cYo7sfuJa45xmtT1txX7I99JaaoFvw72FhV 1hDL2SzkDpQ12HORa8MI/7f5X8LuK3TaZ/1Kmbch1/OG89yzXEuJH6usX8FjRYl3XPdti3OpX+jp u7IGjfthr4jNFB18V41vY+8Fus0467hvE7ewI/BK9L3voZsiL2IQeRY5tajEwMYtS4X9W8oc9jwT 9C+Vee0Z0VjxDHlt3v3CnmN86PisIsf1sAX9qrIfuAc7l8zTdKvY1YBHxP8Af82I81rBe1M5m0ae Xxc+7imx9IWyX++wZ8zsereHXnvK/HWvdh3Zhn6viL1rwRzer+/lfWScOsWGMXZFTCqFvd/B5xob 9uCzQ/xdZ+dKvDIp7PAcsQ2/xq94bBWyVngfFG/3g3Fh4wFP8FpWYqQ572eFL/2sKnOrpuxJNeVc 2IaursQ08b+gzNkq+q+iW/w/0cMZI84Gpjkq1uL8IyVObrPmWWARnv3ijOl/RNaRMhcXkVHiI2OX R9B0frVvPNjn3VHi9RWeLu/Sft+Lx8SrWdhTnnNfGaGbe7G//63s5zPop+wbJ8b9ueM78n0Tf0VO LSn7p+MQ73ImMobxzLuOfu7z9r+xXvy7f3ve2yLmxkR78HPNjXyqKGfarh7eQcvzffBMU4PHshI/ rmPjNbEI/0QenxbnyvobfM94zzg35h115IB3ExnH6LRJzGvQ7irnwBmyTonHEU/I21fis0N0c80Y wPsKOdfE3jUg1m+VPX4f3YLuFXwulbVpQCz2semE9UtlrXPe7LNnPBw8nuOvI2R8rZwXJ0qcf8R6 2HDH2zPNE/Q9J+7nxKXGmQmy5uj1Uonhz6Ad44cz/LuPL8bK/mo/2fZl6CbK2t1RYpQBeg45cw7t mRLXeq+nnDEGrAXPG95H6OI7Nin8O0LXO861kbWLT+fEzj64Rp5xcKz5nlpu+K2LXJ9z7gyJW/A5 xue2oQvPI+V9/p61wCWrhf968HzG/42yzszxxQRe8e277nyeYbv9faucW+dKPNdnr4sONeTG2iW+ 2YO+wXpHiSN2iv9beI/Ry3NVD1vPWA+6mNWMPV6x5sc11XOO78dL5HTwcb/ws7HiLnt7xP8SHY+R 84495/VYeS9i3/PgU9bjzroGx730PDRU4soefhtC0y3i9hlrb/FNFzvOlDhvB1uayCxrReh9gU5R 45eh6yhrrfdG6H/OmUveoV/k2ITzE2Jdh+Y5fnuD3P6vYrcLz3PWDpXYzbNtnZjO0c+14RCayLWv 4DFT5u8NMR8r56VOwdNnXbOeK+fHE/an8K3yvcF6TYkzzoiJZ07fx5kyX4yTt5Vz1Db8LpT3uK3M ZfdEY4jY+1J5h46Vc84UHqvYPmN/VNjl2tVg3f085A3xkfuB8doBvMIfp8r5bVrEYaScgTzPuL41 lXl7Cq8qZw+QuQ39SNnTQqd3ynkvbH+BDV1i4vrsGaCHv+IOGH/bR477MfzDxhv0byqxifM3+Cwh Y4weIyV2GrJ+jKznyD8pdLZ9voeXyNjWwzzuExP3zxNlv5kj8znfdf6PCl6XyDMGifPreojXdpX4 r83+WA/n3hryW9B9TiyNN1wHWjyLyplgosSIYdsb9NyD14TvrYJHmydwxJWyN/XQp63EXZvoOsBG 93BjiQ1lryj7tZ86Zw6hNXadoa916kMb72+UeLVafA+Vtctra5w553+ADONe541rZw99z4iF695Q OY959nhSxKUGrw14PC3+Q8c5tpjOeHyMXv3Ct35sb6vQZR09HM8aa67bbXRqwLeirGc1ZLhv9tCj wl70icfoaZzdKOwOvr/V/f15quxJdWRYl/+yX76RdadZHJ+wL459tca+m1f7okbVqFERVRWuiCsq KiIiIiLiui5XXHFFXHFdcV0VEXGpiCsqKqqqqmrEWsOqtUattUbVGDVqjbWMsarGGrX2d3q/xzn3 6HQ28jxPdm7vi4/f7/z+PM9znvM853yfUVJtMm78X8HzHMY7Cv/zeDZGmo9bGJ/olk9Jz5s85gq+ H3Nj4P7kvDuM5zn4PexiP4mxfUKqnbm/BsY6CaRtfn6ImEheF03F423jWjOsgjr+baKdBua5Snp+ kdwjZwHRlaI5t0j13yr11kIZ9wbGs0KqxbfQl+S8KmmNlna2Tb8bpPmzQFq3BDnLNUjPejOkmpzt IzO+BsawirZWSOuV5GKZL4ntGsZTwryIBpZz0LrpexLzyt8uk9ZARnLsCPwZx//zeMff8lqfQnyW SfPX3/Gc1/40aT0aJq2HJdI8XcX/UnsLpDlb1lbLtMXfj2JuFkjPIFJ3ecyX8Q2PVfSRrGse9wV8 w/M/i3anSPdmkXprsGg4ec7zn8OYr6P/HNpeho+yj2cxpnnSvM3fXyLNYbL352BX0NYMvsvDlwn8 I+/GMC/cp2ip62ZMkgen8L3EbxpxlrmR/SKaU3TgGum662Du5axWwPtF0rorvhdI120R3/Hzv+Eb 0eqisaQOFTAXNczZqmPUXEeN/b98lzP3E2/5/l1tXXRtXSY9y8yb5/OY12nS9SeaYsTEX54vk+ru EcR6grQeDpPWxQn0O0FaByyyhs+hXen/mmnPPsube+nzKq48jgv4Zsy1U8Z4pI8ZPOfxn3ffXsMz 0UHj1LsG+Z7z7jr64XMPr4kfqZvHviCtoQvmukma016R6sBtPJer6Az2j9fWX0n3rKy1p9TVyLMY X5t0z8j+rAA5N/KzGsYudV7yfws+yHlRxlkj1bC85hvwu0Saw6U2rqCfZdzPwG7ifg73hxjTsWl/ Be9WSfXDEsbRIN3Ty3jfRBzukJ6jikA0vdQFqW9SRzbx7wTm9IGJrcyJaOM86ZlSas81Up0m51nR ewtoU9b1OmIm+Tpv5qKC/8t49zH6F50zSVoLRBOPk+psvl6m3nwte4r/uQKm0JbERHKfaOJF9DtM qvevYKwF0hwwjnkYxn/TuF4mXXtXSfeezMES6f6X/ZPDv+IPP/sEbU2SrmOpI1JbZ0xcZvHvRVzl /SLGITr1GnzPG79lP5dIc4jsU5sDJ0nPEpLLcqRahdvM1tPQB9n1m4x/0xstwbbwwTN8x3nhq4zn GV9Sdw8/oW59EfgZr8cXGd9nPMY3X2d8h3t+voNvuH7y/vg93nO7f8ZzHs+36HMb/T/Bs8+pq7Nz +H8Cvlbg9xRpXf4daa7l92XSc5Kcte5SNx+JzmvgeRHx4n0q+WMO78roX/QM98/1epd0v/G+Zc1U wxyKrllCX7I3REvepl6NuY353KPuXqzgH9GcZbQvGkL0RR3fVElzSBPXPP5Zhy/83RjGNId5mcG/ sn74nwPSff0v6q459lX0ms37s6R1XDSX7D+Zt2uk50h+Noy+86R7W/bRGGkuk9rL9yv4bgltTpPm F9GVEq9pjGEBV9mnMl+iBSdIz37jrq8i3o2Q1in+RzSCzEMe3+RI156cTzdJ85ZoV8nfso4nzXxN wX/JRaJXbO7hf8+Z5yOmLfGH++Q9cx7tXYEPPO+/hQ9X8c1V0jUsNeGqmV/R9KK/phBvuZc1I1xG f3K+uEiqFa5jTkQ32z0yinnPkdbmIt5V8A+Po4R/r5BqR5kbfvcoY5+6+5PrdgExP0DfG+iT9fEh 7vkd56E10jXO4+C9yOu+CR9Eg/C/tzE+bmMb/7K/vD8bGGMR88dzJGfcNfjC88v59gW+l3NGDf5v kub5KmK3ipjumZjzGpG1LnYe12HEQ55JjIuke0z2nqz9cdJ6JDV6FH5IbJfwn9RGOZ9dgK850hpX Rhxkb7KPn+K/SXwzDt9E006S6vxF9Cn7Yp10v0xTb56QvZUz39u9UcLYS2gjj3H8IeNP1K0f3O/X +Ed8q5LW8DLalfr7GXXXzCy+WyLVOwXcL5q553830N85jHUEY7qLcd7HtYjndbQxj3niufynmQPR dDXEXLTvMsYjc1Inzc9zaJu/v4Q2ZklzDK/Th7AvvQXRcu9i2syb6C6J0UXS2jBOer7Nk9YS0WGi yVZI92ARfv6A+znY3MYxxn+NdK/Nkq5B8ZXfsQbh/dwCdXMvPP6J+7dxhOsCxiJ1kMcue1rOpDzG CuJQQmxlfJxzeJ+wFnpkOHZ2aJ4m7u8L9JGKfveP9fKeYcfZoUntH9fpQ8OOs0NTj9y+h+vEpqHq 7NBIrhHKzg5NzfXfjuxfPTEp1wrDtWvfcOTs0HAN3zEcOjs0lVPG/6TsJo4f7+9bhkNnh6bk/N2K PJ+csxuGA2eHhnWXrb81ilvfpzGHQsHZoRn4FxY+W5QNeWeHpt/9Y39S5k/OZ9uGtrNDw2vU1qcq xa1/nLNtPt2muPk6dfxSc4t6881tipvPOF/eMOw7OzQcQ6u3b1FcPX/Pze9R5PhVI7fvaVGv/t2j uPp6NeO14ZmzQ/NNWoZ+k77PgX8B/fvw7McQ1b+PE/dZp7T5bJF66/0exdUTs67/dmT/6pH9ed/0 0nbi/hrUXSPCsbNDs+Pi2Txh/E/KbuL5TK2XWPPa81KTop7Hhj5Ky5nUpVcJGfg38O//2b9+10sb zi5H7m+gl8LXv45h39mhKVFXUwiHzg7NQC+FpRV5/jycQ/+TkD8m5kliBv4N/Dupfyn7S11v/fmv SlHPf29y2o6h6uzQ3KW0+Xo9cfxS0864YWg4OzQFZ29F7o/9aSXEz+9R5Pil1ks8p3uGprND85R6 z7pPnB2alxlfGp47OzS+v9i8b/6l6C81/exfndLmsxJ1a5Cw5+zQbFCvvlijuPqlHrn9t/WXMn6p Yc3bSQivz7bh2Nmh2XHxbJ4w/idlN3H8zkIvJdx/Q+cyPkrIr7J+fwzIy3e/D97fz/De+fftL2w+ 33P/zkQvHRhazg7Nhuu/Hdk/r89i179a4vilZjtxfw3q1TOfUVy9VKTuGknFQC+F1UufZOSUNzk8 dwrOvft98Pz/8ue/OZU/A/96SV3foSlS0s/+DfRSYHg+bX3apLj1L3X8UsN6ad/QcXZovF7qUFy9 tHPK+A/0Ui830s6n10tDI5H1xOOMZwkZ9PfL7u84Mf3uX43S5rMidWugUHV2aHz7sftbo6Tn2+Tx Sw1rihuGprNDU3T2VuT+vJ5uUdwa7+f3KHL8Uusljteeoens0LzI+EEZ+nWvHZwlxExYc3ZoZqn3 PFGnuOcV71+9z/xbT+zfgut/LbJ/C67/2OuT+5s3LDo7NByvlPmM6/uBoe3s0KxQb32qUtz6V6Le +uTrYWhSxy81rEFvGjrODk0jY8dQd3ZoGqeM/0l56Ob3KHL8UuulW4nnk8+cXxmeOjs056m7JoW2 s0NzIaNiKDk7NGfhX81QcnZozsOnVHB/BUPJ2aE5jz5S4f2biuxf6no7Tb37Y5Pi7r9J6tYkYcnZ oeHzbcp8nTp+dxL3x/V8z9BydmiK1F2TqaidMv4nxcev3/QSn1nsebfp7NBwPtlKyPOMfxj+4uzQ PMv43HDb2aF5fcb+3Y/sH/PIcN/ZoeH27XrtUNz90O/+pa63rAkPDG1nh2aD4p5PPOxfynqbOn6p uUlp90M5Y8ew4ewYWD3ToLh6aTdx/M5aL7VOGP8TMvRhdn1leO7s0PB+uGvYdXZoChn3DB1nh6bf /ds6A/9svViluPVojbo5TNhxdmgmqbf+lil+jU+Zz3hOU+ql5cT9lShuvfP0u17i/XbT0HF2aGSP Cx2Kr5c6hj1nh+ahm9+jyPFLrZduUdr9933Ga8MzZ4dmImPdUHB2aMYy5gwlZ4em3/2bpl59UaG4 +uUs4rdiqDg7NOzfsmHR2aFhf1LmM17/Nt+0KW4+4/52DS1nh6YV2Z+z1kt3EvfH9XzP0HJ2aHi9 bCWkdsr4nxQfv9h6aTVy+55G4vnsIIZC1dmheUC9+WaT4uYzXh/bhk1nh4b9s/txk+Lu96PE88n+ 2f3forj5hfu06zV2fXrg7Hrk/rx/sUldb3k9Hhjazg5NFX2k4kafxy81Oxn7ho6zQ9NAn0LH2TFI mc8euvmNrZeqkdt/23pJuf++y3hseOLs0Nz7L/vlHhvFdcXhO+s9w/ht/MQsNmuM44SNjW1eGdwo 3oYAAaUgUqclTgJNMDE4GCg4yFmQSxwnoq4LyIGAcQmlQINBFtpxkRGPljaoqlBF20AfUihWBa3S kIZSoEmaQn935g4ehl0D9e6kovzxzdlz9849555z7mMUo0ZMWm16pNnusL1NDttzen6nHLb38/+z +TVF2Z7T5y2/81r3mzYluvsZt+fk/exQlOfzRd+X7OetE+efk/elVYqz9yWn79f2/B2Lcv7WRHl8 O3yODRbseqS5IuZoctSmR5rzdzkf/A/4cI97hMPp83aREt37ip2vO2yPz+9uvi+947C9DsX45jRp t+mRZpli3LFNNtn0SOP0fcmev11Rzl99lMe343A8JQbiLNj1CMP2Kjd+726z6ZFmI+i0sM2mR5p7 84ssq5Uba7ZTie6aMPdQkxabHmmcnp/T5y2Pn5P3lwabvibK9py+LwUczp/T8Hy1WWi36ZGGr4e1 FjpseqRZP8D83yn2+N67Lw2MLrDPQY4Km06x3WF7d/v8nLbXCuZbCNj0SLNfMfZoky6bHmnmRXk+ dr7o+1KbEt37yyqH7fH7tZP7tdP5cxp+p7Cujw4luutvteLsfWntAPN/pwQdzt9Ch+05fV/aC05Y OGbTIw0D3QqTmoALJEDvEXohKAU7QCfar0LmCMpBtkU/JBhj6OwiJPZGaRp4WoxxBOCOJm03bLri hJ0mYfNin+5KAql9eihc2QYS4ibhXJUKwGmAdSfhXHBhbi6P6PM7w4ZOt+U3h++xay26uU9ASvxM +8SIja5jPUtFIi7YK6UGIAM+lxSQL+LB9TywUDDa8I+dFjHJAor4vVr0qcH/PBb1ohYWCd387rLu zXxv2dXnp96vyfL/Nks7PyP5PrRVzD0g2ub3o3PbU0Po5vitwq+1wt8m0WZfP3xc5F5fR+1iXqZv 1m+rdpGHzwHP1ZkBYo7bJMbdLvy1x8lOm6iBJiX092Cr0S55DK7buyS4U93uZ5Ml76H8NM+r9Zb3 Qvlpvn9VcFRwXHC7uol1/vW2vIfyk+d7tZC8Bt4Q2PNu3m/OCLvvKfoa0eV7YXTORYFdt9adGc8V t4hnx23kXbx/Pe+f3Qbn+tHNcbda4tLWj31rfe5X+s6LcH5++UbbXLe23aS7DW7Sw/nZHCae5p2q Tchwfop23Y8JirHmbwdzj7br9vo0ZX/12az01Wez0n99XjH2dP2/FWKejUJvDKOvsPR/Bsy1xbNN 2Df3+1B+blT67oyNtnha/TTb/wBOib58/KWKcWcy9YDQ2wTzhW7C9VmWcZcKv/hafr6ffG4S8TPj Hc5P8wxoEfwF/BLgbqCfE1a9SzHOny6lr67suj2e5jkZLu/mezyeq4Qvq8P04/PhezTff/j9h++5 e8X74XRuc5nSd+/nviwK4acpw8XTmndzjzLPsVB5N8/NBpHDp0U+7XqTyKmpLxb6POXG+mwW/q0X cbhV3s183qo+ef3VW2LVqtx49pntLRa7prTXvzWeJuH8tOa9Qwm/3s33f6YY59Ebwsf/RjYpN8fz VnkP5afZ75ilX4PSt3/x8/n8ALHG00p/eW9X+s7ZW+Rdvw8zERd+/+sUMpzeLNqWKX111RnGzzVK eD/bhJ+h4hkq7/sEXbcJX1sBYcPU59v8HGjeQ5ybxrchQsre/YW0lBWy37MEfPCksNHsScZSfINi GTGpIk5iUq40WWKx0iG3xpj7p6xCatZSPWpFj9Rc8aQSq57pzcwadvIUHoGVmZ45gcWBxkDMI4EZ AVdgZfavf4P2l1fgsWgJHi8txqO2LtMzo25O3eK6t+vcrLax9lu1+2rdJ2ql2rrGbw6d4fe4irlf eKYAL+gFFwBB87EK4GIl0li4MpbNBDHSWGlcMD1j2AGpTBpTMR6/ltfj8eJCPOYvwKO6Jt3TWLO2 5kTNmRp3SbU0vFqqrmleOjR7WeYrj2bnNQDXgWu98ggtMVkt6ZHztMFp6nh/sTwMrlTJE9lJ4GLx 0BPlPDCa5UDmQBYBnzyetcgPsk3gGPrEMVUuwZsPyveznXIh2wOtG/Ig5HEgyw/J2UGXr6JH9gQT ktXDskfOYAzjFMmpwRift0fODKYPQfsEOQt2ffIQOSvo9n3VHwtdYmvw3Kz/45WztOISFS9kaTle Q6amqz50HMfKgQud0/CJmY6BXb6n/NlyKrQcOVcezhLkJDlZToF8QB4l+zCtfHmkXMAS2SQ5Bg7H cAP0t2BqtupPlV10lbnhSix9wGKYjz4W8jMh/0XnYMHbQ+e0TI/6+EE6B0+9dC2Yla0epgt0Vu91 ic4avc4Gi0pUf6YsU68+QwWSR2AQJO/4b0iYo8+N/6/10p+0hCTMkHq1/EJDpmap8f5c+it7DbjY DDrN5gAXfUjn6SOWQO/TafojKns0vc8k+id9Qp+yRPo7XaR/QO6n7iD53vWnUTc7CVxsFG1jI2kv Gwtm0ttsLlgCZFZBB7SMoarHH0ft7BHayrppD7sM3KyE2rWMbJQN7QhOqECoaB9t4D7TDiE3C7lJ yA20DlnGC23BDI+KwqM2bXA6H+EtLSVdnXSE3kLsGqgTTnfSRgRsuj+eNrIqUAti2BY8pWu/oje1 5MEo1HgK4oXX+ZO6aJ0ewJ26EcRpnTZBVXXpHcFtrA/CBje6nld7vH8o/YhXOX/SFuqg7yFw36FW +i4CF09b0PpDeod2I2Dfp+30A5Z47Sf0qlboU8mfQK/i1cv6M46Ws2rgogX0eDA3z+PPogXsWVAL AqAFELuPXmTltIhNB9X4vQEQ4jtXi89QAwdpIQzW00yjSmZrZeO577ODqO7D9BLN1AM4k6YZAZwT TBqM9jn0HMbw0QyahWWy5TDNYnsAL99aLa+Aj1CrpWZyOS9YXKYeoGr6CkZ4/SBe5FX6XDDnPrRO oydgd0gPRFlA9T9EdbSYJdESWsqSGTS2GezWWYLM82cPNBdbiedyaC2Q7aIPoSDrUJB1CEAde0F/ Ixm/hgMfKAe8ZQrbRTUYo4KmBOGj/wmqpKfoa8jCZJpCU5EFmSrhpZsm4z1OJWxVsp2A2HE8f4vW DyFjMFrl9T7TQRV+z4UMQO7RqWSx9A16nl5APqvoGXoWy91DVSj9KqaCqcCN5VABi5PoYSyth9mb IAZRejSIOj9AX6J8rBvEcpSW61URLZ/mzVOn/pjuR+oeoJF6KgqpwOhUFvQW4KWR0PVyLNDUcp6I gqA3X8VyKqU8VsbyqOS6LEUO4w9TKeJWinIaoZub7S+lfLYAuKiIimk04pNLw8kLqdJEKsd8xtBY Gof5xFERvI91X2CvuC+xb4M/Uyy7QvxQGwftMdAOdqPHfrR+SulY4l73ZW3oMJWOuK/g7cfcl/XK yNCKS9VY/0RKY9nAxV6mZLaGMvBrovsjJDEZgU5G4tOw/jJQIHFYnGlsECW5z+u1mihkAiRfl4qQ spAEyTe6GKOf+2Oj/T9Ul2twVsUZx/fyvNFcyA3QYEjeJCIB30FSjOABlPcItChFouK0lDhJa4q2 dDQjCG2VMVoUrQpUsEPFFtB4Tbl4TrQvpIGMonbUjtja1orTIgQ/FJ1SpRVNSPrb5fRDP/ye/549 u2ef3X32cuRj+YgBWxmOTpV6dwbV9WBSpfIRz5mUoK6eQV35f1BeMUzj/fsHvH0M+zwY+Zd8Kp+p IjkiR6WfkLpSjqjFYOS0DMmwGiGfyyn5wg2evK1ekreUGT4sb0XjLnBbBYmxVUmiqDQIL5QP5JDb ruWQvOb1fXnH61/kRa9/kBecd/JOoq9L5HvXK696/Y24HSsjv+O98z6SF6OzMwXhWHlPaXkPH84i 969ywL/9s7zhv/IGpQkueS2p9Vtac7rP167JIaz2sFj2UyCPFy8lze9JNCcvEFyXhmU8a4mlWxWr Em42aZgHVl6WV1jrpZIfnz8+kHCkbFej4E04BMdhAPKUYBeBGe6T7XF5RVAajpYnVBN0wBYQ1Yc9 CCfByjbZqsbQ1lY7EBWn7wrPk1+p9bAVdsF+eBvyKPM4uY8zVOPkl2oNvAt2+KBsjvOLgyVU3Uz2 ZvzZrE6AqEJ5TFUCm578XGWhFdqhA1LyqJwVza8dFZ4v61UdtIGlo+spv141JDm3QQdsgG2wG/Lp zEbVBUY9LZsYuA1SF12YLgzT8ghtPsLAPqJmwBbogrz/y+0BIecBch7gG0vkp3zjQSmOqtIne+Qh t87k4fjcqmAEU7eOkusouY6669RqeBDyGOX744LyQIUlcr/bDWWtmgOLYBP0Q0qek2ejcen2sFye pcwGbxvlHkrdo1bAJuiGFB1eHc27JuiV1VKnKhjw1XJjNDHdFpbKnRS9Ez/XYDf51Ca5m9G424/t mqhiLNXWSLGv9hO6MTFdEtbLSqqtpM2VzPhKdRhSxNbteHk7b25n/p+WVX7+n0r0DrQa/XGiP0r0 h7Iqqk7PIfhW4fkq78oqenJcbsUWYishA5Yl2R7njwiWhd+U29QdYNR8Wc6YLVefwAAIEbycDy2n H8uZ8yXyA7UMDFF9C1HtDjAly4iFZaTa5CbC9SZS72L7fWqJLKXGUvKXUr9FvucuDHKz2ivu4Foo 96lbYStwBGEnwwbYD3+HFANwI3W2YLvA7S3fiUvOCy4LJ0gLM9SK0y2MVCt8m6Za6EoLnWihSgsB KNJMJ5pZDc2qU25gDm/A+Wacb2ZUmvkzbJdv+ThaHOcXBVv2y2IaWkzoLWaM+mRCNGFiwNZYzWTX McJpNI3WoJPRWnQ5egF6IXo+OhEdjxah9aibsQlnFPfrIm6fvVJHGDSR0SejkiYKyHFNFKKuiSK0 AR2RaAn6DFqKTkfLUNdUOeqaGom6pkYRWKPThT08atq7yN3r2eGKI7aaPfYLe4oQKQlvsZ+pEvs5 nFJp0pM9/4HP4RQD9Qxz+Ay/JDX2S6Xtv+1JNdqe4u1oVch7rdZbd1LMwi6EFrgVtkAXsBXZHO/P sS+oFWDUfdg3feoX9vd88ajd4fZge8S+7/XD5Plvif7J7nQ7vn030bcT3Wtf9vpi8vyaPeB1z5nn 4cN2Z1Q+Mui1O/lQns/ojy4J3ClEoq6exAe2Py4ZyajY9+OLrnD6Zjy2LmgLC+wxvD2mjH3VvuK8 oM4rUWW1r3wgykwicZCcojIOC3so8fQ91Hnwx0TfsTv8LRTBkX12l93tR22X0ub6aPb42jDfXG2a 3MFi5purvc6LZ1fXZsNCM8/dn7CLYBMQhbzMLwyOh0Xmq3yhycxxZxxfmOPOtOGDZk5UMcY5ZsIo n46b0MxwZykZ2eiCev8mG51TFeSQ2fW1OTMrRmqcsiX14M0sGu02l6sDYCh+eXROha93ecSq6DXT zTSWSsYEZhrnZUPOTIunBEE2Z78bV1efUXrqtbAwaOg1E1UrcDfVx6L8siCnj8W7bCYb5usjLnT0 RmyLs+Zl3/Gc2RsXFAclPcb9U2RNd0SP9wz36UnxmOpgclimJ6kOOAzDIKoGuxtOgMXq7HidHdat Q9uGDg4dHjoxlGo43Xp6w+m+06IGGwZbBzcMyuAVE2oL6e43VCV0QjeIuTaePak2E5aba93+hF1m 3E9At/kaz4vMdWoFdIE1C1xRBmBBXFIezA/PNQvcdcRchR3ni/dgj4Mx15i5Lv7MQlT8dMx1E9Vr pppGP5qXmEZGs5B5bcShRlpupOVGWmpUKXOZmcm9bKDHzGSULjZTonGZyvAiM4U2+rxtxM6HFdAB uyGltiWpfhgANnFsDbRBu88ZMF+hfht2BXSDVVnblsxlWzKXbRFzmbNL4n0GJ2tNFU5WuaPMVMAY ZqkCxqgmtAltRVvRdrQdLVAndT/tbNVHldZH9YdReXprj/6Qhx16J3fU9fv0Zh8HWKZ6c3x2Ie2a nji/1EXCHh8Juex0QiH7ad344NNHTUYd0dnXS8uDpzol0/GkfrLTZjqe0E9sT2W2u+Q2vQ1RnaWd rZ3tnRJONUPmSz9Dp1EWqxlE3YIbSPRLc8LrkPmnX7wz7VRX3s5A3fN0lPc2SPRSlFm10xK9JNFG O5UumfA8O9ZW+ZKVtsp/YaQt89tEOerySxMtSfKLbRnbhQmrzW6zy/uyy+z0kbPT7PDPO0yX11+j Lv/5RJ9L9FnTFdO2CkeYe1Up1EADZKEJ8szaeKNkVJg196hZYFSpvU41QCtYYqRarYFOsNixjMEo 7BxogzUg+mP9idty7DV2ge9ZE+p6sDDRqxP9eqLz7VW+p1cmz/PsAtfTnN4b/UwyOZ2LNjrZF/3E IL3RvU56ortSyJ5odSoTFuiH9d1EUkY/pDu83q/XchNv6dFriaO1ejUfbNmn3cVilrPE0fejyip+ EPVSfbNbZvpm3ey81Qv1TP4H073aLdasnkv9y6J7p6TdNjMjqqoLziQ4Ll3i0uiKuT4x7X+JqTGJ 7H7zEhUn6nrXIz1B1+NNNqfr4ykXB06j/9JdvbFNXVf83nedhDiJ7SQ4OHFJHNsJSV6IQxhJH0PE jhOmLkOkASS7rCK0mTT2hTA7+1RKoE2hRbSBABsjW6GBfkFTn99jmlPIH61sqrRNYlrXL92kVJs2 rZtK2n1rpWW/c9/Nv021fO7v3PPOu/fcc889577aMNLdtngAwfqrh5r+GyzxCih+uaXVuDwp9Pzy gn1p+LghMf2sg/sPE/7iUuIp49Kkm3TibZO7Oo3Jq1x//WqBPnW9QI/f2FpnxK+juQHJddAPQT8C XQPRK9VX22JG/GpbO5pQGA3WcmCSH7jOUdl+IqbkJtwA0qb8WEzJgPWIq2JSbucVID25rPCSmKTt mtU+V2fkM20Jq0XhWLLqI0YirH2KQ0MP3tZu0QjaHSD1byucBiJgtLcU3lT4ptL/qXaLAhcj3rK6 DCNRKzpEqzx+O4BkUzuQbIkpbFO4HUihqCtsEa20mpnlJTDlVP4DolpqbhHVTjWutmtqDS1RIYpF kfTEJiBpFCosUHKXKJJhqr1kj7uxudp3qP6emNOG2RsgEyTEkDWLaBVHHRi0ZwXm4H+2Ik1UOPmH ttdvROf5h+wQ6K8gwX+vNSCjRxNPaA04VA04Zg3y6EVl8Qij3Idl1QmhDofAlaCNgl4GCf6RVo8V tuf5n2x3qVGS8PE/UHXiv2PDII19xH+LQsH4f1gXq+P/5J8g2Mce8E/YBEhDF6crERbfEPukw/aJ pFxsn8JeIDmhB0iOTyiMK+xWuFckLY6wcfMzfEKegTEgXbwW+AtWfVQelResyipjhl/iEzB5AboT MHWEWv4iP0Xz8FP2eIGezPOM1V4P+L4DJwke8BHceOuXF/lJe3OVwWb5SeYD4fbPR6xyGnmUPw8r cPCfkwf/OXnwn7dx8HEGh+wm3Tia8PAhWX3Q8mHkAJr1WZULvm2Ny+zyNB+kyxTfy/ewYbqO893W twbkGnZbiaRidnRIZo+1/6Bikk85jN2yg2bssbZskYKEZexWTLOumOoaxeAqRUy31d2tGOPrikHy cJjtMcWEwoohTxJjF7uN+JxmYTVhHqE95BF7vFCfvy/epi8YMW2VlcmL6jR9ygwlYuItNgIaA02A boJM0ALoEWgTasAdvHcHdeAOmwc9Bi2DCvHkNsb0iWkaF8+ncT+YRgWo5lvZ++QnzNaxSxoWtDu6 jAmEI9UMxoPYqiBuZ0HEXRA+X0JLmxO0nogq/fKAwRJPKk18QvJKcJW431XinUp2E2SCFkBFSNSV bAA0BBr5H60i7G6AvQOaBwl2AO1R0AnQadAboGVQIUYJ2M0x2qqA1bFH2uG2BgYU09GLlO22z7l1 X8LLi+U6qA3xIrTzvBBtHS+A513WaWRnrsX7x4X+5cdCf/Pf/NHpgbp30P0YB2z5If/le0JffI// BZJ/jHP918D4bHwuPi/mZ936HGgWWeXiBbf+KujCeJGsCGPdvbISjMGrhGeRDiUm9xHGR842tRln z7j0MzBgDPQi6BQofvrgYeM0RjmP6c8hHl4ed+kvUd4aR1CNjfNglz/Q6ffv8ld8ze/d6S/t8Bfv 8Be2+0XMz9r8jds8Tdu8LbqnVfeGI55oxFtb5wnVeb2JMr6IRS9igwRaP3+Vv8ai8oi8ZldVG/FE KwRDoDHQBMgEFfBn+BHm4Yf4YeZhXm0enqPWj3YOg/h4OeQx7sNe+bBXPnjXh7jycC/pc3rmuaeJ L/xijn+OF5b4ZxB/yh//3BOvbHZ84mtulj6JuZq3G15feWlpmae02F1SWli0qVS4CkqRB0tPRHko /CisxcMD4YXwYngpXEDvNIZRExvFNr0Q1O3lXvFYaEG+tSxQVFPm920pq3BtLhvYyc2KftZ/qMes 5MCDPeZOvT8vQoNmh95vbho4kspx/noaUlM7n0cWNl3n8xqgIvnMkVSeV9Pj8SBusJyZ/UPjF9M5 jfWY/LwZOZgiiD+dMkPn8z52KJXTeE/QdF1Mp9NmV/9AijTT+lZzuB+qY1vTZgcxE1vTTMcvk6Em S+3aL6NLqb4C9Ms1NfaZLX3HzNa+od71ynzju2u/7PqRMFEmk3XkmA6S7OgoOqNSiu7oV4wiH2dX zcBrEpKpGRynM3bFFgOlOGmHo8YrMygpZA38FIIIXx30yAqFDF1Pb7ArQwaQRRk1bkaNKIrsXV30 WpHd2Oygv8a4MYNKLtcZdHQqqow/SllWDZxMBRONolmE5WWjSeE20SBrXKPCBiWPKIwqrFcYUlgn wjm+zgfplRX7RKsd22H48kCsWCKWSWhtKjZILfguO0d3nuzaipOpB/h8u0UJCPejpphB9yM7GJFo VVA9WATjK5cDjNIaSa/V0autU3qVhr7Bj9IklIdJqy1mOEyo3lA+mrQq/Maq4Xg4ZbV1SK0pOxQl z05Z/gCNGEz42BXcIW+D7sk7JbUPQR/IXgiaqFnYeBqNZbNfESjqp+JIxjUFzpp6MjUrvokvB3gY Zuy3auulPfstvc1h7EC18cp9aFyj7xE5QDBRzArx1cHlm5p6E1vgvCmvJ8RsrnZ8t+YeFV3J1Dx8 fxeT9so2hE+rsPT83RXP3yXPE5OzqoKGE+NB2bdrpO/v2i2tDjp7cVftxdpmkIuX8NknSygxkQZD hsIH+CZcCwVHrdNZMDG1ITD/AhMIKkn5ZieKaFmdVszZsk66njtMeeD/ooBOT5aOVXblzJPfM9ID K57I4tiunrWsc/pIxB0/qQMu89BqOlmflDK6kzxYRufrhFK00RSeyc6IeyLX9928+Fnf8WO9EvLC 6jtuxi8cM+NDeWFHejElk4lA53mXB8ouT6R3YxbaMDAmxtDUIn3xDDhi6M9hqMpsKpsy2SUhlwkm y3S5xCwZp8+4rrmu0YRtfd87RnPDRhoOylnluizmzugbAj2z3hquBFJ91PHp2nPpWJo7O+P60rVE U/1NOoIg7/r7miNcX0R6mfRidtXtzNlEMp2Nqm1S0ZxVMyt/rHqclp2RRqu9V2boTC56/S6SQ5Ta hrLBVhzPnYWOwmmkkF2RS6dnZaJF8JkBsx1VFOLRzIrn5VyrPQm5YiqvA4M9qLGDss6aNRF03ken E51S6gwPmgURWZAhT+UKeU+uiPXk3MAS1hPkOcaqfLl9bCTH9u3Nu97tY3nX/T6zRDfdeK0k0sO6 uwO6bw//QezJQGGpWQhpUaQnzRj77wDKtktCDQplbmRzdHJlYW0NZW5kb2JqDTQ2IDAgb2JqDTw8 L1N0ZW1WIDg2L0ZvbnROYW1lL05DSUlLSitDb25zb2xhcy9Gb250U3RyZXRjaC9Ob3JtYWwvRm9u dEZpbGUyIDUxIDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTI1Ny9Gb250QkJv eFstMTIyIC0yMzAgNjE5IDk1Ml0vQXNjZW50IDc0Mi9Gb250RmFtaWx5KENvbnNvbGFzKS9DYXBI ZWlnaHQgNjQwL1hIZWlnaHQgLTUxNS9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+ Pg1lbmRvYmoNNDcgMCBvYmoNPDwvU3VidHlwZS9DSURGb250VHlwZTIvRm9udERlc2NyaXB0b3Ig NDYgMCBSL0Jhc2VGb250L05DSUlLSitDb25zb2xhcy9XWzNbNTUwXV0vQ0lEVG9HSURNYXAvSWRl bnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQgMC9PcmRlcmluZyhJZGVudGl0eSkvUmVn aXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNDggMCBvYmoNPDwvTGVu Z3RoIDQ3MjMvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMTA5MzY+PnN0cmVhbQ0KSInsV31o W9cVP+9DH7ZsR4mTVJlYcpUbac4sWY4du47n2ool2VacD9ty2Hups+pZeo7U2paRFZOGBMxoSVCa dqNQOsq2ssLarGxcdV1wYBsdjLGPenSwP/dHYKP7Z9n+6AKlaeOde9+TsbNksEH/GPjdd98953c+ 7rnn3Hf1BBIAeGAZFGg/lY52zPqefgWg8VNEM9mlMmmZCfYANE0BSPtnFs7NSa82/R5g2zJA3WPn Zp+dOfX93/0TdX+K/Y9508jdHlFlAN+ryHfnEWhorruJ/AfIH8jPlS/0V/98Enm02TY7W8wa7+9/ /wX0/Q0A18qccWHB8Un9AEBLBvXJvDFndn5MgzjXCIBaXSiZC3/48O19KMf55R5QUQuUdx29GL0L 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 skPCT9uIRrrwrSwApTymySnhf/OYJn2f6uW/UL0zjt7maEHY6Q7sd40qtN349hJgr3t34SaL9gkc ATUWay2iwWqLJRxxd+IedNbBtxbDJ2dhb0HYNY6OshBlKQ/T8+xD2gI/87PN9C3FJXzOwNhCcBAE wavgebAFVIBi8AKohM+Xs4+Q+xFVsAu0DG0rrfmqYIfFmK8E5XK0lwEum8BLwAN2gCqwDfA1X0DO mSbXIGY3ITZtoCT5x2AjymfQ/gTNlPvw7gw9jn7uCFID5YLYcWNfAXzsJrT12sb2ov3/GCsNfDWg 7aKF2hdgESVpVZQWlYh7I4ECNion1Esn1AUsi3Jht2btEYxPxN13GT6aRDX8HlJvUjOP8fD3NKWG dnL7i/s2G3n4M7QacgNbCLJpEVsAv+XtSfh2Noo+S7Q4MmQ/fO67uBtzcP/5yYPyUpRzhb+VUxLP VvAfop5U4ECu8nWaT2Xwz8NR8aSQlLGKzW6LmiGtmN0ong3iuUM8q8TTL56l4lkinvnimSeeHvHM 4s+sfZLRIfWFf5lxu2PadM+UjpwOOWuvtOe1FH33rmR9fmt6qyzHtOqt8s6Wp/Tmpqd0X4uU0RI1 1dPZFGrqafptk9KYX6Y35JXpO9aV6du9Zfq2+hQ9pk5Kr1tVJzfU7a+TY7ZKVdWN1Z3V7JVlc/Uq v6H7M2fpFV5DLwOlGF6C4etQ9uJ9fp6h5+H9imxDz0bdY2R5s1BftvSbeiaoeXWeXstS9a9NTdXV VMU79QEslxLtnZLygNeRonmlFPLOj06PbojeH62ENClGkzopRPBVaTZJMSRFpTi9LEX2sn6JG1ol SQr3rsl3u3P6nLQ6p8eZu75Haut5NJ8/M/KKerS2HvIWrS/olaSOwl5JXramJz4nr8ist+7bR4mZ OT2J+QXn2caNiZmFOT2NvExoLnS7A+bPHflJbvi2G4//flYHAtVb3GYl4MaQgI8/AnjRK8vL8gp6 FQYFCAoUZMxoMxqNBmOHUWX4jVKjxMg38gzYynDbfoX2ygzffwYARqf1mg0KZW5kc3RyZWFtDWVu ZG9iag00OSAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1s0NCAwIFJdL0Jh c2VGb250L05DSUpBSytBcmlhbFVuaWNvZGVNUy9Ub1VuaWNvZGUgMTMgMCBSL0VuY29kaW5nL0lk ZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTUwIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVz Y2VuZGFudEZvbnRzWzU0IDAgUl0vQmFzZUZvbnQvTkNJSklNK1dpbmdkaW5ncy1SZWd1bGFyL0Vu Y29kaW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTUxIDAgb2JqDTw8L0xlbmd0aCA1 NTUyL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDE0MDA4Pj5zdHJlYW0NCkiJ7Fd7cFTVGf/u 3UcCIWFJIwnsSE68JiTNkzzkUcBNdjckhCBJYGaDEfcmeze7kmTj7hIFi4BCwQUrolWwlgLVFmiL N4htsNbqUK3TqjO0tQx/2EKntHYEAWdkOgLZ/s7Zm5gApdPX9J/s2b339/2+73zne5x7dpckIkqh 9WSisrtaSstXHoz8lWhCBlhvR1+UHTx+YAPkKJE52d/b2S3tTHufyPZVonGZnV2r/as/ra+F7Wv4 XApoqu9UzWLAKU/jckcAREqjBPsp70K+PdAdfXBj+9pCyBeILDu6Qh3qwckHnySSjkDe1q0+2Jv2 TtY0ouyNsGc9are299WZJ4iSHFj/eG9Y672/6iR02S8QZWaQmTzg0yx2RJ9E2TSD2o6SIu06XDwx dUCqPGKzJU9Nel0qJ5m+JDkomSSpwmEzy6k7bbb8KbumWp81VU9kA9KtR/LNz0hOuvPq76++j8u5 9Nml56TSD0//7rTt4tuTZpeefuu3p2eUSZNyJolPRpqsJCnTK8qrKktkRamqKJ8mS+WTb+H8bSVy VeV82Zx2ZaHJc9Usr2Q1nXVmnzW8/cuLVjqUguAubcbgQO6M1EyWnp6dmZaWmW2xf37GYr9cbW6/ vFv+qHhZ9fTdVx4trquw+yqaOq9+XJFr2KWns6w0Eq+HxsbYGBtjY2z8nwdRGh3C1STOZZ+4cpxE VyBJieOayiWvgU00UdphYDPwXgNbgXUDJ9HD0s+4F/M4MNPkeQaWKU2+28Am8EEDm4E3G9gK/CKw BIx45GMGRjym6XSAGJVTGUYVUCMFqYPCFKIIPn6KgnMChalXXFUwQaAeKoGmmrowGDWD66QAdBEh abhrsO7D1QdLp5jBPXbBA7cJiquGexTzuC2DhuGuwRPXRgXL5zNgvrIPUjfuYVoJLjQ858Za/7+U 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 A7iPe+hHH+7iDm7jFm7iBq7jGq7iCi6jF5dwERdwHudwFmfQg2504TROoRMdOIkTOI5jOIojOIx2 tOEQDuIA9qMVLWhGE/ZhL/ZgN3ZhJxrRgB3YjnrUoRY18KIa21CFrdiCzajEJmzEBlSgHGXwwIAb 67EOpSjBWqxBMYqwGquwAsvhQiGWYSmWYDEWYSEWYD7mYS4KkI885CIH2chCJn5HBn7Dr5iD2fgF P+Mn/Igf8H2kv3+Hb/ENvsZXcEDHl0jFF/gcn+FTzMJMfIKPMQPTkYKPMA0f4gO8j6mYgveQDDsS MRmTMBEJiEMsYhCNd/EOJuBtWBGFSGiIwBt4Ha9hPMZhLF7FK3gZL+FFjEE4XpBSBvHnfABlH+wL /L8K+UeAAQCcmggCDQplbmRzdHJlYW0NZW5kb2JqDTUyIDAgb2JqDTw8L1N1YnR5cGUvQ0lERm9u dFR5cGUyL0ZvbnREZXNjcmlwdG9yIDUzIDAgUi9CYXNlRm9udC9OQ0lJTEsrQ29yYmVsL1dbM1sy MDBdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwvU3VwcGxlbWVudCAwL09y ZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAwL1R5cGUvRm9udD4+DWVu ZG9iag01MyAwIG9iag08PC9TdGVtViA3Ni9Gb250TmFtZS9OQ0lJTEsrQ29yYmVsL0ZvbnRTdHJl dGNoL05vcm1hbC9Gb250RmlsZTIgNDggMCBSL0ZvbnRXZWlnaHQgNDAwL0ZsYWdzIDQvRGVzY2Vu dCAtMjU2L0ZvbnRCQm94Wy01NTMgLTIzOSAxMTEwIDk0OV0vQXNjZW50IDc0My9Gb250RmFtaWx5 KENvcmJlbCkvQ2FwSGVpZ2h0IDY1Ni9YSGVpZ2h0IC01MzEvVHlwZS9Gb250RGVzY3JpcHRvci9J dGFsaWNBbmdsZSAwPj4NZW5kb2JqDTU0IDAgb2JqDTw8L1N1YnR5cGUvQ0lERm9udFR5cGUyL0Zv bnREZXNjcmlwdG9yIDU1IDAgUi9CYXNlRm9udC9OQ0lKSU0rV2luZ2RpbmdzLVJlZ3VsYXIvV1sx MjJbNzQ3XV0vQ0lEVG9HSURNYXAvSWRlbnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQg MC9PcmRlcmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+ Pg1lbmRvYmoNNTUgMCBvYmoNPDwvU3RlbVYgMC9Gb250TmFtZS9OQ0lKSU0rV2luZ2RpbmdzLVJl Z3VsYXIvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiA0MSAwIFIvRm9udFdlaWdodCA0MDAv RmxhZ3MgNC9EZXNjZW50IC0yMTAvRm9udEJCb3hbMCAtMjExIDEzNTkgODk5XS9Bc2NlbnQgODk4 L0ZvbnRGYW1pbHkoV2luZ2RpbmdzKS9DYXBIZWlnaHQgMC9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0 YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNNTYgMCBvYmoNPDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVz Y3JpcHRvciA1OCAwIFIvTGFzdENoYXIgMzIvV2lkdGhzWzM0Ml0vQmFzZUZvbnQvVmVyZGFuYS1C b2xkSXRhbGljL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250 Pj4NZW5kb2JqDTU3IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzQ3IDAg Ul0vQmFzZUZvbnQvTkNJSUtKK0NvbnNvbGFzL1RvVW5pY29kZSAxMSAwIFIvRW5jb2RpbmcvSWRl bnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNTggMCBvYmoNPDwvU3RlbVYgMTczLjA1Ni9Gb250 TmFtZS9WZXJkYW5hLUJvbGRJdGFsaWMvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRXZWlnaHQgNzAw L0ZsYWdzIDk2L0Rlc2NlbnQgLTIwOS9Gb250QkJveFstNTM3IC0zMDMgMTcwNSAxMDE0XS9Bc2Nl bnQgMTAwNS9Gb250RmFtaWx5KFZlcmRhbmEpL0NhcEhlaWdodCA3MzQvWEhlaWdodCA1NDYvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAtMTU+Pg1lbmRvYmoNNTkgMCBvYmoNPDwvU3Vi dHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbNTIgMCBSXS9CYXNlRm9udC9OQ0lJTEsrQ29yYmVs L1RvVW5pY29kZSAxMiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoN NjAgMCBvYmoNPDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciAxMDI5IDAgUi9MYXN0 Q2hhciAxNTAvV2lkdGhzWzI3OCAwIDAgMCAwIDAgNzIyIDAgMCAwIDAgMCAyNzggMzMzIDAgMCA1 NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgMzMzIDAgMCAwIDAgNjExIDAg NzIyIDcyMiA3MjIgNzIyIDY2NyA2MTEgMCA3MjIgMjc4IDAgMCA2MTEgODMzIDcyMiA3NzggNjY3 IDAgNzIyIDY2NyA2MTEgNzIyIDY2NyA5NDQgMCA2NjcgMCAwIDAgMCAwIDAgMCA1NTYgNjExIDU1 NiA2MTEgNTU2IDMzMyA2MTEgNjExIDI3OCAyNzggNTU2IDI3OCA4ODkgNjExIDYxMSA2MTEgMCAz ODkgNTU2IDMzMyA2MTEgNTU2IDc3OCA1NTYgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTU2XS9CYXNlRm9udC9BcmlhbC1Cb2xkTVQv Rmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoN NjEgMCBvYmoNPDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciAxMDMxIDAgUi9MYXN0 Q2hhciAxNDYvV2lkdGhzWzI3OCAwIDAgMCAwIDAgNjY3IDAgMzMzIDMzMyAwIDAgMjc4IDMzMyAy NzggMjc4IDU1NiAwIDU1NiAwIDAgNTU2IDAgMCAwIDAgMjc4IDAgMCAwIDAgMCAwIDY2NyAwIDcy MiA3MjIgNjY3IDYxMSA3NzggNzIyIDI3OCA1MDAgNjY3IDU1NiA4MzMgNzIyIDc3OCA2NjcgMCA3 MjIgNjY3IDYxMSA3MjIgMCA5NDQgMCA2NjcgMCAwIDAgMCAwIDAgMCA1NTYgNTU2IDUwMCA1NTYg NTU2IDI3OCA1NTYgNTU2IDIyMiAyMjIgNTAwIDIyMiA4MzMgNTU2IDU1NiA1NTYgNTU2IDMzMyA1 MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1MDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAyMjJdL0Jhc2VGb250L09MQkFMRStBcmlhbE1UL0ZpcnN0Q2hh ciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTYyIDAgb2Jq DTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgNTggMCBSL0xhc3RDaGFyIDMyL1dp ZHRoc1szNDJdL0Jhc2VGb250L1ZlcmRhbmEtQm9sZEl0YWxpYy9GaXJzdENoYXIgMzIvRW5jb2Rp bmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag02MyAwIG9iag08PC9TdWJ0eXBl L1R5cGUwL0Rlc2NlbmRhbnRGb250c1s0NyAwIFJdL0Jhc2VGb250L05ESkRJSStDb25zb2xhcy9U b1VuaWNvZGUgMjQgMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTY0 IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzUyIDAgUl0vQmFzZUZvbnQv TkRKREtKK0NvcmJlbC9Ub1VuaWNvZGUgMjUgMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9G b250Pj4NZW5kb2JqDTY1IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZvbnRzWzU0 IDAgUl0vQmFzZUZvbnQvTkRKRUdMK1dpbmdkaW5ncy1SZWd1bGFyL0VuY29kaW5nL0lkZW50aXR5 LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTY2IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFu dEZvbnRzWzMwIDAgUl0vQmFzZUZvbnQvTkRKRkRKK1N5bWJvbE1UL1RvVW5pY29kZSAzMSAwIFIv RW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNjcgMCBvYmoNPDwvU3VidHlw ZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbNDQgMCBSXS9CYXNlRm9udC9OREpFQUkrQXJpYWxVbmlj b2RlTVMvVG9Vbmljb2RlIDI2IDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVu ZG9iag02OCAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1sxMDQ2IDAgUl0v QmFzZUZvbnQvTkRKRUVLK0FyaWFsTVQvVG9Vbmljb2RlIDI3IDAgUi9FbmNvZGluZy9JZGVudGl0 eS1IL1R5cGUvRm9udD4+DWVuZG9iag02OSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnRE ZXNjcmlwdG9yIDM3IDAgUi9MYXN0Q2hhciAxMjIvV2lkdGhzWzMzMyAwIDAgMCA2NjcgMCAwIDAg MCAwIDAgNjYwIDAgMCAwIDAgNjY3IDY2NyA2NjcgNjY3IDAgNjY3IDY2NyAwIDY2NyA2NjcgMzMz IDAgMCAwIDAgMCAwIDc3OCA3NzggNzc4IDc3OCA3MjIgNjY3IDAgMCAzODkgMCAwIDY2NyA5NDQg ODMzIDgzMyA3MjIgMCA3NzggNzIyIDcyMiA4MzMgMCAxMDAwIDAgMCAwIDAgMCAwIDAgMCAwIDY2 NyA2NjcgNjY3IDY2NyA2NjcgMzg5IDY2NyA2NjcgMzMzIDAgNjY3IDMzMyAxMDAwIDY2NyA2Njcg NjY3IDY2NyA0NDQgNjExIDQ0NCA2NjcgMCA5NDQgNjY3IDYxMSA1NTZdL0Jhc2VGb250L0FyaWFs LUJsYWNrL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4N ZW5kb2JqDTcwIDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgMzkgMCBS L0xhc3RDaGFyIDE0Ni9XaWR0aHNbMjc4IDAgMCAwIDAgODg5IDAgMCAzMzMgMzMzIDAgNTg0IDI3 OCAzMzMgMjc4IDI3OCA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgMCA1NTYgNTU2IDI3OCAw IDAgMCAwIDAgMTAxNSA2NjcgNjY3IDcyMiA3MjIgNjY3IDYxMSAwIDcyMiAyNzggMCAwIDU1NiA4 MzMgMCAwIDY2NyAwIDAgNjY3IDYxMSA3MjIgMCA5NDQgNjY3IDY2NyAwIDAgMCAwIDAgMCAwIDU1 NiA1NTYgNTAwIDU1NiA1NTYgMjc4IDU1NiA1NTYgMjIyIDIyMiA1MDAgMjIyIDgzMyA1NTYgNTU2 IDU1NiA1NTYgMzMzIDUwMCAyNzggNTU2IDUwMCA3MjIgNTAwIDUwMCA1MDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIyMl0vQmFzZUZvbnQvQXJpYWxNVC9G aXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag03 MSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDM4IDAgUi9MYXN0Q2hh ciA1Ny9XaWR0aHNbMjUwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUwMCAwIDUwMCA1 MDAgNTAwIDUwMCAwIDAgNTAwIDUwMF0vQmFzZUZvbnQvVGltZXNOZXdSb21hblBTLUJvbGRNVC9G aXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag03 MiAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDEwMjkgMCBSL0xhc3RD aGFyIDEyMS9XaWR0aHNbMjc4IDAgMCAwIDAgMCA3MjIgMCAwIDAgMCAwIDAgMCAyNzggMCAwIDAg MCAwIDAgNTU2IDAgMCAwIDAgMzMzIDAgMCAwIDAgMCAwIDAgMCA3MjIgMCAwIDAgMCAwIDAgMCAw IDYxMSA4MzMgMCA3NzggMCAwIDAgNjY3IDYxMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYg NjExIDU1NiA2MTEgNTU2IDMzMyA2MTEgNjExIDI3OCAwIDU1NiAyNzggODg5IDYxMSA2MTEgNjEx IDAgMzg5IDU1NiAzMzMgNjExIDU1NiA3NzggMCA1NTZdL0Jhc2VGb250L0FyaWFsLUJvbGRNVC9G aXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag03 MyAwIG9iag08PC9GaXJzdCA3NCAwIFIvQ291bnQgNS9MYXN0IDc1IDAgUj4+DWVuZG9iag03NCAw IG9iag08PC9GaXJzdCA3NyAwIFIvUGFyZW50IDczIDAgUi9BIDc4IDAgUi9OZXh0IDc1IDAgUi9D b3VudCAzL0xhc3QgNzkgMCBSL1NFIDI3NyAwIFIvVGl0bGUoQmVzdCBQcmFjdGljZXMgZm9yIFN1 c3RhaW5hYmxlIENvcnBvcmF0ZSBTb2NpYWwgUmVzcG9uc2liaWxpdHkgMjAwOS5wZGYpPj4NZW5k b2JqDTc1IDAgb2JqDTw8L1BhcmVudCA3MyAwIFIvQSA3NiAwIFIvUHJldiA3NCAwIFIvU0UgOTYg MCBSL1RpdGxlKFJlZ2lzdHJhdGlvbkZvcm0tV2hpdG5leSk+Pg1lbmRvYmoNNzYgMCBvYmoNPDwv RFszMiAwIFIvRml0SCA4NDZdL1MvR29Ubz4+DWVuZG9iag03NyAwIG9iag08PC9QYXJlbnQgNzQg MCBSL0EgODMgMCBSL05leHQgODEgMCBSL1NFIDI4MCAwIFIvVGl0bGUoQ1NSLUNvdmVyLWVuLnBk Zik+Pg1lbmRvYmoNNzggMCBvYmoNPDwvRFsxMDIxIDAgUi9GaXRIIDg0Nl0vUy9Hb1RvPj4NZW5k b2JqDTc5IDAgb2JqDTw8L1BhcmVudCA3NCAwIFIvQSA4MCAwIFIvUHJldiA4MSAwIFIvU0UgMjc1 IDAgUi9UaXRsZShDU1ItZGF5dHdvLWVuKT4+DWVuZG9iag04MCAwIG9iag08PC9EWzE0IDAgUi9G aXRIIDg0Nl0vUy9Hb1RvPj4NZW5kb2JqDTgxIDAgb2JqDTw8L1BhcmVudCA3NCAwIFIvQSA4MiAw IFIvTmV4dCA3OSAwIFIvUHJldiA3NyAwIFIvU0UgMjgxIDAgUi9UaXRsZShDU1ItZGF5b25lLWVu KT4+DWVuZG9iag04MiAwIG9iag08PC9EWzEgMCBSL0ZpdEggODQ2XS9TL0dvVG8+Pg1lbmRvYmoN ODMgMCBvYmoNPDwvRFsxMDIxIDAgUi9GaXRIIDg0Nl0vUy9Hb1RvPj4NZW5kb2JqDTg0IDAgb2Jq DTw8L0sgODUgMCBSL1BhcmVudFRyZWUgODYgMCBSL1BhcmVudFRyZWVOZXh0S2V5IDQvUm9sZU1h cCA4NyAwIFIvVHlwZS9TdHJ1Y3RUcmVlUm9vdC9DbGFzc01hcCA4OCAwIFI+Pg1lbmRvYmoNODUg MCBvYmoNPDwvS1syNzcgMCBSIDk2IDAgUl0vUCA4NCAwIFIvUy9Eb2N1bWVudD4+DWVuZG9iag04 NiAwIG9iag08PC9OdW1zWzBbNjQ5IDAgUiA2NTAgMCBSIDY1MSAwIFIgNjUyIDAgUiA2NTMgMCBS IDY1NCAwIFIgNjU1IDAgUiA2NTYgMCBSIDY1NyAwIFIgNjU4IDAgUiA3NzUgMCBSIDc3NiAwIFIg Nzc3IDAgUiA3NzggMCBSIDc3OSAwIFIgNzgwIDAgUiA3ODEgMCBSIDc0OSAwIFIgNzUwIDAgUiA3 NTEgMCBSIDc1MiAwIFIgNzUzIDAgUiA3NTQgMCBSIDc1NSAwIFIgNzU2IDAgUiA3NTcgMCBSIDc1 OCAwIFIgNzU5IDAgUiA3NjAgMCBSIDc2MSAwIFIgNzQ1IDAgUiA3NDYgMCBSIDc0MSAwIFIgNzQy IDAgUiA3MzkgMCBSIDczMSAwIFIgNzMyIDAgUiA3MzMgMCBSIDczNCAwIFIgNzI1IDAgUiA3MjYg MCBSIDcyNyAwIFIgNzIzIDAgUiA3MTMgMCBSIDcxNCAwIFIgNzE1IDAgUiA3MTYgMCBSIDcwNSAw IFIgNzA2IDAgUiA3MDcgMCBSIDcwOCAwIFIgNjk5IDAgUiA3MDAgMCBSIDcwMSAwIFIgNjkzIDAg UiA2OTQgMCBSIDY5NSAwIFIgNjc1IDAgUiA2NzYgMCBSIDY3NyAwIFIgNjkwIDAgUiA2ODAgMCBS IDY4MSAwIFIgNjgyIDAgUiA2ODMgMCBSIDY3MyAwIFJdMVsyODMgMCBSIDI4NCAwIFIgMjg1IDAg UiAzMDUgMCBSIDMwNiAwIFIgNjM3IDAgUiA2MzcgMCBSIDYzNyAwIFIgNjM3IDAgUiA2MzggMCBS IDYzOSAwIFIgNjQwIDAgUiA1NDkgMCBSIDMxMSAwIFIgNTUwIDAgUiA1NTEgMCBSIDQ1OCAwIFIg NTUyIDAgUiA0NjEgMCBSIDU1MyAwIFIgNTU0IDAgUiA1NTUgMCBSIDU1NiAwIFIgNTU3IDAgUiA1 NTggMCBSIDU1OSAwIFIgNTYwIDAgUiA1NjEgMCBSIDUzMSAwIFIgNTMzIDAgUiA1NjIgMCBSIDU2 MyAwIFIgNTY0IDAgUiA1NjUgMCBSIDU2NiAwIFIgNDUwIDAgUiA1NjcgMCBSIDU2OCAwIFIgNTY5 IDAgUiA0NzAgMCBSIDM0OSAwIFIgNTcwIDAgUiA1NzEgMCBSIDU3MiAwIFIgNTczIDAgUiA1NzQg MCBSIDU3NSAwIFIgNTc2IDAgUiA1NzcgMCBSIDQ5OCAwIFIgNTAwIDAgUiA1NzggMCBSIDU3OSAw IFIgNTgwIDAgUiAzMzMgMCBSIDU4MSAwIFIgNTgyIDAgUiA1ODMgMCBSIDU4NCAwIFIgNTg1IDAg UiA1ODYgMCBSIDMxMyAwIFIgNTg3IDAgUiAzMTQgMCBSIDU4OCAwIFIgNTg5IDAgUiAzMTYgMCBS IDU5MCAwIFIgNTkxIDAgUiA1OTIgMCBSIDQ2MCAwIFIgNDYyIDAgUiA1NDMgMCBSIDU0NSAwIFIg NTM5IDAgUiA1NDEgMCBSIDUzNSAwIFIgNTM3IDAgUiA1MjcgMCBSIDUyOSAwIFIgNTIzIDAgUiA1 MjUgMCBSIDQ2NCAwIFIgNDY1IDAgUiA0NjYgMCBSIDQ2NyAwIFIgNDY4IDAgUiA0NjkgMCBSIDUw NiAwIFIgNTA4IDAgUiA1MDIgMCBSIDUwNCAwIFIgNDcyIDAgUiA0NzMgMCBSIDQ3NCAwIFIgNDc1 IDAgUiA0NzYgMCBSIDQ3NyAwIFIgNDc4IDAgUiA0NzkgMCBSIDQ4MCAwIFIgNDgxIDAgUiA0ODIg MCBSIDQ1NCAwIFIgNDU1IDAgUiA0NTIgMCBSIDQ1MCAwIFIgNDUwIDAgUiA0NDggMCBSIDQ0NiAw IFIgNDQ0IDAgUiAzMDcgMCBSIDMzNSAwIFIgMzM2IDAgUiAzMzcgMCBSIDMzOCAwIFIgMzM5IDAg UiA0MzYgMCBSIDQzOCAwIFIgNDMyIDAgUiA0MzQgMCBSIDQyOCAwIFIgNDMwIDAgUiA0MjQgMCBS IDQyNiAwIFIgMzQxIDAgUiAzNDIgMCBSIDM0MyAwIFIgMzQ0IDAgUiAzNDUgMCBSIDM0NiAwIFIg MzQ3IDAgUiA0MDkgMCBSIDQxMSAwIFIgNDA1IDAgUiA0MDcgMCBSIDQwMSAwIFIgNDAzIDAgUiAz NDkgMCBSIDM1MCAwIFIgMzUxIDAgUiAzNTIgMCBSIDM1MyAwIFIgMzU0IDAgUiAzNTUgMCBSIDM1 NiAwIFIgMzU3IDAgUiAzNTggMCBSIDM1OSAwIFIgMzgzIDAgUiAzODUgMCBSIDM3OSAwIFIgMzgx IDAgUiAzNzUgMCBSIDM3NyAwIFIgMzYxIDAgUiAzNjIgMCBSIDM2MyAwIFIgMzY0IDAgUiAzNjUg MCBSIDMzMyAwIFIgMzMxIDAgUiAzMjkgMCBSIDMyNyAwIFIgMzI1IDAgUiAzMjMgMCBSIDMyMSAw IFIgMzEzIDAgUiAzMTQgMCBSIDMxNSAwIFIgMzE2IDAgUiAzMTEgMCBSIDMxMSAwIFJdMls5OSAw IFIgMTAwIDAgUiAxMDEgMCBSIDEwMiAwIFIgMTAzIDAgUiAxMDQgMCBSIDEwNCAwIFIgMTA0IDAg UiAxMDQgMCBSIDEwNSAwIFIgMTA2IDAgUiAxMDcgMCBSIDEwOCAwIFIgMTA5IDAgUiAxMTAgMCBS IDExMSAwIFIgMTEyIDAgUiAxMTMgMCBSIDExNCAwIFIgMTE1IDAgUiAxMTYgMCBSIDExNyAwIFIg MTE4IDAgUiAxMTkgMCBSIDEyMCAwIFIgMTIxIDAgUiAxMjIgMCBSIDEyMyAwIFIgMTI0IDAgUiAx MjUgMCBSIDEyNiAwIFIgMTI3IDAgUiAxMjggMCBSIDEyOSAwIFIgMTMwIDAgUiAxMzEgMCBSIDEz MiAwIFIgMTMzIDAgUiAxMzQgMCBSIDEzNSAwIFIgMTM2IDAgUiAxMzcgMCBSIDEzOCAwIFIgMTM5 IDAgUiAxNDAgMCBSIDE0MSAwIFIgMTQyIDAgUiAxNDMgMCBSIDE0NCAwIFIgMTQ1IDAgUiAxNDYg MCBSIDE0NyAwIFIgMTQ4IDAgUiAxNDkgMCBSIDE1MCAwIFIgMTUxIDAgUiAxNTIgMCBSIDE1MyAw IFIgMTU0IDAgUiAxNTUgMCBSIDE1NiAwIFIgMTU3IDAgUiAxNTggMCBSIDE1OSAwIFIgMTYwIDAg UiAxNjEgMCBSIDE2MiAwIFIgMTYzIDAgUiAxNjQgMCBSIDE2NSAwIFIgMTY2IDAgUiAxNjcgMCBS IDE2OCAwIFIgMTY5IDAgUiAxNzAgMCBSIDE3MSAwIFIgMTcyIDAgUiAxNzMgMCBSIDE3NCAwIFIg MTc1IDAgUiAxNzYgMCBSIDE3NyAwIFIgMTc4IDAgUiAxNzkgMCBSIDE4MCAwIFIgMTgxIDAgUiAx ODIgMCBSIDE4MyAwIFIgMTg0IDAgUiAxODUgMCBSIDE4NiAwIFIgMTg3IDAgUiAxODggMCBSIDE4 OSAwIFIgMTkwIDAgUiAxOTEgMCBSIDE5MiAwIFIgMTkzIDAgUiAxOTQgMCBSIDE5NSAwIFIgMTk2 IDAgUiAxMDAgMCBSIDE5NyAwIFIgMTk3IDAgUiAxOTggMCBSIDE5OSAwIFIgMjAwIDAgUiAyMDEg MCBSIDIwMiAwIFIgMjAzIDAgUiAyMDQgMCBSIDIwNSAwIFIgMjA2IDAgUiAyMDcgMCBSIDIwOCAw IFIgMjA5IDAgUiAyMTAgMCBSIDIxMSAwIFIgMjEyIDAgUiAyMTMgMCBSIDIxNCAwIFIgMjE1IDAg UiAyMTYgMCBSIDIxNyAwIFIgMjE4IDAgUiAyMTkgMCBSIDIyMCAwIFIgMjIxIDAgUiAyMjIgMCBS IDIyMyAwIFIgMjI0IDAgUiAyMjUgMCBSIDIyNiAwIFIgMjI3IDAgUiAyMjggMCBSIDEzNCAwIFIg MjI5IDAgUiAyMzAgMCBSIDIzMSAwIFIgMjMyIDAgUiAyMzMgMCBSIDIzNCAwIFIgMjM1IDAgUiAy MzYgMCBSIDIzNyAwIFIgMjM4IDAgUiAyMzkgMCBSIDI0MCAwIFIgMjQxIDAgUiAyNDIgMCBSIDI0 MyAwIFIgMjQ0IDAgUiAyNDUgMCBSIDE0NSAwIFIgMTU3IDAgUiAxMDkgMCBSIDI0NiAwIFIgMjQ3 IDAgUiAyNDggMCBSIDE4NyAwIFIgMjQ5IDAgUiAyNTAgMCBSIDI1MSAwIFIgMjUyIDAgUiAyNTMg MCBSIDI1NCAwIFIgMjU1IDAgUiAyNTYgMCBSIDI1NyAwIFIgMjU4IDAgUiAyNTkgMCBSIDI2MCAw IFIgMTM1IDAgUiAyNjEgMCBSIDI2MSAwIFIgMjYyIDAgUiAyNjMgMCBSIDI0NCAwIFIgMjQ1IDAg UiAyNjQgMCBSIDI2NSAwIFIgMjY2IDAgUiAyNjcgMCBSIDI2OCAwIFIgMjY5IDAgUiAyNzAgMCBS IDI3MSAwIFJdMyA5NCAwIFJdPj4NZW5kb2JqDTg3IDAgb2JqDTw8L3ZlcmRhZGEvUC9JbmxpbmVT aGFwZS9GaWd1cmUvRGVmYXVsdC9QL0Ryb3BDYXAvRmlndXJlL091dGxpbmUvU3Bhbi9TdWJzY3Jp cHQvU3Bhbi9TdXBlcnNjcmlwdC9TcGFuL1RPQS9UT0MvVE9GL1RPQy9TdHJpa2VvdXQvU3Bhbi9U ZXh0Qm94L0Rpdi9Ob3JtYWwvUC9FbmRub3RlL05vdGUvRm9vdG5vdGUvTm90ZS8jRTYjOTcjQTAj RTkjOTcjQjQjRTkjOUEjOTQvUC9VbmRlcmxpbmUvU3Bhbi9UT0ZJL1RPQ0kvRnJhbWUvRGl2LyNF NiNBRCNBMyNFNiM5NiM4Ny9QL1NoYXBlL0ZpZ3VyZS9UT0FJL1RPQ0k+Pg1lbmRvYmoNODggMCBv YmoNPDwvI0U2I0FEI0EzI0U2Izk2Izg3KzEgODkgMCBSL05vcm1hbCA5MCAwIFIvI0U2Izk3I0Ew I0U5Izk3I0I0I0U5IzlBIzk0IDkxIDAgUi8jRTYjOTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQrMSA5 MiAwIFIvI0U2I0FEI0EzI0U2Izk2Izg3IDkzIDAgUj4+DWVuZG9iag04OSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag05MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag05MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTMgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNOTQgMCBvYmoNWzk1IDAgUl0NZW5kb2JqDTk1IDAgb2JqDTw8L0sgMC9QIDk2IDAgUi9TL1Bh cnQvUGcgMzIgMCBSPj4NZW5kb2JqDTk2IDAgb2JqDTw8L0luZm8gOTcgMCBSL0sgOTUgMCBSL1Ag ODUgMCBSL1MvUGFydC9NZXRhZGF0YSA5OCAwIFI+Pg1lbmRvYmoNOTcgMCBvYmoNPDwvQ3JlYXRp b25EYXRlKEQ6MjAwOTA0MDcxMDA0NTQrMDgnMDAnKS9BdXRob3IoV2hpdG5leVNoZW4pL0NyZWF0 b3IoUFNjcmlwdDUuZGxsIFZlcnNpb24gNS4yLjIpL1Byb2R1Y2VyKEFjcm9iYXQgRGlzdGlsbGVy IDguMS4wIFwoV2luZG93c1wpKS9Nb2REYXRlKEQ6MjAwOTA0MDcxMDA0NTQrMDgnMDAnKS9UaXRs ZShSZWdpc3RyYXRpb25Gb3JtLVdoaXRuZXkpPj4NZW5kb2JqDTk4IDAgb2JqDTw8L1N1YnR5cGUv WE1ML0xlbmd0aCAxNTQ1L1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLv u78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJh ZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4wLWMzMTYgNDQuMjUzOTIx LCBTdW4gT2N0IDAxIDIwMDYgMTc6MTQ6MzkiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6 Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2Ny aXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn L2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwv ZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAg ICAgICAgICAgICAgIDxyZGY6bGk+V2hpdG5leVNoZW48L3JkZjpsaT4KICAgICAgICAgICAgPC9y ZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAg ICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVs dCI+UmVnaXN0cmF0aW9uRm9ybS1XaGl0bmV5PC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFs dD4KICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxy ZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDov L25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA5LTA0 LTA3VDEwOjA0OjU0KzA4OjAwPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9y VG9vbD5QU2NyaXB0NS5kbGwgVmVyc2lvbiA1LjIuMjwveGFwOkNyZWF0b3JUb29sPgogICAgICAg ICA8eGFwOk1vZGlmeURhdGU+MjAwOS0wNC0wN1QxMDowNDo1NCswODowMDwveGFwOk1vZGlmeURh dGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph Ym91dD0iIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEu My8iPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFjcm9iYXQgRGlzdGlsbGVyIDguMS4wIChXaW5k b3dzKTwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpE ZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwTU09Imh0dHA6Ly9u cy5hZG9iZS5jb20veGFwLzEuMC9tbS8iPgogICAgICAgICA8eGFwTU06RG9jdW1lbnRJRD51dWlk OmE5YjVkZDNmLWI1NzQtNDE0Ni04ODYzLTNlY2M2YTE4NWI2YjwveGFwTU06RG9jdW1lbnRJRD4K ICAgICAgICAgPHhhcE1NOkluc3RhbmNlSUQ+dXVpZDowZWVkYzU4NC00MDUzLTQwZGYtYWQ3MC02 MDhhODE4YThmMTc8L3hhcE1NOkluc3RhbmNlSUQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgog ICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+DQplbmRzdHJlYW0N ZW5kb2JqDTk5IDAgb2JqDTw8L0EgMTAxNSAwIFIvQy8jRTYjOTcjQTAjRTkjOTcjQjQjRTkjOUEj OTQrMS9LIDAvUCAyNzQgMCBSL1MvI0U2Izk3I0EwI0U5Izk3I0I0I0U5IzlBIzk0L1BnIDE0IDAg Uj4+DWVuZG9iag0xMDAgMCBvYmoNPDwvQSAxMDE0IDAgUi9LWzEgMTAxXS9QIDgwMyAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEwMSAwIG9iag08PC9BIDEwMTMg MCBSL0sgMi9QIDI3NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2Jq DTEwMiAwIG9iag08PC9BIDEwMTIgMCBSL0sgMy9QIDI3NCAwIFIvUy9TaGFwZS9QZyAxNCAwIFI+ Pg1lbmRvYmoNMTAzIDAgb2JqDTw8L0EgMTAxMSAwIFIvSyA0L1AgMjc0IDAgUi9TL1NoYXBlL1Bn IDE0IDAgUj4+DWVuZG9iag0xMDQgMCBvYmoNPDwvQSAxMDEwIDAgUi9LWzUgNiA3IDhdL1AgNzk5 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTA1IDAgb2JqDTw8 L0EgMTAwOSAwIFIvSyA5L1AgNzk5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+ Pg1lbmRvYmoNMTA2IDAgb2JqDTw8L0EgMTAwOCAwIFIvSyAxMC9QIDc5OSAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEwNyAwIG9iag08PC9BIDEwMDcgMCBSL0sg MTEvUCA3OTkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xMDgg MCBvYmoNPDwvQSAxMDA2IDAgUi9LIDEyL1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxNCAwIFI+Pg1lbmRvYmoNMTA5IDAgb2JqDTw8L0EgMTAwNSAwIFIvS1sxMyAxNTVdL1AgODEx IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTEwIDAgb2JqDTw8 L0EgMTAwNCAwIFIvSyAxNC9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBS Pj4NZW5kb2JqDTExMSAwIG9iag08PC9BIDEwMDMgMCBSL0sgMTUvUCA4MDAgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xMTIgMCBvYmoNPDwvQSAxMDAyIDAgUi9L IDE2L1AgODAyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTEz IDAgb2JqDTw8L0EgMTAwMSAwIFIvSyAxNy9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTQgMCBSPj4NZW5kb2JqDTExNCAwIG9iag08PC9BIDEwMDAgMCBSL0sgMTgvUCA4MDEgMCBS L1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMTE1IDAgb2JqDTw8L0EgOTk5IDAgUi9LIDE5 L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTE2IDAg b2JqDTw8L0EgOTk4IDAgUi9LIDIwL1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx NCAwIFI+Pg1lbmRvYmoNMTE3IDAgb2JqDTw8L0EgOTk3IDAgUi9LIDIxL1AgODAwIDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTE4IDAgb2JqDTw8L0EgOTk2IDAg Ui9LIDIyL1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoN MTE5IDAgb2JqDTw8L0EgOTk1IDAgUi9LIDIzL1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTIwIDAgb2JqDTw8L0EgOTk0IDAgUi9LIDI0L1AgODAwIDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTIxIDAgb2JqDTw8L0Eg OTkzIDAgUi9LIDI1L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1l bmRvYmoNMTIyIDAgb2JqDTw8L0EgOTkyIDAgUi9LIDI2L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTIzIDAgb2JqDTw8L0EgOTkxIDAgUi9LIDI3L1Ag ODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTI0IDAgb2Jq DTw8L0EgOTkwIDAgUi9LIDI4L1AgODAxIDAgUi9TL3ZlcmRhZGEvUGcgMTQgMCBSPj4NZW5kb2Jq DTEyNSAwIG9iag08PC9BIDk4OSAwIFIvSyAyOS9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEyNiAwIG9iag08PC9BIDk4OCAwIFIvSyAzMC9QIDgwMCAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEyNyAwIG9iag08PC9B IDk4NyAwIFIvSyAzMS9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4N ZW5kb2JqDTEyOCAwIG9iag08PC9BIDk4NiAwIFIvSyAzMi9QIDgwMCAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEyOSAwIG9iag08PC9BIDk4NSAwIFIvSyAzMy9Q IDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEzMCAwIG9i ag08PC9BIDk4NCAwIFIvSyAzNC9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQg MCBSPj4NZW5kb2JqDTEzMSAwIG9iag08PC9BIDk4MyAwIFIvSyAzNS9QIDgwMCAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEzMiAwIG9iag08PC9BIDk4MiAwIFIv SyAzNi9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTEz MyAwIG9iag08PC9BIDk4MSAwIFIvSyAzNy9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTQgMCBSPj4NZW5kb2JqDTEzNCAwIG9iag08PC9BIDk4MCAwIFIvS1szOCAxMzVdL1AgODA4 IDAgUi9TL3ZlcmRhZGEvUGcgMTQgMCBSPj4NZW5kb2JqDTEzNSAwIG9iag08PC9BIDk3OSAwIFIv S1szOSAxNzJdL1AgODE1IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRv YmoNMTM2IDAgb2JqDTw8L0EgOTc4IDAgUi9LIDQwL1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTM3IDAgb2JqDTw8L0EgOTc3IDAgUi9LIDQxL1AgODAx IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTM4IDAgb2JqDTw8 L0EgOTc2IDAgUi9LIDQyL1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+ Pg1lbmRvYmoNMTM5IDAgb2JqDTw8L0EgOTc1IDAgUi9LIDQzL1AgODAwIDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTQwIDAgb2JqDTw8L0EgOTc0IDAgUi9LIDQ0 L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTQxIDAg b2JqDTw8L0EgOTczIDAgUi9LIDQ1L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx NCAwIFI+Pg1lbmRvYmoNMTQyIDAgb2JqDTw8L0EgOTcyIDAgUi9LIDQ2L1AgODAwIDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTQzIDAgb2JqDTw8L0EgOTcxIDAg Ui9LIDQ3L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoN MTQ0IDAgb2JqDTw8L0EgOTcwIDAgUi9LIDQ4L1AgODAwIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTQ1IDAgb2JqDTw8L0EgOTY5IDAgUi9LWzQ5IDE1M10vUCA4 MDkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNDYgMCBvYmoN PDwvQSA5NjggMCBSL0sgNTAvUCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAg Uj4+DWVuZG9iag0xNDcgMCBvYmoNPDwvQSA5NjcgMCBSL0sgNTEvUCA4MDEgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNDggMCBvYmoNPDwvQSA5NjYgMCBSL0sg NTIvUCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNDkg MCBvYmoNPDwvQSA5NjUgMCBSL0sgNTMvUCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDE0IDAgUj4+DWVuZG9iag0xNTAgMCBvYmoNPDwvQSA5NjQgMCBSL0sgNTQvUCA4MDAgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNTEgMCBvYmoNPDwvQSA5NjMg MCBSL0sgNTUvUCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9i ag0xNTIgMCBvYmoNPDwvQSA5NjIgMCBSL0sgNTYvUCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNTMgMCBvYmoNPDwvQSA5NjEgMCBSL0sgNTcvUCA4MDAg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNTQgMCBvYmoNPDwv QSA5NjAgMCBSL0sgNTgvUCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+ DWVuZG9iag0xNTUgMCBvYmoNPDwvQSA5NTkgMCBSL0sgNTkvUCA4MDAgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNTYgMCBvYmoNPDwvQSA5NTggMCBSL0sgNjAv UCA4MDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xNTcgMCBv YmoNPDwvQSA5NTcgMCBSL0tbNjEgMTU0XS9QIDgxMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTQgMCBSPj4NZW5kb2JqDTE1OCAwIG9iag08PC9BIDk1NiAwIFIvSyA2Mi9QIDgwMCAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE1OSAwIG9iag08PC9BIDk1 NSAwIFIvSyA2My9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5k b2JqDTE2MCAwIG9iag08PC9BIDk1NCAwIFIvSyA2NC9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE2MSAwIG9iag08PC9BIDk1MyAwIFIvSyA2NS9QIDgw MCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE2MiAwIG9iag08 PC9BIDk1MiAwIFIvSyA2Ni9QIDgwMCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBS Pj4NZW5kb2JqDTE2MyAwIG9iag08PC9BIDk1MSAwIFIvSyA2Ny9QIDgwMSAwIFIvUy9EZWZhdWx0 L1BnIDE0IDAgUj4+DWVuZG9iag0xNjQgMCBvYmoNPDwvQSA5NTAgMCBSL0sgNjgvUCA4MDEgMCBS L1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMTY1IDAgb2JqDTw8L0EgOTQ5IDAgUi9LIDY5 L1AgODAxIDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTE2NiAwIG9iag08PC9BIDk0 OCAwIFIvSyA3MC9QIDgwMSAwIFIvUy9EZWZhdWx0L1BnIDE0IDAgUj4+DWVuZG9iag0xNjcgMCBv YmoNPDwvQSA5NDcgMCBSL0sgNzEvUCA4MDEgMCBSL1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRv YmoNMTY4IDAgb2JqDTw8L0EgOTQ2IDAgUi9LIDcyL1AgODAxIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTY5IDAgb2JqDTw8L0EgOTQ1IDAgUi9LIDczL1AgODAx IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTE3MCAwIG9iag08PC9BIDk0NCAwIFIv SyA3NC9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE3 MSAwIG9iag08PC9BIDk0MyAwIFIvSyA3NS9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTQgMCBSPj4NZW5kb2JqDTE3MiAwIG9iag08PC9BIDk0MiAwIFIvSyA3Ni9QIDgwMSAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE3MyAwIG9iag08PC9BIDk0 MSAwIFIvSyA3Ny9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5k b2JqDTE3NCAwIG9iag08PC9BIDk0MCAwIFIvSyA3OC9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE3NSAwIG9iag08PC9BIDkzOSAwIFIvSyA3OS9QIDgw MSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE3NiAwIG9iag08 PC9LIDgwL1AgODcyIDAgUi9TL0xibC9QZyAxNCAwIFI+Pg1lbmRvYmoNMTc3IDAgb2JqDTw8L0sg ODEvUCA4ODMgMCBSL1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMTc4IDAgb2JqDTw8L0sg ODIvUCA4NzMgMCBSL1MvTGJsL1BnIDE0IDAgUj4+DWVuZG9iag0xNzkgMCBvYmoNPDwvSyA4My9Q IDg4MSAwIFIvUy9EZWZhdWx0L1BnIDE0IDAgUj4+DWVuZG9iag0xODAgMCBvYmoNPDwvSyA4NC9Q IDg3NCAwIFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2JqDTE4MSAwIG9iag08PC9LIDg1L1AgODc5 IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTE4MiAwIG9iag08PC9LIDg2L1AgODc1 IDAgUi9TL0xibC9QZyAxNCAwIFI+Pg1lbmRvYmoNMTgzIDAgb2JqDTw8L0sgODcvUCA4NzcgMCBS L1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMTg0IDAgb2JqDTw8L0EgOTM4IDAgUi9LIDg4 L1AgODAxIDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTE4NSAwIG9iag08PC9BIDkz NyAwIFIvSyA4OS9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5k b2JqDTE4NiAwIG9iag08PC9BIDkzNiAwIFIvSyA5MC9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE4NyAwIG9iag08PC9BIDkzNSAwIFIvS1s5MSAxNTld L1AgODE0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTg4IDAg b2JqDTw8L0EgOTM0IDAgUi9LIDkyL1AgODAxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx NCAwIFI+Pg1lbmRvYmoNMTg5IDAgb2JqDTw8L0EgOTMzIDAgUi9LIDkzL1AgODAxIDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTkwIDAgb2JqDTw8L0EgOTMyIDAg Ui9LIDk0L1AgODAxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoN MTkxIDAgb2JqDTw8L0EgOTMxIDAgUi9LIDk1L1AgODAxIDAgUi9TL3ZlcmRhZGEvUGcgMTQgMCBS Pj4NZW5kb2JqDTE5MiAwIG9iag08PC9BIDkzMCAwIFIvSyA5Ni9QIDgwMSAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE5MyAwIG9iag08PC9BIDkyOSAwIFIvSyA5 Ny9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE5NCAw IG9iag08PC9BIDkyOCAwIFIvSyA5OC9QIDgwMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MTQgMCBSPj4NZW5kb2JqDTE5NSAwIG9iag08PC9BIDkyNyAwIFIvSyA5OS9QIDgwMSAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTE5NiAwIG9iag08PC9BIDkyNiAw IFIvSyAxMDAvUCA4MDEgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9i ag0xOTcgMCBvYmoNPDwvQSA5MjUgMCBSL0tbMTAyIDEwM10vUCA4MDQgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0xOTggMCBvYmoNPDwvQSA5MjQgMCBSL0sgMTA0 L1AgODA1IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMTk5IDAg b2JqDTw8L0EgOTIzIDAgUi9LIDEwNS9QIDgwNiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MTQgMCBSPj4NZW5kb2JqDTIwMCAwIG9iag08PC9BIDkyMiAwIFIvSyAxMDYvUCA4MDcgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0yMDEgMCBvYmoNPDwvQSA5MjEg MCBSL0sgMTA3L1AgMjc0IDAgUi9TL1NoYXBlL1BnIDE0IDAgUj4+DWVuZG9iag0yMDIgMCBvYmoN PDwvQSA5MjAgMCBSL0sgMTA4L1AgODA4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAw IFI+Pg1lbmRvYmoNMjAzIDAgb2JqDTw8L0EgOTE5IDAgUi9LIDEwOS9QIDgwOCAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTIwNCAwIG9iag08PC9LIDExMC9QIDg0 OSAwIFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2JqDTIwNSAwIG9iag08PC9LIDExMS9QIDg3MCAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTIwNiAwIG9iag08PC9L IDExMi9QIDg1MCAwIFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2JqDTIwNyAwIG9iag08PC9LIDEx My9QIDg2OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTIwOCAw IG9iag08PC9LIDExNC9QIDg1MSAwIFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2JqDTIwOSAwIG9i ag08PC9LIDExNS9QIDg2NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5k b2JqDTIxMCAwIG9iag08PC9LIDExNi9QIDg1MiAwIFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2Jq DTIxMSAwIG9iag08PC9LIDExNy9QIDg2NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQg MCBSPj4NZW5kb2JqDTIxMiAwIG9iag08PC9LIDExOC9QIDg1NyAwIFIvUy9MYmwvUGcgMTQgMCBS Pj4NZW5kb2JqDTIxMyAwIG9iag08PC9LIDExOS9QIDg2MiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMTQgMCBSPj4NZW5kb2JqDTIxNCAwIG9iag08PC9LIDEyMC9QIDg1OCAwIFIvUy9MYmwv UGcgMTQgMCBSPj4NZW5kb2JqDTIxNSAwIG9iag08PC9LIDEyMS9QIDg2MCAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTIxNiAwIG9iag08PC9LIDEyMi9QIDg1NCAw IFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2JqDTIxNyAwIG9iag08PC9LIDEyMy9QIDg1NiAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTIxOCAwIG9iag08PC9BIDkx OCAwIFIvSyAxMjQvUCA4MDggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVu ZG9iag0yMTkgMCBvYmoNPDwvQSA5MTcgMCBSL0sgMTI1L1AgODA4IDAgUi9TL0RlZmF1bHQvUGcg MTQgMCBSPj4NZW5kb2JqDTIyMCAwIG9iag08PC9BIDkxNiAwIFIvSyAxMjYvUCA4MDggMCBSL1Mv RGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMjIxIDAgb2JqDTw8L0EgOTE1IDAgUi9LIDEyNy9Q IDgwOCAwIFIvUy9EZWZhdWx0L1BnIDE0IDAgUj4+DWVuZG9iag0yMjIgMCBvYmoNPDwvQSA5MTQg MCBSL0sgMTI4L1AgODA4IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTIyMyAwIG9i ag08PC9BIDkxMyAwIFIvSyAxMjkvUCA4MDggMCBSL1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRv YmoNMjI0IDAgb2JqDTw8L0EgOTEyIDAgUi9LIDEzMC9QIDgwOCAwIFIvUy9EZWZhdWx0L1BnIDE0 IDAgUj4+DWVuZG9iag0yMjUgMCBvYmoNPDwvQSA5MTEgMCBSL0sgMTMxL1AgODA4IDAgUi9TL0Rl ZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTIyNiAwIG9iag08PC9BIDkxMCAwIFIvSyAxMzIvUCA4 MDggMCBSL1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMjI3IDAgb2JqDTw8L0EgOTA5IDAg Ui9LIDEzMy9QIDgwOCAwIFIvUy9EZWZhdWx0L1BnIDE0IDAgUj4+DWVuZG9iag0yMjggMCBvYmoN PDwvQSA5MDggMCBSL0sgMTM0L1AgODA4IDAgUi9TL3ZlcmRhZGEvUGcgMTQgMCBSPj4NZW5kb2Jq DTIyOSAwIG9iag08PC9BIDkwNyAwIFIvSyAxMzYvUCA4MDggMCBSL1MvdmVyZGFkYS9QZyAxNCAw IFI+Pg1lbmRvYmoNMjMwIDAgb2JqDTw8L0EgOTA2IDAgUi9LIDEzNy9QIDgwOCAwIFIvUy92ZXJk YWRhL1BnIDE0IDAgUj4+DWVuZG9iag0yMzEgMCBvYmoNPDwvQSA5MDUgMCBSL0sgMTM4L1AgODA4 IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTIzMiAwIG9iag08PC9BIDkwNCAwIFIv SyAxMzkvUCA4MDggMCBSL1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMjMzIDAgb2JqDTw8 L0sgMTQwL1AgODQwIDAgUi9TL0xibC9QZyAxNCAwIFI+Pg1lbmRvYmoNMjM0IDAgb2JqDTw8L0sg MTQxL1AgODQ4IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTIzNSAwIG9iag08PC9B IDkwMyAwIFIvSyAxNDIvUCA4MDggMCBSL1MvRGVmYXVsdC9QZyAxNCAwIFI+Pg1lbmRvYmoNMjM2 IDAgb2JqDTw8L0sgMTQzL1AgODQxIDAgUi9TL0xibC9QZyAxNCAwIFI+Pg1lbmRvYmoNMjM3IDAg b2JqDTw8L0sgMTQ0L1AgODQ2IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5kb2JqDTIzOCAw IG9iag08PC9LIDE0NS9QIDg0MiAwIFIvUy9MYmwvUGcgMTQgMCBSPj4NZW5kb2JqDTIzOSAwIG9i ag08PC9LIDE0Ni9QIDg0NCAwIFIvUy9EZWZhdWx0L1BnIDE0IDAgUj4+DWVuZG9iag0yNDAgMCBv YmoNPDwvQSA5MDIgMCBSL0sgMTQ3L1AgODA4IDAgUi9TL0RlZmF1bHQvUGcgMTQgMCBSPj4NZW5k b2JqDTI0MSAwIG9iag08PC9BIDkwMSAwIFIvSyAxNDgvUCA4MDggMCBSL1MvRGVmYXVsdC9QZyAx NCAwIFI+Pg1lbmRvYmoNMjQyIDAgb2JqDTw8L0EgOTAwIDAgUi9LIDE0OS9QIDgwOCAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTI0MyAwIG9iag08PC9BIDg5OSAw IFIvSyAxNTAvUCA4MDggMCBSL1MvdmVyZGFkYS9QZyAxNCAwIFI+Pg1lbmRvYmoNMjQ0IDAgb2Jq DTw8L0EgODk4IDAgUi9LWzE1MSAxNzddL1AgMjczIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxNCAwIFI+Pg1lbmRvYmoNMjQ1IDAgb2JqDTw8L0EgODk3IDAgUi9LWzE1MiAxNzhdL1AgMjcz IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMjQ2IDAgb2JqDTw8 L0EgODk2IDAgUi9LIDE1Ni9QIDgxMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBS Pj4NZW5kb2JqDTI0NyAwIG9iag08PC9BIDg5NSAwIFIvSyAxNTcvUCAyNDggMCBSL1MvSW5saW5l U2hhcGUvUGcgMTQgMCBSPj4NZW5kb2JqDTI0OCAwIG9iag08PC9BIDg5NCAwIFIvS1syNDcgMCBS IDE1OF0vUCA4MTMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0y NDkgMCBvYmoNPDwvSyAxNjAvUCA4MjAgMCBSL1MvTGJsL1BnIDE0IDAgUj4+DWVuZG9iag0yNTAg MCBvYmoNPDwvSyAxNjEvUCA4MzcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+ DWVuZG9iag0yNTEgMCBvYmoNPDwvSyAxNjIvUCA4MjEgMCBSL1MvTGJsL1BnIDE0IDAgUj4+DWVu ZG9iag0yNTIgMCBvYmoNPDwvSyAxNjMvUCA4MzUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDE0IDAgUj4+DWVuZG9iag0yNTMgMCBvYmoNPDwvSyAxNjQvUCA4MjIgMCBSL1MvTGJsL1BnIDE0 IDAgUj4+DWVuZG9iag0yNTQgMCBvYmoNPDwvSyAxNjUvUCA4MzMgMCBSL1MvI0U2I0FEI0EzI0U2 Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0yNTUgMCBvYmoNPDwvSyAxNjYvUCA4MjMgMCBSL1Mv TGJsL1BnIDE0IDAgUj4+DWVuZG9iag0yNTYgMCBvYmoNPDwvSyAxNjcvUCA4MzEgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0yNTcgMCBvYmoNPDwvSyAxNjgvUCA4 MjQgMCBSL1MvTGJsL1BnIDE0IDAgUj4+DWVuZG9iag0yNTggMCBvYmoNPDwvSyAxNjkvUCA4Mjkg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0yNTkgMCBvYmoNPDwv SyAxNzAvUCA4MjUgMCBSL1MvTGJsL1BnIDE0IDAgUj4+DWVuZG9iag0yNjAgMCBvYmoNPDwvSyAx NzEvUCA4MjcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0yNjEg MCBvYmoNPDwvQSA4OTMgMCBSL0tbMTczIDE3NF0vUCA4MTYgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDE0IDAgUj4+DWVuZG9iag0yNjIgMCBvYmoNPDwvQSA4OTIgMCBSL0sgMTc1L1AgODE3 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMjYzIDAgb2JqDTw8 L0EgODkxIDAgUi9LIDE3Ni9QIDgxOCAwIFIvUy9EZWZhdWx0L1BnIDE0IDAgUj4+DWVuZG9iag0y NjQgMCBvYmoNPDwvQSA4OTAgMCBSL0sgMTc5L1AgMjczIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMjY1IDAgb2JqDTw8L0EgODg5IDAgUi9LIDE4MC9QIDI3MyAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTI2NiAwIG9iag08PC9B IDg4OCAwIFIvSyAxODEvUCAyNzMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE0IDAgUj4+ DWVuZG9iag0yNjcgMCBvYmoNPDwvQSA4ODcgMCBSL0sgMTgyL1AgMjczIDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMjY4IDAgb2JqDTw8L0EgODg2IDAgUi9LIDE4 My9QIDI3MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5kb2JqDTI2OSAw IG9iag08PC9BIDg4NSAwIFIvSyAxODQvUCAyNzMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDE0IDAgUj4+DWVuZG9iag0yNzAgMCBvYmoNPDwvQSA4ODQgMCBSL0sgMTg1L1AgMjczIDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNCAwIFI+Pg1lbmRvYmoNMjcxIDAgb2JqDTw8L0EgMjcy IDAgUi9LIDE4Ni9QIDI3MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTQgMCBSPj4NZW5k b2JqDTI3MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yNzMgMCBvYmoNPDwvS1syNDQgMCBSIDI0 NSAwIFIgMjY0IDAgUiAyNjUgMCBSIDI2NiAwIFIgMjY3IDAgUiAyNjggMCBSIDI2OSAwIFIgMjcw IDAgUiAyNzEgMCBSXS9QIDI3NCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTI3NCAwIG9iag08PC9L Wzk5IDAgUiAxMDEgMCBSIDc5OSAwIFIgODAwIDAgUiA4MDEgMCBSIDgwMiAwIFIgODAzIDAgUiA4 MDQgMCBSIDgwNSAwIFIgODA2IDAgUiA4MDcgMCBSIDgwOCAwIFIgODA5IDAgUiA4MTAgMCBSIDgx MSAwIFIgODEyIDAgUiA4MTMgMCBSIDgxNCAwIFIgODE1IDAgUiA4MTYgMCBSIDgxNyAwIFIgODE4 IDAgUiAyNzMgMCBSIDEwMiAwIFIgMTAzIDAgUiAyMDEgMCBSXS9QIDI3NSAwIFIvUy9TZWN0Pj4N ZW5kb2JqDTI3NSAwIG9iag08PC9LIDI3NCAwIFIvUCAyNzYgMCBSL1MvUGFydD4+DWVuZG9iag0y NzYgMCBvYmoNPDwvS1syODAgMCBSIDI4MSAwIFIgMjc1IDAgUl0vUCAyNzcgMCBSL1MvUGFydD4+ DWVuZG9iag0yNzcgMCBvYmoNPDwvSW5mbyAyNzggMCBSL0sgMjc2IDAgUi9QIDg1IDAgUi9TL1Bh cnQvTWV0YWRhdGEgMjc5IDAgUj4+DWVuZG9iag0yNzggMCBvYmoNPDwvQ3JlYXRpb25EYXRlKEQ6 MjAwOTA2MTYxNjUxMzgrMDgnMDAnKS9BdXRob3IoYW15aGUpL0NyZWF0b3IoQWNyb2JhdCBQREZN YWtlciA4LjEgZm9yIFdvcmQpL1Byb2R1Y2VyKEFjcm9iYXQgRGlzdGlsbGVyIDguMS4wIFwoV2lu ZG93c1wpKS9Nb2REYXRlKEQ6MjAwOTA2MTYxNjUxMzgrMDgnMDAnKS9Db21wYW55KGxpbmtpbmdi aXopL1RpdGxlKCk+Pg1lbmRvYmoNMjc5IDAgb2JqDTw8L1N1YnR5cGUvWE1ML0xlbmd0aCAxNDUw L1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBD ZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIg eDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4wLWMzMTYgNDQuMjUzOTIxLCBTdW4gT2N0IDAxIDIw MDYgMTc6MTQ6MzkiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5 OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91 dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8i PgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOS0wNi0xNlQxNjo1MTozOCswODowMDwveGFw Ok1vZGlmeURhdGU+CiAgICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA5LTA2LTE2VDE2OjUxOjM4 KzA4OjAwPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU+MjAwOS0w Ni0xNlQxNjo1MTozOCswODowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVh dG9yVG9vbD5BY3JvYmF0IFBERk1ha2VyIDguMSBmb3IgV29yZDwveGFwOkNyZWF0b3JUb29sPgog ICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9 IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEv Ij4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAg ICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRm OmxpPmFteWhlPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC9kYzpj cmVhdG9yPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiBy ZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20v eGFwLzEuMC9tbS8iPgogICAgICAgICA8eGFwTU06RG9jdW1lbnRJRD51dWlkOjNkOGQwMzE3LWE0 YTUtNDAyNy1hYWJkLWE1OTNiYzU0ZTNkNjwveGFwTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhh cE1NOkluc3RhbmNlSUQ+dXVpZDpjOGU5ZDdlMS1iYzUzLTRlMjItOGFkNC1mODJlYWNjNTk5ZDE8 L3hhcE1NOkluc3RhbmNlSUQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRl c2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5h ZG9iZS5jb20vcGRmLzEuMy8iPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFjcm9iYXQgRGlzdGls bGVyIDguMS4wIChXaW5kb3dzKTwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNjcmlwdGlv bj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pg0KZW5kc3Ry ZWFtDWVuZG9iag0yODAgMCBvYmoNPDwvSyA2NDggMCBSL1AgMjc2IDAgUi9TL1BhcnQ+Pg1lbmRv YmoNMjgxIDAgb2JqDTw8L0sgMjgyIDAgUi9QIDI3NiAwIFIvUy9QYXJ0Pj4NZW5kb2JqDTI4MiAw IG9iag08PC9LWzI4MyAwIFIgMjg0IDAgUiAyODUgMCBSIDI4NiAwIFIgMjg3IDAgUiAyODggMCBS IDI4OSAwIFIgMjkwIDAgUiAyOTEgMCBSIDI5MiAwIFIgMjkzIDAgUiAyOTQgMCBSIDI5NSAwIFIg Mjk2IDAgUiAyOTcgMCBSIDI5OCAwIFIgMjk5IDAgUiAzMDAgMCBSIDMwMSAwIFIgMzAyIDAgUiAz MDMgMCBSIDMwNCAwIFIgMzA1IDAgUiAzMDYgMCBSIDMwNyAwIFJdL1AgMjgxIDAgUi9TL1NlY3Q+ Pg1lbmRvYmoNMjgzIDAgb2JqDTw8L0EgNjQ3IDAgUi9DLyNFNiM5NyNBMCNFOSM5NyNCNCNFOSM5 QSM5NC9LIDAvUCAyODIgMCBSL1MvI0U2Izk3I0EwI0U5Izk3I0I0I0U5IzlBIzk0L1BnIDEgMCBS Pj4NZW5kb2JqDTI4NCAwIG9iag08PC9BIDY0NiAwIFIvQy8jRTYjQUQjQTMjRTYjOTYjODcvSyAx L1AgMjgyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0yODUgMCBv YmoNPDwvQSA2NDUgMCBSL0sgMi9QIDI4MiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAw IFI+Pg1lbmRvYmoNMjg2IDAgb2JqDTw8L0tbNjM3IDAgUiA2MzggMCBSIDYzOSAwIFIgNjQwIDAg Ul0vUCAyODIgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yODcgMCBvYmoNPDwvS1s1NDkgMCBSIDU1 MCAwIFIgNTUxIDAgUiA1NTIgMCBSIDU1MyAwIFIgNTU0IDAgUiA1NTUgMCBSIDU1NiAwIFIgNTU3 IDAgUiA1NTggMCBSIDU1OSAwIFIgNTYwIDAgUiA1NjEgMCBSIDU2MiAwIFIgNTYzIDAgUiA1NjQg MCBSIDU2NSAwIFIgNTY2IDAgUiA1NjcgMCBSIDU2OCAwIFIgNTY5IDAgUiA1NzAgMCBSIDU3MSAw IFIgNTcyIDAgUiA1NzMgMCBSIDU3NCAwIFIgNTc1IDAgUiA1NzYgMCBSIDU3NyAwIFIgNTc4IDAg UiA1NzkgMCBSIDU4MCAwIFIgNTgxIDAgUiA1ODIgMCBSIDU4MyAwIFIgNTg0IDAgUiA1ODUgMCBS IDU4NiAwIFIgNTg3IDAgUiA1ODggMCBSIDU4OSAwIFIgNTkwIDAgUiA1OTEgMCBSIDU5MiAwIFJd L1AgMjgyIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjg4IDAgb2JqDTw8L0tbNDYwIDAgUiA0NjEg MCBSIDQ2MiAwIFIgNDYzIDAgUiA0NjQgMCBSIDQ2NSAwIFIgNDY2IDAgUiA0NjcgMCBSIDQ2OCAw IFIgNDY5IDAgUiA0NzAgMCBSIDQ3MSAwIFIgNDcyIDAgUiA0NzMgMCBSIDQ3NCAwIFIgNDc1IDAg UiA0NzYgMCBSIDQ3NyAwIFIgNDc4IDAgUiA0NzkgMCBSIDQ4MCAwIFIgNDgxIDAgUiA0ODIgMCBS XS9QIDI4MiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTI4OSAwIG9iag08PC9LIDQ1OCAwIFIvUCAy ODIgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yOTAgMCBvYmoNPDwvS1s0NTQgMCBSIDQ1NSAwIFJd L1AgMjgyIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjkxIDAgb2JqDTw8L0sgNDUyIDAgUi9QIDI4 MiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTI5MiAwIG9iag08PC9LIDQ1MCAwIFIvUCAyODIgMCBS L1MvVGV4dEJveD4+DWVuZG9iag0yOTMgMCBvYmoNPDwvSyA0NDggMCBSL1AgMjgyIDAgUi9TL1Rl eHRCb3g+Pg1lbmRvYmoNMjk0IDAgb2JqDTw8L0sgNDQ2IDAgUi9QIDI4MiAwIFIvUy9UZXh0Qm94 Pj4NZW5kb2JqDTI5NSAwIG9iag08PC9LIDQ0NCAwIFIvUCAyODIgMCBSL1MvVGV4dEJveD4+DWVu ZG9iag0yOTYgMCBvYmoNPDwvS1szMzUgMCBSIDMzNiAwIFIgMzM3IDAgUiAzMzggMCBSIDMzOSAw IFIgMzQwIDAgUiAzNDEgMCBSIDM0MiAwIFIgMzQzIDAgUiAzNDQgMCBSIDM0NSAwIFIgMzQ2IDAg UiAzNDcgMCBSIDM0OCAwIFIgMzQ5IDAgUiAzNTAgMCBSIDM1MSAwIFIgMzUyIDAgUiAzNTMgMCBS IDM1NCAwIFIgMzU1IDAgUiAzNTYgMCBSIDM1NyAwIFIgMzU4IDAgUiAzNTkgMCBSIDM2MCAwIFIg MzYxIDAgUiAzNjIgMCBSIDM2MyAwIFIgMzY0IDAgUiAzNjUgMCBSXS9QIDI4MiAwIFIvUy9UZXh0 Qm94Pj4NZW5kb2JqDTI5NyAwIG9iag08PC9LIDMzMyAwIFIvUCAyODIgMCBSL1MvVGV4dEJveD4+ DWVuZG9iag0yOTggMCBvYmoNPDwvSyAzMzEgMCBSL1AgMjgyIDAgUi9TL1RleHRCb3g+Pg1lbmRv YmoNMjk5IDAgb2JqDTw8L0sgMzI5IDAgUi9QIDI4MiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTMw MCAwIG9iag08PC9LIDMyNyAwIFIvUCAyODIgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0zMDEgMCBv YmoNPDwvSyAzMjUgMCBSL1AgMjgyIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMzAyIDAgb2JqDTw8 L0sgMzIxIDAgUi9QIDI4MiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTMwMyAwIG9iag08PC9LWzMx MyAwIFIgMzE0IDAgUiAzMTUgMCBSIDMxNiAwIFJdL1AgMjgyIDAgUi9TL1RleHRCb3g+Pg1lbmRv YmoNMzA0IDAgb2JqDTw8L0sgMzExIDAgUi9QIDI4MiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTMw NSAwIG9iag08PC9BIDMxMCAwIFIvSyAzL1AgMjgyIDAgUi9TL1NoYXBlL1BnIDEgMCBSPj4NZW5k b2JqDTMwNiAwIG9iag08PC9BIDMwOSAwIFIvSyA0L1AgMjgyIDAgUi9TL1NoYXBlL1BnIDEgMCBS Pj4NZW5kb2JqDTMwNyAwIG9iag08PC9BIDMwOCAwIFIvSyAxMTEvUCAyODIgMCBSL1MvU2hhcGUv UGcgMSAwIFI+Pg1lbmRvYmoNMzA4IDAgb2JqDTw8L1BsYWNlbWVudC9CbG9jay9PL0xheW91dC9F bmRJbmRlbnQgNDY2LjAvU3RhcnRJbmRlbnQgLTcxLjAvQkJveFsxOS4wIDc0Ny4wIDM5LjAgNzUz LjBdPj4NZW5kb2JqDTMwOSAwIG9iag08PC9QbGFjZW1lbnQvQmxvY2svTy9MYXlvdXQvRW5kSW5k ZW50IC05MC4wL1N0YXJ0SW5kZW50IC05MC4wL0JCb3hbMC4wIDc1MC4wIDU5NS4wIDg0Mi4wXT4+ DWVuZG9iag0zMTAgMCBvYmoNPDwvUGxhY2VtZW50L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCAt OTAuMC9TdGFydEluZGVudCAtOTAuMC9CQm94WzAuMCAwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2Jq DTMxMSAwIG9iag08PC9BIDMxMiAwIFIvS1sxMyAxNzEgMTcyXS9QIDMwNCAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzEyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTMxMyAwIG9iag08PC9BIDMyMCAwIFIvS1s2MSAxNjddL1AgMzAzIDAgUi9TL0RlZmF1bHQvUGcg MSAwIFI+Pg1lbmRvYmoNMzE0IDAgb2JqDTw8L0EgMzE5IDAgUi9LWzYzIDE2OF0vUCAzMDMgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTMxNSAwIG9iag08PC9BIDMx OCAwIFIvSyAxNjkvUCAzMDMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5k b2JqDTMxNiAwIG9iag08PC9BIDMxNyAwIFIvS1s2NiAxNzBdL1AgMzAzIDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zMTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MzE4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMxOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0z MjAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzIxIDAgb2JqDTw8L0EgMzIyIDAgUi9LWzMyMyAw IFIgMTY2XS9QIDMwMiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoN MzIyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMyMyAwIG9iag08PC9BIDMyNCAwIFIvSyAxNjUv UCAzMjEgMCBSL1MvSW5saW5lU2hhcGUvUGcgMSAwIFI+Pg1lbmRvYmoNMzI0IDAgb2JqDTw8L1Bs YWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFs0MTEuMCA3NjUuMCA1NjcuMCA4MDIuMF0+Pg1l bmRvYmoNMzI1IDAgb2JqDTw8L0EgMzI2IDAgUi9LIDE2NC9QIDMwMSAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzI2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMy NyAwIG9iag08PC9BIDMyOCAwIFIvSyAxNjMvUCAzMDAgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3 L1BnIDEgMCBSPj4NZW5kb2JqDTMyOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMjkgMCBvYmoN PDwvQSAzMzAgMCBSL0sgMTYyL1AgMjk5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag0zMzAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzMxIDAgb2JqDTw8L0EgMzMy IDAgUi9LIDE2MS9QIDI5OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRv YmoNMzMyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMzMyAwIG9iag08PC9BIDMzNCAwIFIvS1s1 NCAxNjBdL1AgMjk3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0z MzQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzM1IDAgb2JqDTw8L0EgNDQzIDAgUi9LIDExMi9Q IDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzM2IDAgb2Jq DTw8L0EgNDQyIDAgUi9LIDExMy9QIDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAw IFI+Pg1lbmRvYmoNMzM3IDAgb2JqDTw8L0EgNDQxIDAgUi9LIDExNC9QIDI5NiAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzM4IDAgb2JqDTw8L0EgNDQwIDAgUi9L IDExNS9QIDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzM5 IDAgb2JqDTw8L0EgNDM5IDAgUi9LIDExNi9QIDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNMzQwIDAgb2JqDTw8L0tbNDE5IDAgUiA0MjAgMCBSIDQyMSAwIFIg NDIyIDAgUl0vUCAyOTYgMCBSL1MvTD4+DWVuZG9iag0zNDEgMCBvYmoNPDwvQSA0MTggMCBSL0sg MTI1L1AgMjk2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zNDIg MCBvYmoNPDwvQSA0MTcgMCBSL0sgMTI2L1AgMjk2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxIDAgUj4+DWVuZG9iag0zNDMgMCBvYmoNPDwvQSA0MTYgMCBSL0sgMTI3L1AgMjk2IDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zNDQgMCBvYmoNPDwvQSA0MTUg MCBSL0sgMTI4L1AgMjk2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9i ag0zNDUgMCBvYmoNPDwvQSA0MTQgMCBSL0sgMTI5L1AgMjk2IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zNDYgMCBvYmoNPDwvQSA0MTMgMCBSL0sgMTMwL1AgMjk2 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zNDcgMCBvYmoNPDwv QSA0MTIgMCBSL0sgMTMxL1AgMjk2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag0zNDggMCBvYmoNPDwvS1szOTcgMCBSIDM5OCAwIFIgMzk5IDAgUl0vUCAyOTYgMCBS L1MvTD4+DWVuZG9iag0zNDkgMCBvYmoNPDwvQSAzOTYgMCBSL0tbNDAgMTM4XS9QIDI5NiAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzUwIDAgb2JqDTw8L0EgMzk1 IDAgUi9LIDEzOS9QIDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRv YmoNMzUxIDAgb2JqDTw8L0EgMzk0IDAgUi9LIDE0MC9QIDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzUyIDAgb2JqDTw8L0EgMzkzIDAgUi9LIDE0MS9QIDI5 NiAwIFIvUy92ZXJkYWRhL1BnIDEgMCBSPj4NZW5kb2JqDTM1MyAwIG9iag08PC9BIDM5MiAwIFIv SyAxNDIvUCAyOTYgMCBSL1MvRGVmYXVsdC9QZyAxIDAgUj4+DWVuZG9iag0zNTQgMCBvYmoNPDwv QSAzOTEgMCBSL0sgMTQzL1AgMjk2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag0zNTUgMCBvYmoNPDwvQSAzOTAgMCBSL0sgMTQ0L1AgMjk2IDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zNTYgMCBvYmoNPDwvQSAzODkgMCBSL0sgMTQ1 L1AgMjk2IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNMzU3IDAgb2JqDTw8L0EgMzg4 IDAgUi9LIDE0Ni9QIDI5NiAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTM1OCAwIG9i ag08PC9BIDM4NyAwIFIvSyAxNDcvUCAyOTYgMCBSL1MvRGVmYXVsdC9QZyAxIDAgUj4+DWVuZG9i ag0zNTkgMCBvYmoNPDwvQSAzODYgMCBSL0sgMTQ4L1AgMjk2IDAgUi9TL0RlZmF1bHQvUGcgMSAw IFI+Pg1lbmRvYmoNMzYwIDAgb2JqDTw8L0tbMzcxIDAgUiAzNzIgMCBSIDM3MyAwIFJdL1AgMjk2 IDAgUi9TL0w+Pg1lbmRvYmoNMzYxIDAgb2JqDTw8L0EgMzcwIDAgUi9LIDE1NS9QIDI5NiAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNMzYyIDAgb2JqDTw8L0EgMzY5 IDAgUi9LIDE1Ni9QIDI5NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRv YmoNMzYzIDAgb2JqDTw8L0EgMzY4IDAgUi9LIDE1Ny9QIDI5NiAwIFIvUy92ZXJkYWRhL1BnIDEg MCBSPj4NZW5kb2JqDTM2NCAwIG9iag08PC9BIDM2NyAwIFIvSyAxNTgvUCAyOTYgMCBSL1MvdmVy ZGFkYS9QZyAxIDAgUj4+DWVuZG9iag0zNjUgMCBvYmoNPDwvQSAzNjYgMCBSL0sgMTU5L1AgMjk2 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag0zNjYgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMzY3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zNjggMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTM2OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzcwIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0zNzEgMCBvYmoNPDwvQSAzODIgMCBSL0tbMzgzIDAgUiAzODQgMCBSXS9QIDM2MCAwIFIv Uy9MST4+DWVuZG9iag0zNzIgMCBvYmoNPDwvQSAzNzggMCBSL0tbMzc5IDAgUiAzODAgMCBSXS9Q IDM2MCAwIFIvUy9MST4+DWVuZG9iag0zNzMgMCBvYmoNPDwvQSAzNzQgMCBSL0tbMzc1IDAgUiAz NzYgMCBSXS9QIDM2MCAwIFIvUy9MST4+DWVuZG9iag0zNzQgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAtMjEuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDIxLjA+Pg1l bmRvYmoNMzc1IDAgb2JqDTw8L0sgMTUzL1AgMzczIDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9i ag0zNzYgMCBvYmoNPDwvSyAzNzcgMCBSL1AgMzczIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTM3NyAw IG9iag08PC9LIDE1NC9QIDM3NiAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTM3OCAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag0zNzkgMCBvYmoNPDwvSyAxNTEvUCAzNzIgMCBSL1Mv TGJsL1BnIDEgMCBSPj4NZW5kb2JqDTM4MCAwIG9iag08PC9LIDM4MSAwIFIvUCAzNzIgMCBSL1Mv TGJvZHk+Pg1lbmRvYmoNMzgxIDAgb2JqDTw8L0sgMTUyL1AgMzgwIDAgUi9TL0RlZmF1bHQvUGcg MSAwIFI+Pg1lbmRvYmoNMzgyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg LTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAyMS4wPj4NZW5kb2JqDTM4MyAwIG9iag08 PC9LIDE0OS9QIDM3MSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNMzg0IDAgb2JqDTw8L0sg Mzg1IDAgUi9QIDM3MSAwIFIvUy9MYm9keT4+DWVuZG9iag0zODUgMCBvYmoNPDwvSyAxNTAvUCAz ODQgMCBSL1MvRGVmYXVsdC9QZyAxIDAgUj4+DWVuZG9iag0zODYgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMzg3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM4OCAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0zODkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzkwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0zOTEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM5MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0z OTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM5NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzk1IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0zOTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM5NyAwIG9iag08 PC9BIDQwOCAwIFIvS1s0MDkgMCBSIDQxMCAwIFJdL1AgMzQ4IDAgUi9TL0xJPj4NZW5kb2JqDTM5 OCAwIG9iag08PC9BIDQwNCAwIFIvS1s0MDUgMCBSIDQwNiAwIFJdL1AgMzQ4IDAgUi9TL0xJPj4N ZW5kb2JqDTM5OSAwIG9iag08PC9BIDQwMCAwIFIvS1s0MDEgMCBSIDQwMiAwIFJdL1AgMzQ4IDAg Ui9TL0xJPj4NZW5kb2JqDTQwMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag00MDEgMCBvYmoN PDwvSyAxMzYvUCAzOTkgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2JqDTQwMiAwIG9iag08PC9L IDQwMyAwIFIvUCAzOTkgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNDAzIDAgb2JqDTw8L0sgMTM3L1Ag NDAyIDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNNDA0IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAyMS4w Pj4NZW5kb2JqDTQwNSAwIG9iag08PC9LIDEzNC9QIDM5OCAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1l bmRvYmoNNDA2IDAgb2JqDTw8L0sgNDA3IDAgUi9QIDM5OCAwIFIvUy9MYm9keT4+DWVuZG9iag00 MDcgMCBvYmoNPDwvSyAxMzUvUCA0MDYgMCBSL1MvRGVmYXVsdC9QZyAxIDAgUj4+DWVuZG9iag00 MDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMjEuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDIxLjA+Pg1lbmRvYmoNNDA5IDAgb2JqDTw8L0sgMTMyL1AgMzk3IDAg Ui9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag00MTAgMCBvYmoNPDwvSyA0MTEgMCBSL1AgMzk3IDAg Ui9TL0xib2R5Pj4NZW5kb2JqDTQxMSAwIG9iag08PC9LIDEzMy9QIDQxMCAwIFIvUy9EZWZhdWx0 L1BnIDEgMCBSPj4NZW5kb2JqDTQxMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDEzIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTQxNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00MTUgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTQxNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDE3IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag00MTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQxOSAwIG9iag08PC9BIDQzNSAwIFIv S1s0MzYgMCBSIDQzNyAwIFJdL1AgMzQwIDAgUi9TL0xJPj4NZW5kb2JqDTQyMCAwIG9iag08PC9B IDQzMSAwIFIvS1s0MzIgMCBSIDQzMyAwIFJdL1AgMzQwIDAgUi9TL0xJPj4NZW5kb2JqDTQyMSAw IG9iag08PC9BIDQyNyAwIFIvS1s0MjggMCBSIDQyOSAwIFJdL1AgMzQwIDAgUi9TL0xJPj4NZW5k b2JqDTQyMiAwIG9iag08PC9BIDQyMyAwIFIvS1s0MjQgMCBSIDQyNSAwIFJdL1AgMzQwIDAgUi9T L0xJPj4NZW5kb2JqDTQyMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0y MS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag00MjQgMCBvYmoNPDwv SyAxMjMvUCA0MjIgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2JqDTQyNSAwIG9iag08PC9LIDQy NiAwIFIvUCA0MjIgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNDI2IDAgb2JqDTw8L0sgMTI0L1AgNDI1 IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNNDI3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAyMS4wPj4N ZW5kb2JqDTQyOCAwIG9iag08PC9LIDEyMS9QIDQyMSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRv YmoNNDI5IDAgb2JqDTw8L0sgNDMwIDAgUi9QIDQyMSAwIFIvUy9MYm9keT4+DWVuZG9iag00MzAg MCBvYmoNPDwvSyAxMjIvUCA0MjkgMCBSL1MvRGVmYXVsdC9QZyAxIDAgUj4+DWVuZG9iag00MzEg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMjEuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDIxLjA+Pg1lbmRvYmoNNDMyIDAgb2JqDTw8L0sgMTE5L1AgNDIwIDAgUi9T L0xibC9QZyAxIDAgUj4+DWVuZG9iag00MzMgMCBvYmoNPDwvSyA0MzQgMCBSL1AgNDIwIDAgUi9T L0xib2R5Pj4NZW5kb2JqDTQzNCAwIG9iag08PC9LIDEyMC9QIDQzMyAwIFIvUy9EZWZhdWx0L1Bn IDEgMCBSPj4NZW5kb2JqDTQzNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag00MzYgMCBvYmoN PDwvSyAxMTcvUCA0MTkgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2JqDTQzNyAwIG9iag08PC9L IDQzOCAwIFIvUCA0MTkgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNDM4IDAgb2JqDTw8L0sgMTE4L1Ag NDM3IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNNDM5IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag00NDAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ0MSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NDQyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ0NCAw IG9iag08PC9BIDQ0NSAwIFIvSyAxMTAvUCAyOTUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDEgMCBSPj4NZW5kb2JqDTQ0NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NDYgMCBvYmoNPDwv QSA0NDcgMCBSL0sgMTA5L1AgMjk0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag00NDcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ0OCAwIG9iag08PC9BIDQ0OSAwIFIv SyAxMDgvUCAyOTMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTQ0 OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NTAgMCBvYmoNPDwvQSA0NTEgMCBSL0tbMzUgMTA2 IDEwN10vUCAyOTIgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTQ1 MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NTIgMCBvYmoNPDwvQSA0NTMgMCBSL0sgMTA1L1Ag MjkxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag00NTMgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNDU0IDAgb2JqDTw8L0EgNDU3IDAgUi9LIDEwMy9QIDI5MCAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDU1IDAgb2JqDTw8L0EgNDU2 IDAgUi9LIDEwNC9QIDI5MCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRv YmoNNDU2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ1NyAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NDU4IDAgb2JqDTw8L0EgNDU5IDAgUi9LIDE2L1AgMjg5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxIDAgUj4+DWVuZG9iag00NTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDYwIDAgb2Jq DTw8L0EgNTQ4IDAgUi9LIDcwL1AgMjg4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag00NjEgMCBvYmoNPDwvQSA1NDcgMCBSL0sgMTgvUCAyODggMCBSL1MvRGVmYXVs dC9QZyAxIDAgUj4+DWVuZG9iag00NjIgMCBvYmoNPDwvQSA1NDYgMCBSL0sgNzEvUCAyODggMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTQ2MyAwIG9iag08PC9LWzUx NiAwIFIgNTE3IDAgUiA1MTggMCBSIDUxOSAwIFIgNTIwIDAgUiA1MjEgMCBSXS9QIDI4OCAwIFIv Uy9MPj4NZW5kb2JqDTQ2NCAwIG9iag08PC9BIDUxNSAwIFIvSyA4Mi9QIDI4OCAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDY1IDAgb2JqDTw8L0EgNTE0IDAgUi9L IDgzL1AgMjg4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag00NjYg MCBvYmoNPDwvQSA1MTMgMCBSL0sgODQvUCAyODggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDEgMCBSPj4NZW5kb2JqDTQ2NyAwIG9iag08PC9BIDUxMiAwIFIvSyA4NS9QIDI4OCAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDY4IDAgb2JqDTw8L0EgNTExIDAg Ui9LIDg2L1AgMjg4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag00 NjkgMCBvYmoNPDwvQSA1MTAgMCBSL0sgODcvUCAyODggMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3 L1BnIDEgMCBSPj4NZW5kb2JqDTQ3MCAwIG9iag08PC9BIDUwOSAwIFIvSyAzOS9QIDI4OCAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDcxIDAgb2JqDTw8L0tbNDk0 IDAgUiA0OTUgMCBSIDQ5NiAwIFJdL1AgMjg4IDAgUi9TL0w+Pg1lbmRvYmoNNDcyIDAgb2JqDTw8 L0EgNDkzIDAgUi9LIDkyL1AgMjg4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag00NzMgMCBvYmoNPDwvQSA0OTIgMCBSL0sgOTMvUCAyODggMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTQ3NCAwIG9iag08PC9BIDQ5MSAwIFIvSyA5NC9Q IDI4OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDc1IDAgb2Jq DTw8L0EgNDkwIDAgUi9LIDk1L1AgMjg4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag00NzYgMCBvYmoNPDwvQSA0ODkgMCBSL0sgOTYvUCAyODggMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTQ3NyAwIG9iag08PC9BIDQ4OCAwIFIvSyA5 Ny9QIDI4OCAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTQ3OCAwIG9iag08PC9BIDQ4 NyAwIFIvSyA5OC9QIDI4OCAwIFIvUy9EZWZhdWx0L1BnIDEgMCBSPj4NZW5kb2JqDTQ3OSAwIG9i ag08PC9BIDQ4NiAwIFIvSyA5OS9QIDI4OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAw IFI+Pg1lbmRvYmoNNDgwIDAgb2JqDTw8L0EgNDg1IDAgUi9LIDEwMC9QIDI4OCAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDgxIDAgb2JqDTw8L0EgNDg0IDAgUi9L IDEwMS9QIDI4OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNDgy IDAgb2JqDTw8L0EgNDgzIDAgUi9LIDEwMi9QIDI4OCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNNDgzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00ODQgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTQ4NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDg2IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTQ4NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00ODggMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNDg5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTQ4LjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCA0OC4wPj4NZW5kb2JqDTQ5MCAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNDkxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00OTIgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTQ5MyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDk0IDAgb2JqDTw8L0EgNTA1IDAgUi9LWzUw NiAwIFIgNTA3IDAgUl0vUCA0NzEgMCBSL1MvTEk+Pg1lbmRvYmoNNDk1IDAgb2JqDTw8L0EgNTAx IDAgUi9LWzUwMiAwIFIgNTAzIDAgUl0vUCA0NzEgMCBSL1MvTEk+Pg1lbmRvYmoNNDk2IDAgb2Jq DTw8L0EgNDk3IDAgUi9LWzQ5OCAwIFIgNDk5IDAgUl0vUCA0NzEgMCBSL1MvTEk+Pg1lbmRvYmoN NDk3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag00OTggMCBvYmoNPDwvSyA0OS9QIDQ5NiAwIFIv Uy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNNDk5IDAgb2JqDTw8L0sgNTAwIDAgUi9QIDQ5NiAwIFIv Uy9MYm9keT4+DWVuZG9iag01MDAgMCBvYmoNPDwvSyA1MC9QIDQ5OSAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTAxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag01 MDIgMCBvYmoNPDwvSyA5MC9QIDQ5NSAwIFIvUy9MYmwvUGcgMSAwIFI+Pg1lbmRvYmoNNTAzIDAg b2JqDTw8L0sgNTA0IDAgUi9QIDQ5NSAwIFIvUy9MYm9keT4+DWVuZG9iag01MDQgMCBvYmoNPDwv SyA5MS9QIDUwMyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTA1 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag01MDYgMCBvYmoNPDwvSyA4OC9QIDQ5NCAwIFIvUy9M YmwvUGcgMSAwIFI+Pg1lbmRvYmoNNTA3IDAgb2JqDTw8L0sgNTA4IDAgUi9QIDQ5NCAwIFIvUy9M Ym9keT4+DWVuZG9iag01MDggMCBvYmoNPDwvSyA4OS9QIDUwNyAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTA5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MTAgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTUxMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01MTIgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNTEzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUxNCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag01MTUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTE2IDAgb2JqDTw8 L0EgNTQyIDAgUi9LWzU0MyAwIFIgNTQ0IDAgUl0vUCA0NjMgMCBSL1MvTEk+Pg1lbmRvYmoNNTE3 IDAgb2JqDTw8L0EgNTM4IDAgUi9LWzUzOSAwIFIgNTQwIDAgUl0vUCA0NjMgMCBSL1MvTEk+Pg1l bmRvYmoNNTE4IDAgb2JqDTw8L0EgNTM0IDAgUi9LWzUzNSAwIFIgNTM2IDAgUl0vUCA0NjMgMCBS L1MvTEk+Pg1lbmRvYmoNNTE5IDAgb2JqDTw8L0EgNTMwIDAgUi9LWzUzMSAwIFIgNTMyIDAgUl0v UCA0NjMgMCBSL1MvTEk+Pg1lbmRvYmoNNTIwIDAgb2JqDTw8L0EgNTI2IDAgUi9LWzUyNyAwIFIg NTI4IDAgUl0vUCA0NjMgMCBSL1MvTEk+Pg1lbmRvYmoNNTIxIDAgb2JqDTw8L0EgNTIyIDAgUi9L WzUyMyAwIFIgNTI0IDAgUl0vUCA0NjMgMCBSL1MvTEk+Pg1lbmRvYmoNNTIyIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAyMS4wPj4NZW5kb2JqDTUyMyAwIG9iag08PC9LIDgwL1AgNTIxIDAgUi9TL0xibC9QZyAxIDAg Uj4+DWVuZG9iag01MjQgMCBvYmoNPDwvSyA1MjUgMCBSL1AgNTIxIDAgUi9TL0xib2R5Pj4NZW5k b2JqDTUyNSAwIG9iag08PC9LIDgxL1AgNTI0IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRv YmoNNTI2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAyMS4wPj4NZW5kb2JqDTUyNyAwIG9iag08PC9LIDc4L1AgNTIw IDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag01MjggMCBvYmoNPDwvSyA1MjkgMCBSL1AgNTIw IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTUyOSAwIG9iag08PC9LIDc5L1AgNTI4IDAgUi9TL0RlZmF1 bHQvUGcgMSAwIFI+Pg1lbmRvYmoNNTMwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAyMS4wPj4NZW5kb2JqDTUzMSAw IG9iag08PC9LIDI4L1AgNTE5IDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag01MzIgMCBvYmoN PDwvSyA1MzMgMCBSL1AgNTE5IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTUzMyAwIG9iag08PC9LIDI5 L1AgNTMyIDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNNTM0IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAy MS4wPj4NZW5kb2JqDTUzNSAwIG9iag08PC9LIDc2L1AgNTE4IDAgUi9TL0xibC9QZyAxIDAgUj4+ DWVuZG9iag01MzYgMCBvYmoNPDwvSyA1MzcgMCBSL1AgNTE4IDAgUi9TL0xib2R5Pj4NZW5kb2Jq DTUzNyAwIG9iag08PC9LIDc3L1AgNTM2IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoN NTM4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAyMS4wPj4NZW5kb2JqDTUzOSAwIG9iag08PC9LIDc0L1AgNTE3IDAg Ui9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag01NDAgMCBvYmoNPDwvSyA1NDEgMCBSL1AgNTE3IDAg Ui9TL0xib2R5Pj4NZW5kb2JqDTU0MSAwIG9iag08PC9LIDc1L1AgNTQwIDAgUi9TL0RlZmF1bHQv UGcgMSAwIFI+Pg1lbmRvYmoNNTQyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAyMS4wPj4NZW5kb2JqDTU0MyAwIG9i ag08PC9LIDcyL1AgNTE2IDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag01NDQgMCBvYmoNPDwv SyA1NDUgMCBSL1AgNTE2IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTU0NSAwIG9iag08PC9LIDczL1Ag NTQ0IDAgUi9TL0RlZmF1bHQvUGcgMSAwIFI+Pg1lbmRvYmoNNTQ2IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag01NDcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTQ4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag01NDkgMCBvYmoNPDwvQSA2MzYgMCBSL0sgMTIvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU1MCAwIG9iag08PC9BIDYzNSAwIFIvSyAxNC9QIDI4NyAw IFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTUxIDAgb2JqDTw8L0Eg NjM0IDAgUi9LIDE1L1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVu ZG9iag01NTIgMCBvYmoNPDwvQSA2MzMgMCBSL0sgMTcvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2 Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU1MyAwIG9iag08PC9BIDYzMiAwIFIvSyAxOS9QIDI4 NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTU0IDAgb2JqDTw8 L0EgNjMxIDAgUi9LIDIwL1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+ DWVuZG9iag01NTUgMCBvYmoNPDwvQSA2MzAgMCBSL0sgMjEvUCAyODcgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU1NiAwIG9iag08PC9BIDYyOSAwIFIvSyAyMi9Q IDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTU3IDAgb2Jq DTw8L0EgNjI4IDAgUi9LIDIzL1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAg Uj4+DWVuZG9iag01NTggMCBvYmoNPDwvQSA2MjcgMCBSL0sgMjQvUCAyODcgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU1OSAwIG9iag08PC9BIDYyNiAwIFIvSyAy NS9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTYwIDAg b2JqDTw8L0EgNjI1IDAgUi9LIDI2L1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx IDAgUj4+DWVuZG9iag01NjEgMCBvYmoNPDwvQSA2MjQgMCBSL0sgMjcvUCAyODcgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU2MiAwIG9iag08PC9BIDYyMyAwIFIv SyAzMC9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTYz IDAgb2JqDTw8L0EgNjIyIDAgUi9LIDMxL1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxIDAgUj4+DWVuZG9iag01NjQgMCBvYmoNPDwvQSA2MjEgMCBSL0sgMzIvUCAyODcgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU2NSAwIG9iag08PC9BIDYyMCAw IFIvSyAzMy9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoN NTY2IDAgb2JqDTw8L0EgNjE5IDAgUi9LIDM0L1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxIDAgUj4+DWVuZG9iag01NjcgMCBvYmoNPDwvQSA2MTggMCBSL0sgMzYvUCAyODcgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU2OCAwIG9iag08PC9BIDYx NyAwIFIvSyAzNy9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRv YmoNNTY5IDAgb2JqDTw8L0EgNjE2IDAgUi9LIDM4L1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01NzAgMCBvYmoNPDwvQSA2MTUgMCBSL0sgNDEvUCAyODcg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU3MSAwIG9iag08PC9B IDYxNCAwIFIvSyA0Mi9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+Pg1l bmRvYmoNNTcyIDAgb2JqDTw8L0EgNjEzIDAgUi9LIDQzL1AgMjg3IDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01NzMgMCBvYmoNPDwvQSA2MTIgMCBSL0sgNDQvUCAy ODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU3NCAwIG9iag08 PC9BIDYxMSAwIFIvSyA0NS9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAwIFI+ Pg1lbmRvYmoNNTc1IDAgb2JqDTw8L0EgNjEwIDAgUi9LIDQ2L1AgMjg3IDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01NzYgMCBvYmoNPDwvQSA2MDkgMCBSL0sgNDcv UCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU3NyAwIG9i ag08PC9BIDYwOCAwIFIvSyA0OC9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMSAw IFI+Pg1lbmRvYmoNNTc4IDAgb2JqDTw8L0EgNjA3IDAgUi9LIDUxL1AgMjg3IDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01NzkgMCBvYmoNPDwvQSA2MDYgMCBSL0sg NTIvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU4MCAw IG9iag08PC9BIDYwNSAwIFIvSyA1My9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MSAwIFI+Pg1lbmRvYmoNNTgxIDAgb2JqDTw8L0EgNjA0IDAgUi9LIDU1L1AgMjg3IDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01ODIgMCBvYmoNPDwvQSA2MDMgMCBS L0sgNTYvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2JqDTU4 MyAwIG9iag08PC9BIDYwMiAwIFIvSyA1Ny9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNNTg0IDAgb2JqDTw8L0EgNjAxIDAgUi9LIDU4L1AgMjg3IDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01ODUgMCBvYmoNPDwvQSA2MDAg MCBSL0sgNTkvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2Jq DTU4NiAwIG9iag08PC9BIDU5OSAwIFIvSyA2MC9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYj ODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTg3IDAgb2JqDTw8L0EgNTk4IDAgUi9LIDYyL1AgMjg3IDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01ODggMCBvYmoNPDwvQSA1 OTcgMCBSL0sgNjQvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5k b2JqDTU4OSAwIG9iag08PC9BIDU5NiAwIFIvSyA2NS9QIDI4NyAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTkwIDAgb2JqDTw8L0EgNTk1IDAgUi9LIDY3L1AgMjg3 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag01OTEgMCBvYmoNPDwv QSA1OTQgMCBSL0sgNjgvUCAyODcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4N ZW5kb2JqDTU5MiAwIG9iag08PC9BIDU5MyAwIFIvSyA2OS9QIDI4NyAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgMSAwIFI+Pg1lbmRvYmoNNTkzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01OTQg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU5NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTk2IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag01OTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU5OCAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNTk5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MDAgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTYwMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjAyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag02MDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYwNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjA1 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MDYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYwNyAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNjA4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MDkgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTYxMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MTEgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNjEyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYxMyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag02MTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjE1IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTYxNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MTcgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNjE4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYxOSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag02MjAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjIxIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMjc1LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNjIyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYyMyAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag02MjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjI1IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTYyNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MjcgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNjI4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYyOSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag02MzAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjMxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTYzMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MzMgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNjM0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYzNSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag02MzYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjM3IDAgb2JqDTw8L0EgNjQ0IDAgUi9LWzUg NiA3IDhdL1AgMjg2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag02 MzggMCBvYmoNPDwvQSA2NDMgMCBSL0sgOS9QIDI4NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMSAwIFI+Pg1lbmRvYmoNNjM5IDAgb2JqDTw8L0EgNjQyIDAgUi9LIDEwL1AgMjg2IDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxIDAgUj4+DWVuZG9iag02NDAgMCBvYmoNPDwvQSA2NDEg MCBSL0sgMTEvUCAyODYgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDEgMCBSPj4NZW5kb2Jq DTY0MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3LjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjQyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag02NDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAyNy4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY0NCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag02NDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY0NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02 NDcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjQ4IDAgb2JqDTw8L0tbNjQ5IDAgUiA2NTAgMCBS IDY1MSAwIFIgNjUyIDAgUiA2NTMgMCBSIDY1NCAwIFIgNjU1IDAgUiA2NTYgMCBSIDY1NyAwIFIg NjU4IDAgUiA2NTkgMCBSIDY2MCAwIFIgNjYxIDAgUiA2NjIgMCBSIDY2MyAwIFIgNjY0IDAgUiA2 NjUgMCBSIDY2NiAwIFIgNjY3IDAgUiA2NjggMCBSIDY2OSAwIFIgNjcwIDAgUiA2NzEgMCBSIDY3 MiAwIFJdL1AgMjgwIDAgUi9TL1NlY3Q+Pg1lbmRvYmoNNjQ5IDAgb2JqDTw8L0EgNzk4IDAgUi9D L05vcm1hbC9LIDAvUCA2NDggMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTY1MCAw IG9iag08PC9BIDc5NyAwIFIvSyAxL1AgNjQ4IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVu ZG9iag02NTEgMCBvYmoNPDwvQSA3OTYgMCBSL0sgMi9QIDY0OCAwIFIvUy9Ob3JtYWwvUGcgMTAy MSAwIFI+Pg1lbmRvYmoNNjUyIDAgb2JqDTw8L0EgNzk1IDAgUi9LIDMvUCA2NDggMCBSL1MvTm9y bWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTY1MyAwIG9iag08PC9BIDc5NCAwIFIvSyA0L1AgNjQ4 IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag02NTQgMCBvYmoNPDwvQSA3OTMgMCBS L0sgNS9QIDY0OCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNjU1IDAgb2JqDTw8 L0EgNzkyIDAgUi9LIDYvUCA2NDggMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTY1 NiAwIG9iag08PC9BIDc5MSAwIFIvSyA3L1AgNjQ4IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+ DWVuZG9iag02NTcgMCBvYmoNPDwvQSA3OTAgMCBSL0sgOC9QIDY0OCAwIFIvUy9Ob3JtYWwvUGcg MTAyMSAwIFI+Pg1lbmRvYmoNNjU4IDAgb2JqDTw8L0EgNzg5IDAgUi9LIDkvUCA2NDggMCBSL1Mv Tm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTY1OSAwIG9iag08PC9LWzc3NSAwIFIgNzc2IDAg UiA3NzcgMCBSIDc3OCAwIFIgNzc5IDAgUiA3ODAgMCBSIDc4MSAwIFJdL1AgNjQ4IDAgUi9TL1Rl eHRCb3g+Pg1lbmRvYmoNNjYwIDAgb2JqDTw8L0tbNzQ5IDAgUiA3NTAgMCBSIDc1MSAwIFIgNzUy IDAgUiA3NTMgMCBSIDc1NCAwIFIgNzU1IDAgUiA3NTYgMCBSIDc1NyAwIFIgNzU4IDAgUiA3NTkg MCBSIDc2MCAwIFIgNzYxIDAgUl0vUCA2NDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NjEgMCBv YmoNPDwvS1s3NDUgMCBSIDc0NiAwIFJdL1AgNjQ4IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNjYy IDAgb2JqDTw8L0tbNzQxIDAgUiA3NDIgMCBSXS9QIDY0OCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2Jq DTY2MyAwIG9iag08PC9LIDczOSAwIFIvUCA2NDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NjQg MCBvYmoNPDwvS1s3MzEgMCBSIDczMiAwIFIgNzMzIDAgUiA3MzQgMCBSXS9QIDY0OCAwIFIvUy9U ZXh0Qm94Pj4NZW5kb2JqDTY2NSAwIG9iag08PC9LWzcyNSAwIFIgNzI2IDAgUiA3MjcgMCBSXS9Q IDY0OCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTY2NiAwIG9iag08PC9LIDcyMSAwIFIvUCA2NDgg MCBSL1MvVGV4dEJveD4+DWVuZG9iag02NjcgMCBvYmoNPDwvS1s3MTMgMCBSIDcxNCAwIFIgNzE1 IDAgUiA3MTYgMCBSXS9QIDY0OCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTY2OCAwIG9iag08PC9L WzcwNSAwIFIgNzA2IDAgUiA3MDcgMCBSIDcwOCAwIFJdL1AgNjQ4IDAgUi9TL1RleHRCb3g+Pg1l bmRvYmoNNjY5IDAgb2JqDTw8L0tbNjk5IDAgUiA3MDAgMCBSIDcwMSAwIFJdL1AgNjQ4IDAgUi9T L1RleHRCb3g+Pg1lbmRvYmoNNjcwIDAgb2JqDTw8L0tbNjkzIDAgUiA2OTQgMCBSIDY5NSAwIFJd L1AgNjQ4IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNjcxIDAgb2JqDTw8L0tbNjc1IDAgUiA2NzYg MCBSIDY3NyAwIFIgNjc4IDAgUl0vUCA2NDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NzIgMCBv YmoNPDwvSyA2NzMgMCBSL1AgNjQ4IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNjczIDAgb2JqDTw8 L0EgNjc0IDAgUi9LIDY1L1AgNjcyIDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag02 NzQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjc1IDAgb2JqDTw8L0EgNjkyIDAgUi9LIDU3L1Ag NjcxIDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag02NzYgMCBvYmoNPDwvQSA2ODkg MCBSL0tbNTggNjkwIDAgUl0vUCA2NzEgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2Jq DTY3NyAwIG9iag08PC9BIDY4OCAwIFIvSyA1OS9QIDY3MSAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAw IFI+Pg1lbmRvYmoNNjc4IDAgb2JqDTw8L0EgNjc5IDAgUi9LWzY4MCAwIFIgNjgxIDAgUiA2ODIg MCBSIDY4MyAwIFJdL1AgNjcxIDAgUi9TL05vcm1hbD4+DWVuZG9iag02NzkgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCA2LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNjgwIDAgb2JqDTw8L0EgNjg3IDAgUi9LIDYxL1AgNjc4IDAgUi9TL0lubGlu ZVNoYXBlL1BnIDEwMjEgMCBSL0FsdCj+/wAxADgAbABvAGcAbyk+Pg1lbmRvYmoNNjgxIDAgb2Jq DTw8L0EgNjg2IDAgUi9LIDYyL1AgNjc4IDAgUi9TL0lubGluZVNoYXBlL1BnIDEwMjEgMCBSL0Fs dCj+/wBMAG8AZwBvKT4+DWVuZG9iag02ODIgMCBvYmoNPDwvQSA2ODUgMCBSL0sgNjMvUCA2Nzgg MCBSL1MvSW5saW5lU2hhcGUvUGcgMTAyMSAwIFIvQWx0KP7/AHcAZQBiAGwAbwBnAG8pPj4NZW5k b2JqDTY4MyAwIG9iag08PC9BIDY4NCAwIFIvSyA2NC9QIDY3OCAwIFIvUy9JbmxpbmVTaGFwZS9Q ZyAxMDIxIDAgUi9BbHQo/v8AbABvAGcAbwAuAGcAaQBmKT4+DWVuZG9iag02ODQgMCBvYmoNPDwv UGxhY2VtZW50L0lubGluZS9PL0xheW91dC9CQm94WzQ4My4wIDQuMCA1ODkuMCA0MC4wXT4+DWVu ZG9iag02ODUgMCBvYmoNPDwvUGxhY2VtZW50L0lubGluZS9PL0xheW91dC9CQm94WzM4Mi4wIDQu MCA0ODEuMCAzNC4wXT4+DWVuZG9iag02ODYgMCBvYmoNPDwvUGxhY2VtZW50L0lubGluZS9PL0xh eW91dC9CQm94WzI5MC4wIDQuMCAzODAuMCAzOC4wXT4+DWVuZG9iag02ODcgMCBvYmoNPDwvUGxh Y2VtZW50L0lubGluZS9PL0xheW91dC9CQm94WzE4Mi4wIDQuMCAyODkuMCAzMi4wXT4+DWVuZG9i ag02ODggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCA2LjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjg5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTY5MCAwIG9iag08PC9BIDY5MSAwIFIvSyA2MC9QIDY3NiAwIFIvUy9JbmxpbmVTaGFwZS9QZyAx MDIxIDAgUi9BbHQo/v8AQwA6AFxcAFcAaABpAHQAbgBlAHkAXFwATQBhAHIAdABpAG4ATABpAG4A awBpAG4AZwBCAHUAcwBpAG4AZQBzAHMAQwBvAG4AcwB1AGwAdABpAG4AZwBcXABDAG8AcgBwAG8A cgBhAHQAZQBGAGkAbABlAHMAXFwARABvAGMAdQBtAGUAbgB0AHMAXFwATABvAGcAbwBcXABMAE8A RwBPAEEALQBzAG0AYQBsAGwALgBqAHAAZyk+Pg1lbmRvYmoNNjkxIDAgb2JqDTw8L1BsYWNlbWVu dC9JbmxpbmUvTy9MYXlvdXQvQkJveFsxNzYuMCA2NC4wIDMzOS4wIDEwNC4wXT4+DWVuZG9iag02 OTIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjkzIDAgb2JqDTw8L0EgNjk4IDAgUi9LIDU0L1Ag NjcwIDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag02OTQgMCBvYmoNPDwvQSA2OTcg MCBSL0sgNTUvUCA2NzAgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTY5NSAwIG9i ag08PC9BIDY5NiAwIFIvSyA1Ni9QIDY3MCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRv YmoNNjk2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY5NyAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag02OTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjk5IDAgb2JqDTw8L0EgNzA0IDAgUi9LIDUx L1AgNjY5IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03MDAgMCBvYmoNPDwvQSA3 MDMgMCBSL0sgNTIvUCA2NjkgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTcwMSAw IG9iag08PC9BIDcwMiAwIFIvSyA1My9QIDY2OSAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1l bmRvYmoNNzAyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcwMyAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag03MDQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzA1IDAgb2JqDTw8L0EgNzEyIDAgUi9L IDQ3L1AgNjY4IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03MDYgMCBvYmoNPDwv QSA3MTEgMCBSL0sgNDgvUCA2NjggMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTcw NyAwIG9iag08PC9BIDcxMCAwIFIvSyA0OS9QIDY2OCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+ Pg1lbmRvYmoNNzA4IDAgb2JqDTw8L0EgNzA5IDAgUi9LIDUwL1AgNjY4IDAgUi9TL05vcm1hbC9Q ZyAxMDIxIDAgUj4+DWVuZG9iag03MDkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzEwIDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTcxMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MTIgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNzEzIDAgb2JqDTw8L0EgNzIwIDAgUi9LIDQzL1AgNjY3IDAgUi9T L05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03MTQgMCBvYmoNPDwvQSA3MTkgMCBSL0sgNDQv UCA2NjcgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTcxNSAwIG9iag08PC9BIDcx OCAwIFIvSyA0NS9QIDY2NyAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzE2IDAg b2JqDTw8L0EgNzE3IDAgUi9LIDQ2L1AgNjY3IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVu ZG9iag03MTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzE4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTcxOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MjAgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNzIxIDAgb2JqDTw8L0EgNzIyIDAgUi9LIDcyMyAwIFIvUCA2NjYgMCBSL1MvTm9ybWFsPj4N ZW5kb2JqDTcyMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MjMgMCBvYmoNPDwvQSA3MjQgMCBS L0sgNDIvUCA3MjEgMCBSL1MvSW5saW5lU2hhcGUvUGcgMTAyMSAwIFIvQWx0KP7/AEMAOgBcXABX AGgAaQB0AG4AZQB5AFxcAE0AYQByAHQAaQBuAEwAaQBuAGsAaQBuAGcAQgB1AHMAaQBuAGUAcwBz AEMAbwBuAHMAdQBsAHQAaQBuAGcAXFwAQwBvAHIAcABvAHIAYQB0AGUARgBpAGwAZQBzAFxcAEQA bwBjAHUAbQBlAG4AdABzAFxcAEwAbwBnAG8AXFwATABPAEcATwBBAC0AcwBtAGEAbABsAC4AagBw AGcpPj4NZW5kb2JqDTcyNCAwIG9iag08PC9QbGFjZW1lbnQvSW5saW5lL08vTGF5b3V0L0JCb3hb NDM2LjAgNjIxLjAgNTgxLjAgNjUwLjBdPj4NZW5kb2JqDTcyNSAwIG9iag08PC9BIDczMCAwIFIv SyAzOS9QIDY2NSAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzI2IDAgb2JqDTw8 L0EgNzI5IDAgUi9LIDQwL1AgNjY1IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03 MjcgMCBvYmoNPDwvQSA3MjggMCBSL0sgNDEvUCA2NjUgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBS Pj4NZW5kb2JqDTcyOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MjkgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNzMwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTczMSAwIG9iag08PC9BIDczOCAw IFIvSyAzNS9QIDY2NCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzMyIDAgb2Jq DTw8L0EgNzM3IDAgUi9LIDM2L1AgNjY0IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9i ag03MzMgMCBvYmoNPDwvQSA3MzYgMCBSL0sgMzcvUCA2NjQgMCBSL1MvTm9ybWFsL1BnIDEwMjEg MCBSPj4NZW5kb2JqDTczNCAwIG9iag08PC9BIDczNSAwIFIvSyAzOC9QIDY2NCAwIFIvUy9Ob3Jt YWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzM1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MzYgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNzM3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTczOCAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag03MzkgMCBvYmoNPDwvQSA3NDAgMCBSL0sgMzQvUCA2NjMgMCBS L1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTc0MCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag03NDEgMCBvYmoNPDwvQSA3NDQgMCBSL0sgMzIvUCA2NjIgMCBSL1MvTm9ybWFsL1BnIDEwMjEg MCBSPj4NZW5kb2JqDTc0MiAwIG9iag08PC9BIDc0MyAwIFIvSyAzMy9QIDY2MiAwIFIvUy9Ob3Jt YWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzQzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc0NCAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NDUgMCBvYmoNPDwvQSA3NDggMCBSL0sgMzAvUCA2NjEg MCBSL1MvRGVmYXVsdC9QZyAxMDIxIDAgUj4+DWVuZG9iag03NDYgMCBvYmoNPDwvQSA3NDcgMCBS L0sgMzEvUCA2NjEgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTc0NyAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag03NDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc0OSAwIG9iag08PC9B IDc3NCAwIFIvSyAxNy9QIDY2MCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzUw IDAgb2JqDTw8L0EgNzczIDAgUi9LIDE4L1AgNjYwIDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+ DWVuZG9iag03NTEgMCBvYmoNPDwvQSA3NzIgMCBSL0sgMTkvUCA2NjAgMCBSL1MvTm9ybWFsL1Bn IDEwMjEgMCBSPj4NZW5kb2JqDTc1MiAwIG9iag08PC9BIDc3MSAwIFIvSyAyMC9QIDY2MCAwIFIv Uy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzUzIDAgb2JqDTw8L0EgNzcwIDAgUi9LIDIx L1AgNjYwIDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03NTQgMCBvYmoNPDwvQSA3 NjkgMCBSL0sgMjIvUCA2NjAgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTc1NSAw IG9iag08PC9BIDc2OCAwIFIvSyAyMy9QIDY2MCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1l bmRvYmoNNzU2IDAgb2JqDTw8L0EgNzY3IDAgUi9LIDI0L1AgNjYwIDAgUi9TL05vcm1hbC9QZyAx MDIxIDAgUj4+DWVuZG9iag03NTcgMCBvYmoNPDwvQSA3NjYgMCBSL0sgMjUvUCA2NjAgMCBSL1Mv Tm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTc1OCAwIG9iag08PC9BIDc2NSAwIFIvSyAyNi9Q IDY2MCAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzU5IDAgb2JqDTw8L0EgNzY0 IDAgUi9LIDI3L1AgNjYwIDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03NjAgMCBv YmoNPDwvQSA3NjMgMCBSL0sgMjgvUCA2NjAgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5k b2JqDTc2MSAwIG9iag08PC9BIDc2MiAwIFIvSyAyOS9QIDY2MCAwIFIvUy9Ob3JtYWwvUGcgMTAy MSAwIFI+Pg1lbmRvYmoNNzYyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc2MyAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag03NjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzY1IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTc2NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NjcgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNzY4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE5 LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAxOS4wPj4NZW5kb2JqDTc2OSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xOS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMTkuMD4+DWVuZG9iag03NzAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzcxIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE5LjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAxOS4wPj4NZW5kb2JqDTc3MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NzMgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNzc0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc3NSAwIG9iag08 PC9BIDc4OCAwIFIvSyAxMC9QIDY1OSAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoN Nzc2IDAgb2JqDTw8L0EgNzg3IDAgUi9LIDExL1AgNjU5IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAg Uj4+DWVuZG9iag03NzcgMCBvYmoNPDwvQSA3ODYgMCBSL0sgMTIvUCA2NTkgMCBSL1MvTm9ybWFs L1BnIDEwMjEgMCBSPj4NZW5kb2JqDTc3OCAwIG9iag08PC9BIDc4NSAwIFIvSyAxMy9QIDY1OSAw IFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+Pg1lbmRvYmoNNzc5IDAgb2JqDTw8L0EgNzg0IDAgUi9L IDE0L1AgNjU5IDAgUi9TL05vcm1hbC9QZyAxMDIxIDAgUj4+DWVuZG9iag03ODAgMCBvYmoNPDwv QSA3ODMgMCBSL0sgMTUvUCA2NTkgMCBSL1MvTm9ybWFsL1BnIDEwMjEgMCBSPj4NZW5kb2JqDTc4 MSAwIG9iag08PC9BIDc4MiAwIFIvSyAxNi9QIDY1OSAwIFIvUy9Ob3JtYWwvUGcgMTAyMSAwIFI+ Pg1lbmRvYmoNNzgyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc4MyAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag03ODQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc4NSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAxMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTc4NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzg3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03 ODggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMTIuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03ODkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzkw IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc5MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03OTIg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzkzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc5NCAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03OTUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzk2IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc5NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03OTggMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNzk5IDAgb2JqDTw8L0tbMTA0IDAgUiAxMDUgMCBSIDEwNiAw IFIgMTA3IDAgUl0vUCAyNzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag04MDAgMCBvYmoNPDwvS1sx MDggMCBSIDExMCAwIFIgMTExIDAgUiAxMTMgMCBSIDExNSAwIFIgMTE2IDAgUiAxMTcgMCBSIDEx OCAwIFIgMTE5IDAgUiAxMjAgMCBSIDEyMSAwIFIgMTIyIDAgUiAxMjMgMCBSIDEyNSAwIFIgMTI2 IDAgUiAxMjcgMCBSIDEyOCAwIFIgMTI5IDAgUiAxMzAgMCBSIDEzMSAwIFIgMTMyIDAgUiAxMzMg MCBSIDEzNiAwIFIgMTM4IDAgUiAxMzkgMCBSIDE0MCAwIFIgMTQxIDAgUiAxNDIgMCBSIDE0MyAw IFIgMTQ0IDAgUiAxNDYgMCBSIDE0OCAwIFIgMTQ5IDAgUiAxNTAgMCBSIDE1MSAwIFIgMTUyIDAg UiAxNTMgMCBSIDE1NCAwIFIgMTU1IDAgUiAxNTYgMCBSIDE1OCAwIFIgMTU5IDAgUiAxNjAgMCBS IDE2MSAwIFIgMTYyIDAgUl0vUCAyNzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag04MDEgMCBvYmoN PDwvS1sxNjMgMCBSIDExNCAwIFIgMTY0IDAgUiAxNjUgMCBSIDE2NiAwIFIgMTI0IDAgUiAxNjcg MCBSIDE2OCAwIFIgMTY5IDAgUiAxNzAgMCBSIDE3MSAwIFIgMTcyIDAgUiAxMzcgMCBSIDE3MyAw IFIgMTc0IDAgUiAxNzUgMCBSIDg3MSAwIFIgMTg0IDAgUiAxODUgMCBSIDE0NyAwIFIgMTg2IDAg UiAxODggMCBSIDE4OSAwIFIgMTkwIDAgUiAxOTEgMCBSIDE5MiAwIFIgMTkzIDAgUiAxOTQgMCBS IDE5NSAwIFIgMTk2IDAgUl0vUCAyNzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag04MDIgMCBvYmoN PDwvSyAxMTIgMCBSL1AgMjc0IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNODAzIDAgb2JqDTw8L0sg MTAwIDAgUi9QIDI3NCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTgwNCAwIG9iag08PC9LIDE5NyAw IFIvUCAyNzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag04MDUgMCBvYmoNPDwvSyAxOTggMCBSL1Ag Mjc0IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNODA2IDAgb2JqDTw8L0sgMTk5IDAgUi9QIDI3NCAw IFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTgwNyAwIG9iag08PC9LIDIwMCAwIFIvUCAyNzQgMCBSL1Mv VGV4dEJveD4+DWVuZG9iag04MDggMCBvYmoNPDwvS1syMDIgMCBSIDIwMyAwIFIgODM4IDAgUiAy MTggMCBSIDIxOSAwIFIgMjIwIDAgUiAyMjEgMCBSIDIyMiAwIFIgMjIzIDAgUiAyMjQgMCBSIDIy NSAwIFIgMjI2IDAgUiAyMjcgMCBSIDIyOCAwIFIgMTM0IDAgUiAyMjkgMCBSIDIzMCAwIFIgMjMx IDAgUiAyMzIgMCBSIDgzOSAwIFIgMjM1IDAgUiAyNDAgMCBSIDI0MSAwIFIgMjQyIDAgUiAyNDMg MCBSXS9QIDI3NCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTgwOSAwIG9iag08PC9LIDE0NSAwIFIv UCAyNzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag04MTAgMCBvYmoNPDwvSyAxNTcgMCBSL1AgMjc0 IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNODExIDAgb2JqDTw8L0sgMTA5IDAgUi9QIDI3NCAwIFIv Uy9UZXh0Qm94Pj4NZW5kb2JqDTgxMiAwIG9iag08PC9LIDI0NiAwIFIvUCAyNzQgMCBSL1MvVGV4 dEJveD4+DWVuZG9iag04MTMgMCBvYmoNPDwvSyAyNDggMCBSL1AgMjc0IDAgUi9TL1RleHRCb3g+ Pg1lbmRvYmoNODE0IDAgb2JqDTw8L0tbMTg3IDAgUiA4MTkgMCBSXS9QIDI3NCAwIFIvUy9UZXh0 Qm94Pj4NZW5kb2JqDTgxNSAwIG9iag08PC9LIDEzNSAwIFIvUCAyNzQgMCBSL1MvVGV4dEJveD4+ DWVuZG9iag04MTYgMCBvYmoNPDwvSyAyNjEgMCBSL1AgMjc0IDAgUi9TL1RleHRCb3g+Pg1lbmRv YmoNODE3IDAgb2JqDTw8L0sgMjYyIDAgUi9QIDI3NCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTgx OCAwIG9iag08PC9LIDI2MyAwIFIvUCAyNzQgMCBSL1MvVGV4dEJveD4+DWVuZG9iag04MTkgMCBv YmoNPDwvS1s4MjAgMCBSIDgyMSAwIFIgODIyIDAgUiA4MjMgMCBSIDgyNCAwIFIgODI1IDAgUl0v UCA4MTQgMCBSL1MvTD4+DWVuZG9iag04MjAgMCBvYmoNPDwvQSA4MzYgMCBSL0tbMjQ5IDAgUiA4 MzcgMCBSXS9QIDgxOSAwIFIvUy9MST4+DWVuZG9iag04MjEgMCBvYmoNPDwvQSA4MzQgMCBSL0tb MjUxIDAgUiA4MzUgMCBSXS9QIDgxOSAwIFIvUy9MST4+DWVuZG9iag04MjIgMCBvYmoNPDwvQSA4 MzIgMCBSL0tbMjUzIDAgUiA4MzMgMCBSXS9QIDgxOSAwIFIvUy9MST4+DWVuZG9iag04MjMgMCBv YmoNPDwvQSA4MzAgMCBSL0tbMjU1IDAgUiA4MzEgMCBSXS9QIDgxOSAwIFIvUy9MST4+DWVuZG9i ag04MjQgMCBvYmoNPDwvQSA4MjggMCBSL0tbMjU3IDAgUiA4MjkgMCBSXS9QIDgxOSAwIFIvUy9M ST4+DWVuZG9iag04MjUgMCBvYmoNPDwvQSA4MjYgMCBSL0tbMjU5IDAgUiA4MjcgMCBSXS9QIDgx OSAwIFIvUy9MST4+DWVuZG9iag04MjYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNODI3IDAg b2JqDTw8L0sgMjYwIDAgUi9QIDgyNSAwIFIvUy9MYm9keT4+DWVuZG9iag04MjggMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDM2LjA+Pg1lbmRvYmoNODI5IDAgb2JqDTw8L0sgMjU4IDAgUi9QIDgyNCAwIFIvUy9MYm9k eT4+DWVuZG9iag04MzAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTgu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNODMxIDAgb2JqDTw8L0sg MjU2IDAgUi9QIDgyMyAwIFIvUy9MYm9keT4+DWVuZG9iag04MzIgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+ Pg1lbmRvYmoNODMzIDAgb2JqDTw8L0sgMjU0IDAgUi9QIDgyMiAwIFIvUy9MYm9keT4+DWVuZG9i ag04MzQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoNODM1IDAgb2JqDTw8L0sgMjUyIDAgUi9Q IDgyMSAwIFIvUy9MYm9keT4+DWVuZG9iag04MzYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM2LjA+Pg1lbmRvYmoN ODM3IDAgb2JqDTw8L0sgMjUwIDAgUi9QIDgyMCAwIFIvUy9MYm9keT4+DWVuZG9iag04MzggMCBv YmoNPDwvS1s4NDkgMCBSIDg1MCAwIFIgODUxIDAgUiA4NTIgMCBSIDg1MyAwIFIgODU0IDAgUl0v UCA4MDggMCBSL1MvTD4+DWVuZG9iag04MzkgMCBvYmoNPDwvS1s4NDAgMCBSIDg0MSAwIFIgODQy IDAgUl0vUCA4MDggMCBSL1MvTD4+DWVuZG9iag04NDAgMCBvYmoNPDwvQSA4NDcgMCBSL0tbMjMz IDAgUiA4NDggMCBSXS9QIDgzOSAwIFIvUy9MST4+DWVuZG9iag04NDEgMCBvYmoNPDwvQSA4NDUg MCBSL0tbMjM2IDAgUiA4NDYgMCBSXS9QIDgzOSAwIFIvUy9MST4+DWVuZG9iag04NDIgMCBvYmoN PDwvQSA4NDMgMCBSL0tbMjM4IDAgUiA4NDQgMCBSXS9QIDgzOSAwIFIvUy9MST4+DWVuZG9iag04 NDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAyNC4wPj4NZW5kb2JqDTg0NCAwIG9iag08PC9LIDIzOSAwIFIvUCA4NDIg MCBSL1MvTGJvZHk+Pg1lbmRvYmoNODQ1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjQuMD4+DWVuZG9iag04NDYgMCBv YmoNPDwvSyAyMzcgMCBSL1AgODQxIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTg0NyAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMjEuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDI0LjA+Pg1lbmRvYmoNODQ4IDAgb2JqDTw8L0sgMjM0IDAgUi9QIDg0MCAwIFIvUy9MYm9keT4+ DWVuZG9iag04NDkgMCBvYmoNPDwvQSA4NjkgMCBSL0tbMjA0IDAgUiA4NzAgMCBSXS9QIDgzOCAw IFIvUy9MST4+DWVuZG9iag04NTAgMCBvYmoNPDwvQSA4NjcgMCBSL0tbMjA2IDAgUiA4NjggMCBS XS9QIDgzOCAwIFIvUy9MST4+DWVuZG9iag04NTEgMCBvYmoNPDwvQSA4NjUgMCBSL0tbMjA4IDAg UiA4NjYgMCBSXS9QIDgzOCAwIFIvUy9MST4+DWVuZG9iag04NTIgMCBvYmoNPDwvQSA4NjMgMCBS L0tbMjEwIDAgUiA4NjQgMCBSXS9QIDgzOCAwIFIvUy9MST4+DWVuZG9iag04NTMgMCBvYmoNPDwv S1s4NTcgMCBSIDg1OCAwIFJdL1AgODM4IDAgUi9TL0w+Pg1lbmRvYmoNODU0IDAgb2JqDTw8L0Eg ODU1IDAgUi9LWzIxNiAwIFIgODU2IDAgUl0vUCA4MzggMCBSL1MvTEk+Pg1lbmRvYmoNODU1IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMjEuMD4+DWVuZG9iag04NTYgMCBvYmoNPDwvSyAyMTcgMCBSL1AgODU0IDAgUi9T L0xib2R5Pj4NZW5kb2JqDTg1NyAwIG9iag08PC9BIDg2MSAwIFIvS1syMTIgMCBSIDg2MiAwIFJd L1AgODUzIDAgUi9TL0xJPj4NZW5kb2JqDTg1OCAwIG9iag08PC9BIDg1OSAwIFIvS1syMTQgMCBS IDg2MCAwIFJdL1AgODUzIDAgUi9TL0xJPj4NZW5kb2JqDTg1OSAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAtMTguMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM5LjA+Pg1l bmRvYmoNODYwIDAgb2JqDTw8L0sgMjE1IDAgUi9QIDg1OCAwIFIvUy9MYm9keT4+DWVuZG9iag04 NjEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE4LjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAzOS4wPj4NZW5kb2JqDTg2MiAwIG9iag08PC9LIDIxMyAwIFIvUCA4NTcg MCBSL1MvTGJvZHk+Pg1lbmRvYmoNODYzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9iag04NjQgMCBv YmoNPDwvSyAyMTEgMCBSL1AgODUyIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTg2NSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMjEuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDIxLjA+Pg1lbmRvYmoNODY2IDAgb2JqDTw8L0sgMjA5IDAgUi9QIDg1MSAwIFIvUy9MYm9keT4+ DWVuZG9iag04NjcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTIxLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAyMS4wPj4NZW5kb2JqDTg2OCAwIG9iag08PC9LIDIwNyAw IFIvUCA4NTAgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNODY5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMjEuMD4+DWVuZG9i ag04NzAgMCBvYmoNPDwvSyAyMDUgMCBSL1AgODQ5IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTg3MSAw IG9iag08PC9LWzg3MiAwIFIgODczIDAgUiA4NzQgMCBSIDg3NSAwIFJdL1AgODAxIDAgUi9TL0w+ Pg1lbmRvYmoNODcyIDAgb2JqDTw8L0EgODgyIDAgUi9LWzE3NiAwIFIgODgzIDAgUl0vUCA4NzEg MCBSL1MvTEk+Pg1lbmRvYmoNODczIDAgb2JqDTw8L0EgODgwIDAgUi9LWzE3OCAwIFIgODgxIDAg Ul0vUCA4NzEgMCBSL1MvTEk+Pg1lbmRvYmoNODc0IDAgb2JqDTw8L0EgODc4IDAgUi9LWzE4MCAw IFIgODc5IDAgUl0vUCA4NzEgMCBSL1MvTEk+Pg1lbmRvYmoNODc1IDAgb2JqDTw8L0EgODc2IDAg Ui9LWzE4MiAwIFIgODc3IDAgUl0vUCA4NzEgMCBSL1MvTEk+Pg1lbmRvYmoNODc2IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMjQuMD4+DWVuZG9iag04NzcgMCBvYmoNPDwvSyAxODMgMCBSL1AgODc1IDAgUi9TL0xib2R5 Pj4NZW5kb2JqDTg3OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMjEuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDI0LjA+Pg1lbmRvYmoNODc5IDAgb2JqDTw8L0sgMTgx IDAgUi9QIDg3NCAwIFIvUy9MYm9keT4+DWVuZG9iag04ODAgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgLTIxLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAyNC4wPj4NZW5k b2JqDTg4MSAwIG9iag08PC9LIDE3OSAwIFIvUCA4NzMgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNODgy IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0yMS4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMjQuMD4+DWVuZG9iag04ODMgMCBvYmoNPDwvSyAxNzcgMCBSL1AgODcyIDAg Ui9TL0xib2R5Pj4NZW5kb2JqDTg4NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04ODUgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNODg2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTg4NyAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag04ODggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNODg5IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTg5MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04OTEgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTg5MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04OTMgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNODk0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTg5NSAwIG9iag08PC9QbGFj ZW1lbnQvSW5saW5lL08vTGF5b3V0L0JCb3hbNDExLjAgNzY1LjAgNTY3LjAgODAyLjBdPj4NZW5k b2JqDTg5NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04OTcgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNODk4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTg5OSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN OTAwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MDEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTkwMiAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAzLjA+Pg1lbmRvYmoNOTAzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDI0LjA+Pg1lbmRvYmoNOTA0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag05MDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTkwNiAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNOTA3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MDggMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTkwOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTEwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag05MTEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTkxMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTEz IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTkxNSAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNOTE2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MTcgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTkxOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTE5IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTkyMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MjEgMCBvYmoNPDwvUGxhY2Vt ZW50L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCA0NjYuMC9TdGFydEluZGVudCAtNzEuMC9CQm94 WzE5LjAgNzQ3LjAgMzkuMCA3NTMuMF0+Pg1lbmRvYmoNOTIyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTkyMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTI0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTkyNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MjYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTky NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTI4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MjkgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTkzMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTMxIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag05MzIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTkzMyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNOTM0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MzUgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNOTM2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05MzcgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTkzOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTM5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05NDAg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTQxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05NDIgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMTguMD4+DWVuZG9iag05NDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTQ0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag05NDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk0NiAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag05NDcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk0OCAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNOTQ5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05NTAgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTk1MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTUyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05 NTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk1NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTU1IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag05NTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk1NyAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag05NTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk1OSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNOTYwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05NjEgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTk2MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTYzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag05NjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk2NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTY2 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05NjcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk2OCAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNOTY5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk3MCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNOTcxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05NzIgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNOTczIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk3NCAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag05NzUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTc2IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTk3NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTc4IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTk3OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05ODAgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTk4MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05ODIgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNOTgzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk4NCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag05ODUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTg2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTk4NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05ODggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN OTg5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk5MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTkx IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk5MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05OTMg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTk0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk5NSAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05OTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNOTk3IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTk5OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag05OTkgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwMSAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0xMDAyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMDMgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0xMDA1IDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTEwMDYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwNyAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3LjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAwOCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDI3LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAw OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3LjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAxMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0x MDExIDAgb2JqDTw8L1BsYWNlbWVudC9CbG9jay9PL0xheW91dC9FbmRJbmRlbnQgLTkwLjAvU3Rh cnRJbmRlbnQgLTkwLjAvQkJveFswLjAgNzUwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTEwMTIg MCBvYmoNPDwvUGxhY2VtZW50L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCAtOTAuMC9TdGFydElu ZGVudCAtOTAuMC9CQm94WzAuMCAwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTEwMTMgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTEwMTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMTAxNSAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMTAxNiAwIG9iag08PC9Db3VudCA0L1R5cGUvUGFnZXMvS2lkc1sxMDIx IDAgUiAxIDAgUiAxNCAwIFIgMzIgMCBSXT4+DWVuZG9iag0xMDE3IDAgb2JqDTw8L1N1YnR5cGUv WE1ML0xlbmd0aCAzNTAwL1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLv u78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJh ZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4wLWMzMTYgNDQuMjUzOTIx LCBTdW4gT2N0IDAxIDIwMDYgMTc6MTQ6MzkiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6 Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2Ny aXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9i ZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOS0wNi0zMFQxNToz NDoyMSswODowMDwveGFwOk1vZGlmeURhdGU+CiAgICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA5 LTA2LTMwVDE1OjM0OjIxKzA4OjAwPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhhcDpNZXRh ZGF0YURhdGU+MjAwOS0wNi0zMFQxNTozNDoyMSswODowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAg ICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBBY3JvYmF0IDguMSBDb21iaW5lIEZpbGVzPC94 YXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2Ny aXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn L2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwv ZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAg ICAgICAgICAgICAgIDxyZGY6bGk+YW15aGU8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2Vx PgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8 cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0 cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI+CiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElE PnV1aWQ6MjA3ZDYxY2QtODI5NS00YzQ2LTk1YWEtMDgzN2U1N2EyYjU4PC94YXBNTTpEb2N1bWVu dElEPgogICAgICAgICA8eGFwTU06SW5zdGFuY2VJRD51dWlkOjdhMjQwYzBjLWZiMjMtNDIxMy05 MGE1LWYyNGUzZTg3MDdiMzwveGFwTU06SW5zdGFuY2VJRD4KICAgICAgPC9yZGY6RGVzY3JpcHRp b24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5z OnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyI+CiAgICAgICAgIDxwZGY6UHJvZHVj ZXI+QWNyb2JhdCBEaXN0aWxsZXIgOC4xLjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAg IDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9 InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTAxOCAwIG9iag08PC9DcmVhdGlvbkRhdGUoRDoyMDA5 MDYzMDE1MzQyMSswOCcwMCcpL0F1dGhvcihhbXloZSkvQ3JlYXRvcihBZG9iZSBBY3JvYmF0IDgu MSBDb21iaW5lIEZpbGVzKS9Qcm9kdWNlcihBY3JvYmF0IERpc3RpbGxlciA4LjEuMCBcKFdpbmRv d3NcKSkvTW9kRGF0ZShEOjIwMDkwNjMwMTUzNDIxKzA4JzAwJyk+Pg1lbmRvYmoNeHJlZg0KMCAx MDE5DQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwOTgzODAgMDAwMDAgbg0KMDAwMDA5ODcyNSAw MDAwMCBuDQowMDAwMDk4NzkxIDAwMDAwIG4NCjAwMDAwOTk5NzEgMDAwMDAgbg0KMDAwMDEwMTEy NCAwMDAwMCBuDQowMDAwMTAyNjI5IDAwMDAwIG4NCjAwMDAxMDQxNjEgMDAwMDAgbg0KMDAwMDEw NTQ4NyAwMDAwMCBuDQowMDAwMTA2OTI2IDAwMDAwIG4NCjAwMDAxMDg0OTEgMDAwMDAgbg0KMDAw MDExMDA1OCAwMDAwMCBuDQowMDAwMTEwMzQzIDAwMDAwIG4NCjAwMDAxMTA2MjggMDAwMDAgbg0K MDAwMDExMDkxMiAwMDAwMCBuDQowMDAwMTExMjgzIDAwMDAwIG4NCjAwMDAxMTEzNTcgMDAwMDAg bg0KMDAwMDExMjcyMSAwMDAwMCBuDQowMDAwMTEzOTg5IDAwMDAwIG4NCjAwMDAxMTUyMjkgMDAw MDAgbg0KMDAwMDExNjg2MCAwMDAwMCBuDQowMDAwMTE4NDI3IDAwMDAwIG4NCjAwMDAxMTk4NzQg MDAwMDAgbg0KMDAwMDEyMTM5NSAwMDAwMCBuDQowMDAwMTIyNzQyIDAwMDAwIG4NCjAwMDAxMjMw MjcgMDAwMDAgbg0KMDAwMDEyMzMxMiAwMDAwMCBuDQowMDAwMTIzNTk2IDAwMDAwIG4NCjAwMDAx MjM4ODUgMDAwMDAgbg0KMDAwMDEyNzY2NSAwMDAwMCBuDQowMDAwMTI3ODk1IDAwMDAwIG4NCjAw MDAxMjgxMDEgMDAwMDAgbg0KMDAwMDEyODM4OSAwMDAwMCBuDQowMDAwMTI4NTQzIDAwMDAwIG4N CjAwMDAxMjg3MjEgMDAwMDAgbg0KMDAwMDE4MjUzOSAwMDAwMCBuDQowMDAwMTgyNTc2IDAwMDAw IG4NCjAwMDAxOTIwOTEgMDAwMDAgbg0KMDAwMDE5MjMxOSAwMDAwMCBuDQowMDAwMTkyNTY4IDAw MDAwIG4NCjAwMDAxOTI3OTAgMDAwMDAgbg0KMDAwMDE5MzI5OSAwMDAwMCBuDQowMDAwMTk2NjY2 IDAwMDAwIG4NCjAwMDAxOTcxODIgMDAwMDAgbg0KMDAwMDE5NzQzMiAwMDAwMCBuDQowMDAwMTk3 NjQyIDAwMDAwIG4NCjAwMDAyNjAwMjMgMDAwMDAgbg0KMDAwMDI2MDI3MSAwMDAwMCBuDQowMDAw MjYwNDc1IDAwMDAwIG4NCjAwMDAyNjUyODMgMDAwMDAgbg0KMDAwMDI2NTQyMCAwMDAwMCBuDQow MDAwMjY1NTQzIDAwMDAwIG4NCjAwMDAyNzExODAgMDAwMDAgbg0KMDAwMDI3MTM4MiAwMDAwMCBu DQowMDAwMjcxNjI3IDAwMDAwIG4NCjAwMDAyNzE4NDIgMDAwMDAgbg0KMDAwMDI3MjA4MiAwMDAw MCBuDQowMDAwMjcyMjQyIDAwMDAwIG4NCjAwMDAyNzIzNzMgMDAwMDAgbg0KMDAwMDI3MjYxNiAw MDAwMCBuDQowMDAwMjcyNzQ1IDAwMDAwIG4NCjAwMDAyNzMyNTggMDAwMDAgbg0KMDAwMDI3Mzc2 MyAwMDAwMCBuDQowMDAwMjczOTIzIDAwMDAwIG4NCjAwMDAyNzQwNTQgMDAwMDAgbg0KMDAwMDI3 NDE4MyAwMDAwMCBuDQowMDAwMjc0MzA2IDAwMDAwIG4NCjAwMDAyNzQ0MzcgMDAwMDAgbg0KMDAw MDI3NDU3NCAwMDAwMCBuDQowMDAwMjc0NzA2IDAwMDAwIG4NCjAwMDAyNzUxNDYgMDAwMDAgbg0K MDAwMDI3NTY1MSAwMDAwMCBuDQowMDAwMjc1ODc5IDAwMDAwIG4NCjAwMDAyNzYyNzggMDAwMDAg bg0KMDAwMDI3NjMzMiAwMDAwMCBuDQowMDAwMjc2NTExIDAwMDAwIG4NCjAwMDAyNzY2MDkgMDAw MDAgbg0KMDAwMDI3NjY1NiAwMDAwMCBuDQowMDAwMjc2NzQ3IDAwMDAwIG4NCjAwMDAyNzY3OTYg MDAwMDAgbg0KMDAwMDI3Njg4NCAwMDAwMCBuDQowMDAwMjc2OTMxIDAwMDAwIG4NCjAwMDAyNzcw MzEgMDAwMDAgbg0KMDAwMDI3NzA3NyAwMDAwMCBuDQowMDAwMjc3MTI2IDAwMDAwIG4NCjAwMDAy NzcyNDUgMDAwMDAgbg0KMDAwMDI3NzMwNCAwMDAwMCBuDQowMDAwMjgwNzUzIDAwMDAwIG4NCjAw MDAyODEwNjEgMDAwMDAgbg0KMDAwMDI4MTIyMiAwMDAwMCBuDQowMDAwMjgxMzYzIDAwMDAwIG4N CjAwMDAyODE1MDQgMDAwMDAgbg0KMDAwMDI4MTY0NSAwMDAwMCBuDQowMDAwMjgxNzg0IDAwMDAw IG4NCjAwMDAyODE5MjUgMDAwMDAgbg0KMDAwMDI4MTk1MCAwMDAwMCBuDQowMDAwMjgyMDAxIDAw MDAwIG4NCjAwMDAyODIwNzUgMDAwMDAgbg0KMDAwMDI4MjMwMSAwMDAwMCBuDQowMDAwMjgzOTI0 IDAwMDAwIG4NCjAwMDAyODQwNDIgMDAwMDAgbg0KMDAwMDI4NDEyNSAwMDAwMCBuDQowMDAwMjg0 MjAzIDAwMDAwIG4NCjAwMDAyODQyNjggMDAwMDAgbg0KMDAwMDI4NDMzMyAwMDAwMCBuDQowMDAw Mjg0NDE4IDAwMDAwIG4NCjAwMDAyODQ0OTYgMDAwMDAgbg0KMDAwMDI4NDU3NSAwMDAwMCBuDQow MDAwMjg0NjU0IDAwMDAwIG4NCjAwMDAyODQ3MzMgMDAwMDAgbg0KMDAwMDI4NDgxNyAwMDAwMCBu DQowMDAwMjg0ODk2IDAwMDAwIG4NCjAwMDAyODQ5NzUgMDAwMDAgbg0KMDAwMDI4NTA1NCAwMDAw MCBuDQowMDAwMjg1MTMzIDAwMDAwIG4NCjAwMDAyODUyMDEgMDAwMDAgbg0KMDAwMDI4NTI3OSAw MDAwMCBuDQowMDAwMjg1MzU3IDAwMDAwIG4NCjAwMDAyODU0MzUgMDAwMDAgbg0KMDAwMDI4NTUx MyAwMDAwMCBuDQowMDAwMjg1NTkxIDAwMDAwIG4NCjAwMDAyODU2NjkgMDAwMDAgbg0KMDAwMDI4 NTc0NyAwMDAwMCBuDQowMDAwMjg1ODI1IDAwMDAwIG4NCjAwMDAyODU5MDMgMDAwMDAgbg0KMDAw MDI4NTk3MCAwMDAwMCBuDQowMDAwMjg2MDQ4IDAwMDAwIG4NCjAwMDAyODYxMjYgMDAwMDAgbg0K MDAwMDI4NjIwNCAwMDAwMCBuDQowMDAwMjg2MjgyIDAwMDAwIG4NCjAwMDAyODYzNjAgMDAwMDAg bg0KMDAwMDI4NjQzOCAwMDAwMCBuDQowMDAwMjg2NTE2IDAwMDAwIG4NCjAwMDAyODY1OTQgMDAw MDAgbg0KMDAwMDI4NjY3MiAwMDAwMCBuDQowMDAwMjg2NzQ0IDAwMDAwIG4NCjAwMDAyODY4Mjcg MDAwMDAgbg0KMDAwMDI4NjkwNSAwMDAwMCBuDQowMDAwMjg2OTgzIDAwMDAwIG4NCjAwMDAyODcw NjEgMDAwMDAgbg0KMDAwMDI4NzEzOSAwMDAwMCBuDQowMDAwMjg3MjE3IDAwMDAwIG4NCjAwMDAy ODcyOTUgMDAwMDAgbg0KMDAwMDI4NzM3MyAwMDAwMCBuDQowMDAwMjg3NDUxIDAwMDAwIG4NCjAw MDAyODc1MjkgMDAwMDAgbg0KMDAwMDI4NzYxMiAwMDAwMCBuDQowMDAwMjg3NjkwIDAwMDAwIG4N CjAwMDAyODc3NjggMDAwMDAgbg0KMDAwMDI4Nzg0NiAwMDAwMCBuDQowMDAwMjg3OTI0IDAwMDAw IG4NCjAwMDAyODgwMDIgMDAwMDAgbg0KMDAwMDI4ODA4MCAwMDAwMCBuDQowMDAwMjg4MTU4IDAw MDAwIG4NCjAwMDAyODgyMzYgMDAwMDAgbg0KMDAwMDI4ODMxNCAwMDAwMCBuDQowMDAwMjg4Mzky IDAwMDAwIG4NCjAwMDAyODg0NzAgMDAwMDAgbg0KMDAwMDI4ODU1MyAwMDAwMCBuDQowMDAwMjg4 NjMxIDAwMDAwIG4NCjAwMDAyODg3MDkgMDAwMDAgbg0KMDAwMDI4ODc4NyAwMDAwMCBuDQowMDAw Mjg4ODY1IDAwMDAwIG4NCjAwMDAyODg5NDMgMDAwMDAgbg0KMDAwMDI4OTAxMCAwMDAwMCBuDQow MDAwMjg5MDc3IDAwMDAwIG4NCjAwMDAyODkxNDQgMDAwMDAgbg0KMDAwMDI4OTIxMSAwMDAwMCBu DQowMDAwMjg5Mjc4IDAwMDAwIG4NCjAwMDAyODkzNTYgMDAwMDAgbg0KMDAwMDI4OTQyMyAwMDAw MCBuDQowMDAwMjg5NTAxIDAwMDAwIG4NCjAwMDAyODk1NzkgMDAwMDAgbg0KMDAwMDI4OTY1NyAw MDAwMCBuDQowMDAwMjg5NzM1IDAwMDAwIG4NCjAwMDAyODk4MTMgMDAwMDAgbg0KMDAwMDI4OTg5 MSAwMDAwMCBuDQowMDAwMjg5OTQ0IDAwMDAwIG4NCjAwMDAyOTAwMDEgMDAwMDAgbg0KMDAwMDI5 MDA1NCAwMDAwMCBuDQowMDAwMjkwMTExIDAwMDAwIG4NCjAwMDAyOTAxNjQgMDAwMDAgbg0KMDAw MDI5MDIyMSAwMDAwMCBuDQowMDAwMjkwMjc0IDAwMDAwIG4NCjAwMDAyOTAzMzEgMDAwMDAgbg0K MDAwMDI5MDM5OCAwMDAwMCBuDQowMDAwMjkwNDc2IDAwMDAwIG4NCjAwMDAyOTA1NTQgMDAwMDAg bg0KMDAwMDI5MDYzNyAwMDAwMCBuDQowMDAwMjkwNzE1IDAwMDAwIG4NCjAwMDAyOTA3OTMgMDAw MDAgbg0KMDAwMDI5MDg3MSAwMDAwMCBuDQowMDAwMjkwOTM4IDAwMDAwIG4NCjAwMDAyOTEwMTYg MDAwMDAgbg0KMDAwMDI5MTA5NCAwMDAwMCBuDQowMDAwMjkxMTcyIDAwMDAwIG4NCjAwMDAyOTEy NTAgMDAwMDAgbg0KMDAwMDI5MTMyOSAwMDAwMCBuDQowMDAwMjkxNDEzIDAwMDAwIG4NCjAwMDAy OTE0OTIgMDAwMDAgbg0KMDAwMDI5MTU3MSAwMDAwMCBuDQowMDAwMjkxNjUwIDAwMDAwIG4NCjAw MDAyOTE3MTYgMDAwMDAgbg0KMDAwMDI5MTc5NSAwMDAwMCBuDQowMDAwMjkxODc0IDAwMDAwIG4N CjAwMDAyOTE5MjggMDAwMDAgbg0KMDAwMDI5MTk5NyAwMDAwMCBuDQowMDAwMjkyMDUxIDAwMDAw IG4NCjAwMDAyOTIxMjAgMDAwMDAgbg0KMDAwMDI5MjE3NCAwMDAwMCBuDQowMDAwMjkyMjQzIDAw MDAwIG4NCjAwMDAyOTIyOTcgMDAwMDAgbg0KMDAwMDI5MjM2NiAwMDAwMCBuDQowMDAwMjkyNDIw IDAwMDAwIG4NCjAwMDAyOTI0ODkgMDAwMDAgbg0KMDAwMDI5MjU0MyAwMDAwMCBuDQowMDAwMjky NjEyIDAwMDAwIG4NCjAwMDAyOTI2NjYgMDAwMDAgbg0KMDAwMDI5MjczNSAwMDAwMCBuDQowMDAw MjkyODE0IDAwMDAwIG4NCjAwMDAyOTI4ODIgMDAwMDAgbg0KMDAwMDI5Mjk1MCAwMDAwMCBuDQow MDAwMjkzMDE4IDAwMDAwIG4NCjAwMDAyOTMwODYgMDAwMDAgbg0KMDAwMDI5MzE1NCAwMDAwMCBu DQowMDAwMjkzMjIyIDAwMDAwIG4NCjAwMDAyOTMyOTAgMDAwMDAgbg0KMDAwMDI5MzM1OCAwMDAw MCBuDQowMDAwMjkzNDI2IDAwMDAwIG4NCjAwMDAyOTM0OTQgMDAwMDAgbg0KMDAwMDI5MzU2MiAw MDAwMCBuDQowMDAwMjkzNjMwIDAwMDAwIG4NCjAwMDAyOTM2OTggMDAwMDAgbg0KMDAwMDI5Mzc2 NiAwMDAwMCBuDQowMDAwMjkzODIwIDAwMDAwIG4NCjAwMDAyOTM4NzggMDAwMDAgbg0KMDAwMDI5 Mzk0NiAwMDAwMCBuDQowMDAwMjk0MDAwIDAwMDAwIG4NCjAwMDAyOTQwNTggMDAwMDAgbg0KMDAw MDI5NDExMiAwMDAwMCBuDQowMDAwMjk0MTcwIDAwMDAwIG4NCjAwMDAyOTQyMzggMDAwMDAgbg0K MDAwMDI5NDMwNiAwMDAwMCBuDQowMDAwMjk0Mzg1IDAwMDAwIG4NCjAwMDAyOTQ0NTMgMDAwMDAg bg0KMDAwMDI5NDUzNyAwMDAwMCBuDQowMDAwMjk0NjIxIDAwMDAwIG4NCjAwMDAyOTQ3MDAgMDAw MDAgbg0KMDAwMDI5NDc3MiAwMDAwMCBuDQowMDAwMjk0ODYwIDAwMDAwIG4NCjAwMDAyOTQ5MTQg MDAwMDAgbg0KMDAwMDI5NDk4MyAwMDAwMCBuDQowMDAwMjk1MDM3IDAwMDAwIG4NCjAwMDAyOTUx MDYgMDAwMDAgbg0KMDAwMDI5NTE2MCAwMDAwMCBuDQowMDAwMjk1MjI5IDAwMDAwIG4NCjAwMDAy OTUyODMgMDAwMDAgbg0KMDAwMDI5NTM1MiAwMDAwMCBuDQowMDAwMjk1NDA2IDAwMDAwIG4NCjAw MDAyOTU0NzUgMDAwMDAgbg0KMDAwMDI5NTUyOSAwMDAwMCBuDQowMDAwMjk1NTk4IDAwMDAwIG4N CjAwMDAyOTU2ODIgMDAwMDAgbg0KMDAwMDI5NTc2MSAwMDAwMCBuDQowMDAwMjk1ODI5IDAwMDAw IG4NCjAwMDAyOTU5MDggMDAwMDAgbg0KMDAwMDI5NTk4NyAwMDAwMCBuDQowMDAwMjk2MDY2IDAw MDAwIG4NCjAwMDAyOTYxNDUgMDAwMDAgbg0KMDAwMDI5NjIyNCAwMDAwMCBuDQowMDAwMjk2MzAz IDAwMDAwIG4NCjAwMDAyOTYzODIgMDAwMDAgbg0KMDAwMDI5NjQ2MSAwMDAwMCBuDQowMDAwMjk2 NjAzIDAwMDAwIG4NCjAwMDAyOTY3MjggMDAwMDAgbg0KMDAwMDI5Njk3NyAwMDAwMCBuDQowMDAw Mjk3MDI2IDAwMDAwIG4NCjAwMDAyOTcwOTIgMDAwMDAgbg0KMDAwMDI5NzE3MCAwMDAwMCBuDQow MDAwMjk3MzkwIDAwMDAwIG4NCjAwMDAyOTg5MTkgMDAwMDAgbg0KMDAwMDI5ODk2OCAwMDAwMCBu DQowMDAwMjk5MDE3IDAwMDAwIG4NCjAwMDAyOTkyNTkgMDAwMDAgbg0KMDAwMDI5OTM3NCAwMDAw MCBuDQowMDAwMjk5NDcxIDAwMDAwIG4NCjAwMDAyOTk1NDcgMDAwMDAgbg0KMDAwMDI5OTYyNCAw MDAwMCBuDQowMDAwMzAwMDIxIDAwMDAwIG4NCjAwMDAzMDAyNTAgMDAwMDAgbg0KMDAwMDMwMDMw MiAwMDAwMCBuDQowMDAwMzAwMzYzIDAwMDAwIG4NCjAwMDAzMDA0MTUgMDAwMDAgbg0KMDAwMDMw MDQ2NyAwMDAwMCBuDQowMDAwMzAwNTE5IDAwMDAwIG4NCjAwMDAzMDA1NzEgMDAwMDAgbg0KMDAw MDMwMDYyMyAwMDAwMCBuDQowMDAwMzAwOTE2IDAwMDAwIG4NCjAwMDAzMDA5NjggMDAwMDAgbg0K MDAwMDMwMTAyMCAwMDAwMCBuDQowMDAwMzAxMDcyIDAwMDAwIG4NCjAwMDAzMDExMjQgMDAwMDAg bg0KMDAwMDMwMTE3NiAwMDAwMCBuDQowMDAwMzAxMjI4IDAwMDAwIG4NCjAwMDAzMDEzMDUgMDAw MDAgbg0KMDAwMDMwMTM1NyAwMDAwMCBuDQowMDAwMzAxNDIwIDAwMDAwIG4NCjAwMDAzMDE0ODMg MDAwMDAgbg0KMDAwMDMwMTU0OCAwMDAwMCBuDQowMDAwMzAxNjU3IDAwMDAwIG4NCjAwMDAzMDE3 NjYgMDAwMDAgbg0KMDAwMDMwMTg3MyAwMDAwMCBuDQowMDAwMzAxOTU5IDAwMDAwIG4NCjAwMDAz MDIxMDEgMDAwMDAgbg0KMDAwMDMwMjE3MiAwMDAwMCBuDQowMDAwMzAyMjU0IDAwMDAwIG4NCjAw MDAzMDIzMzIgMDAwMDAgbg0KMDAwMDMwMjQxNCAwMDAwMCBuDQowMDAwMzAyNTU2IDAwMDAwIG4N CjAwMDAzMDI2OTggMDAwMDAgbg0KMDAwMDMwMjg0MCAwMDAwMCBuDQowMDAwMzAyOTgyIDAwMDAw IG4NCjAwMDAzMDMwNjkgMDAwMDAgbg0KMDAwMDMwMzIxMSAwMDAwMCBuDQowMDAwMzAzMjgyIDAw MDAwIG4NCjAwMDAzMDMzNjAgMDAwMDAgbg0KMDAwMDMwMzQzOCAwMDAwMCBuDQowMDAwMzAzNTgw IDAwMDAwIG4NCjAwMDAzMDM2NTggMDAwMDAgbg0KMDAwMDMwMzgwMCAwMDAwMCBuDQowMDAwMzAz ODc4IDAwMDAwIG4NCjAwMDAzMDQwMjAgMDAwMDAgbg0KMDAwMDMwNDA5OCAwMDAwMCBuDQowMDAw MzA0MjQwIDAwMDAwIG4NCjAwMDAzMDQzMjIgMDAwMDAgbg0KMDAwMDMwNDQ2NCAwMDAwMCBuDQow MDAwMzA0NTQyIDAwMDAwIG4NCjAwMDAzMDQ2MjAgMDAwMDAgbg0KMDAwMDMwNDY5OCAwMDAwMCBu DQowMDAwMzA0Nzc2IDAwMDAwIG4NCjAwMDAzMDQ4NTQgMDAwMDAgbg0KMDAwMDMwNDkyNSAwMDAw MCBuDQowMDAwMzA1MDAzIDAwMDAwIG4NCjAwMDAzMDUwODEgMDAwMDAgbg0KMDAwMDMwNTE1OSAw MDAwMCBuDQowMDAwMzA1MjM3IDAwMDAwIG4NCjAwMDAzMDUzMTUgMDAwMDAgbg0KMDAwMDMwNTM5 MyAwMDAwMCBuDQowMDAwMzA1NDcxIDAwMDAwIG4NCjAwMDAzMDU1MzQgMDAwMDAgbg0KMDAwMDMw NTYxNiAwMDAwMCBuDQowMDAwMzA1Njk0IDAwMDAwIG4NCjAwMDAzMDU3NzIgMDAwMDAgbg0KMDAw MDMwNTgzOSAwMDAwMCBuDQowMDAwMzA1OTA2IDAwMDAwIG4NCjAwMDAzMDU5ODQgMDAwMDAgbg0K MDAwMDMwNjA2MiAwMDAwMCBuDQowMDAwMzA2MTI5IDAwMDAwIG4NCjAwMDAzMDYxOTYgMDAwMDAg bg0KMDAwMDMwNjI2MyAwMDAwMCBuDQowMDAwMzA2MzMwIDAwMDAwIG4NCjAwMDAzMDYzOTMgMDAw MDAgbg0KMDAwMDMwNjQ3MSAwMDAwMCBuDQowMDAwMzA2NTQ5IDAwMDAwIG4NCjAwMDAzMDY2MTYg MDAwMDAgbg0KMDAwMDMwNjY4MyAwMDAwMCBuDQowMDAwMzA2NzYxIDAwMDAwIG4NCjAwMDAzMDY5 MDMgMDAwMDAgbg0KMDAwMDMwNzA0MyAwMDAwMCBuDQowMDAwMzA3MTgzIDAwMDAwIG4NCjAwMDAz MDczMjMgMDAwMDAgbg0KMDAwMDMwNzQ2MyAwMDAwMCBuDQowMDAwMzA3NTI5IDAwMDAwIG4NCjAw MDAzMDc1OTUgMDAwMDAgbg0KMDAwMDMwNzY2MSAwMDAwMCBuDQowMDAwMzA3ODA2IDAwMDAwIG4N CjAwMDAzMDc4NTkgMDAwMDAgbg0KMDAwMDMwNzkwOSAwMDAwMCBuDQowMDAwMzA3OTY2IDAwMDAw IG4NCjAwMDAzMDgxMTEgMDAwMDAgbg0KMDAwMDMwODE2NCAwMDAwMCBuDQowMDAwMzA4MjE0IDAw MDAwIG4NCjAwMDAzMDgyNzEgMDAwMDAgbg0KMDAwMDMwODQxNiAwMDAwMCBuDQowMDAwMzA4NDY5 IDAwMDAwIG4NCjAwMDAzMDg1MTkgMDAwMDAgbg0KMDAwMDMwODU3NiAwMDAwMCBuDQowMDAwMzA4 NzE4IDAwMDAwIG4NCjAwMDAzMDg4NjAgMDAwMDAgbg0KMDAwMDMwOTAwMiAwMDAwMCBuDQowMDAw MzA5MTQ0IDAwMDAwIG4NCjAwMDAzMDkyODQgMDAwMDAgbg0KMDAwMDMwOTQyNCAwMDAwMCBuDQow MDAwMzA5NTY2IDAwMDAwIG4NCjAwMDAzMDk3MDYgMDAwMDAgbg0KMDAwMDMwOTg0NiAwMDAwMCBu DQowMDAwMzA5OTg2IDAwMDAwIG4NCjAwMDAzMTAxMjYgMDAwMDAgbg0KMDAwMDMxMDE5MiAwMDAw MCBuDQowMDAwMzEwMjU4IDAwMDAwIG4NCjAwMDAzMTAzMjQgMDAwMDAgbg0KMDAwMDMxMDQ2OSAw MDAwMCBuDQowMDAwMzEwNTIyIDAwMDAwIG4NCjAwMDAzMTA1NzIgMDAwMDAgbg0KMDAwMDMxMDYy OSAwMDAwMCBuDQowMDAwMzEwNzc0IDAwMDAwIG4NCjAwMDAzMTA4MjcgMDAwMDAgbg0KMDAwMDMx MDg3NyAwMDAwMCBuDQowMDAwMzEwOTM0IDAwMDAwIG4NCjAwMDAzMTEwNzkgMDAwMDAgbg0KMDAw MDMxMTEzMiAwMDAwMCBuDQowMDAwMzExMTgyIDAwMDAwIG4NCjAwMDAzMTEyMzkgMDAwMDAgbg0K MDAwMDMxMTM3OSAwMDAwMCBuDQowMDAwMzExNTIxIDAwMDAwIG4NCjAwMDAzMTE2NjMgMDAwMDAg bg0KMDAwMDMxMTgwMyAwMDAwMCBuDQowMDAwMzExOTQzIDAwMDAwIG4NCjAwMDAzMTIwODMgMDAw MDAgbg0KMDAwMDMxMjIyMyAwMDAwMCBuDQowMDAwMzEyMjg5IDAwMDAwIG4NCjAwMDAzMTIzNTUg MDAwMDAgbg0KMDAwMDMxMjQyMSAwMDAwMCBuDQowMDAwMzEyNDg3IDAwMDAwIG4NCjAwMDAzMTI2 MzIgMDAwMDAgbg0KMDAwMDMxMjY4NSAwMDAwMCBuDQowMDAwMzEyNzM1IDAwMDAwIG4NCjAwMDAz MTI3OTIgMDAwMDAgbg0KMDAwMDMxMjkzNyAwMDAwMCBuDQowMDAwMzEyOTkwIDAwMDAwIG4NCjAw MDAzMTMwNDAgMDAwMDAgbg0KMDAwMDMxMzA5NyAwMDAwMCBuDQowMDAwMzEzMjQyIDAwMDAwIG4N CjAwMDAzMTMyOTUgMDAwMDAgbg0KMDAwMDMxMzM0NSAwMDAwMCBuDQowMDAwMzEzNDAyIDAwMDAw IG4NCjAwMDAzMTM1NDcgMDAwMDAgbg0KMDAwMDMxMzYwMCAwMDAwMCBuDQowMDAwMzEzNjUwIDAw MDAwIG4NCjAwMDAzMTM3MDcgMDAwMDAgbg0KMDAwMDMxMzg0NyAwMDAwMCBuDQowMDAwMzEzOTg3 IDAwMDAwIG4NCjAwMDAzMTQxMjcgMDAwMDAgbg0KMDAwMDMxNDI2NyAwMDAwMCBuDQowMDAwMzE0 NDA3IDAwMDAwIG4NCjAwMDAzMTQ0ODUgMDAwMDAgbg0KMDAwMDMxNDYyNyAwMDAwMCBuDQowMDAw MzE0NzA1IDAwMDAwIG4NCjAwMDAzMTQ4NDUgMDAwMDAgbg0KMDAwMDMxNDkyMyAwMDAwMCBuDQow MDAwMzE1MDY1IDAwMDAwIG4NCjAwMDAzMTUxNTEgMDAwMDAgbg0KMDAwMDMxNTI5MyAwMDAwMCBu DQowMDAwMzE1MzcxIDAwMDAwIG4NCjAwMDAzMTU1MTMgMDAwMDAgbg0KMDAwMDMxNTU5MSAwMDAw MCBuDQowMDAwMzE1NjY5IDAwMDAwIG4NCjAwMDAzMTU4MTEgMDAwMDAgbg0KMDAwMDMxNTk1MSAw MDAwMCBuDQowMDAwMzE2MDI4IDAwMDAwIG4NCjAwMDAzMTYxNzAgMDAwMDAgbg0KMDAwMDMxNjI0 NyAwMDAwMCBuDQowMDAwMzE2MzEzIDAwMDAwIG4NCjAwMDAzMTYzOTAgMDAwMDAgbg0KMDAwMDMx NjQ3NyAwMDAwMCBuDQowMDAwMzE2NTU0IDAwMDAwIG4NCjAwMDAzMTY2MzEgMDAwMDAgbg0KMDAw MDMxNjcwOCAwMDAwMCBuDQowMDAwMzE2Nzg1IDAwMDAwIG4NCjAwMDAzMTY4NjIgMDAwMDAgbg0K MDAwMDMxNjkzOSAwMDAwMCBuDQowMDAwMzE3MDE2IDAwMDAwIG4NCjAwMDAzMTcwNzkgMDAwMDAg bg0KMDAwMDMxNzE1NiAwMDAwMCBuDQowMDAwMzE3MjMzIDAwMDAwIG4NCjAwMDAzMTczMTAgMDAw MDAgbg0KMDAwMDMxNzM4NyAwMDAwMCBuDQowMDAwMzE3NDY0IDAwMDAwIG4NCjAwMDAzMTc1MzAg MDAwMDAgbg0KMDAwMDMxNzU5NiAwMDAwMCBuDQowMDAwMzE3NjczIDAwMDAwIG4NCjAwMDAzMTc3 NTEgMDAwMDAgbg0KMDAwMDMxNzgyOSAwMDAwMCBuDQowMDAwMzE3OTA3IDAwMDAwIG4NCjAwMDAz MTgwNDcgMDAwMDAgbg0KMDAwMDMxODE4NyAwMDAwMCBuDQowMDAwMzE4MzI3IDAwMDAwIG4NCjAw MDAzMTg0NjkgMDAwMDAgbg0KMDAwMDMxODYxMSAwMDAwMCBuDQowMDAwMzE4NzUzIDAwMDAwIG4N CjAwMDAzMTg4OTggMDAwMDAgbg0KMDAwMDMxOTAzOCAwMDAwMCBuDQowMDAwMzE5MTc4IDAwMDAw IG4NCjAwMDAzMTkzMTggMDAwMDAgbg0KMDAwMDMxOTQ1OCAwMDAwMCBuDQowMDAwMzE5NTI0IDAw MDAwIG4NCjAwMDAzMTk1OTAgMDAwMDAgbg0KMDAwMDMxOTY1NiAwMDAwMCBuDQowMDAwMzE5Nzk5 IDAwMDAwIG4NCjAwMDAzMTk4NTEgMDAwMDAgbg0KMDAwMDMxOTkwMSAwMDAwMCBuDQowMDAwMzE5 OTY4IDAwMDAwIG4NCjAwMDAzMjAxMTEgMDAwMDAgbg0KMDAwMDMyMDE2MyAwMDAwMCBuDQowMDAw MzIwMjEzIDAwMDAwIG4NCjAwMDAzMjAyODAgMDAwMDAgbg0KMDAwMDMyMDQyMyAwMDAwMCBuDQow MDAwMzIwNDc1IDAwMDAwIG4NCjAwMDAzMjA1MjUgMDAwMDAgbg0KMDAwMDMyMDU5MiAwMDAwMCBu DQowMDAwMzIwNzMyIDAwMDAwIG4NCjAwMDAzMjA4NzIgMDAwMDAgbg0KMDAwMDMyMTAxNCAwMDAw MCBuDQowMDAwMzIxMTU2IDAwMDAwIG4NCjAwMDAzMjEyOTggMDAwMDAgbg0KMDAwMDMyMTQ0MCAw MDAwMCBuDQowMDAwMzIxNTgyIDAwMDAwIG4NCjAwMDAzMjE2NDggMDAwMDAgbg0KMDAwMDMyMTcx NCAwMDAwMCBuDQowMDAwMzIxNzgwIDAwMDAwIG4NCjAwMDAzMjE4NDYgMDAwMDAgbg0KMDAwMDMy MTkxMiAwMDAwMCBuDQowMDAwMzIxOTc4IDAwMDAwIG4NCjAwMDAzMjIxMjMgMDAwMDAgbg0KMDAw MDMyMjE3NSAwMDAwMCBuDQowMDAwMzIyMjI1IDAwMDAwIG4NCjAwMDAzMjIyODEgMDAwMDAgbg0K MDAwMDMyMjQyNiAwMDAwMCBuDQowMDAwMzIyNDc4IDAwMDAwIG4NCjAwMDAzMjI1MjggMDAwMDAg bg0KMDAwMDMyMjU4NCAwMDAwMCBuDQowMDAwMzIyNzI5IDAwMDAwIG4NCjAwMDAzMjI3ODEgMDAw MDAgbg0KMDAwMDMyMjgzMSAwMDAwMCBuDQowMDAwMzIyODg3IDAwMDAwIG4NCjAwMDAzMjMwMzIg MDAwMDAgbg0KMDAwMDMyMzA4NCAwMDAwMCBuDQowMDAwMzIzMTM0IDAwMDAwIG4NCjAwMDAzMjMx OTAgMDAwMDAgbg0KMDAwMDMyMzMzNSAwMDAwMCBuDQowMDAwMzIzMzg3IDAwMDAwIG4NCjAwMDAz MjM0MzcgMDAwMDAgbg0KMDAwMDMyMzQ5MyAwMDAwMCBuDQowMDAwMzIzNjM4IDAwMDAwIG4NCjAw MDAzMjM2OTAgMDAwMDAgbg0KMDAwMDMyMzc0MCAwMDAwMCBuDQowMDAwMzIzNzk2IDAwMDAwIG4N CjAwMDAzMjM5MzYgMDAwMDAgbg0KMDAwMDMyNDA3OCAwMDAwMCBuDQowMDAwMzI0MjE4IDAwMDAw IG4NCjAwMDAzMjQyOTUgMDAwMDAgbg0KMDAwMDMyNDM3MiAwMDAwMCBuDQowMDAwMzI0NDQ5IDAw MDAwIG4NCjAwMDAzMjQ1MjYgMDAwMDAgbg0KMDAwMDMyNDYwMyAwMDAwMCBuDQowMDAwMzI0Njgw IDAwMDAwIG4NCjAwMDAzMjQ3NTcgMDAwMDAgbg0KMDAwMDMyNDgzNCAwMDAwMCBuDQowMDAwMzI0 OTExIDAwMDAwIG4NCjAwMDAzMjQ5ODggMDAwMDAgbg0KMDAwMDMyNTA2NSAwMDAwMCBuDQowMDAw MzI1MTQyIDAwMDAwIG4NCjAwMDAzMjUyMTkgMDAwMDAgbg0KMDAwMDMyNTI5NiAwMDAwMCBuDQow MDAwMzI1MzczIDAwMDAwIG4NCjAwMDAzMjU0NTAgMDAwMDAgbg0KMDAwMDMyNTUyNyAwMDAwMCBu DQowMDAwMzI1NjA0IDAwMDAwIG4NCjAwMDAzMjU2ODEgMDAwMDAgbg0KMDAwMDMyNTc1OCAwMDAw MCBuDQowMDAwMzI1ODM1IDAwMDAwIG4NCjAwMDAzMjU5MTIgMDAwMDAgbg0KMDAwMDMyNTk4OSAw MDAwMCBuDQowMDAwMzI2MDY2IDAwMDAwIG4NCjAwMDAzMjYxNDMgMDAwMDAgbg0KMDAwMDMyNjIy MCAwMDAwMCBuDQowMDAwMzI2Mjk3IDAwMDAwIG4NCjAwMDAzMjYzNzQgMDAwMDAgbg0KMDAwMDMy NjQ1MSAwMDAwMCBuDQowMDAwMzI2NTI4IDAwMDAwIG4NCjAwMDAzMjY2MDUgMDAwMDAgbg0KMDAw MDMyNjY4MiAwMDAwMCBuDQowMDAwMzI2NzU5IDAwMDAwIG4NCjAwMDAzMjY4MzYgMDAwMDAgbg0K MDAwMDMyNjkxMyAwMDAwMCBuDQowMDAwMzI2OTkwIDAwMDAwIG4NCjAwMDAzMjcwNjcgMDAwMDAg bg0KMDAwMDMyNzE0NCAwMDAwMCBuDQowMDAwMzI3MjIxIDAwMDAwIG4NCjAwMDAzMjcyOTggMDAw MDAgbg0KMDAwMDMyNzM3NSAwMDAwMCBuDQowMDAwMzI3NDUyIDAwMDAwIG4NCjAwMDAzMjc1Mjkg MDAwMDAgbg0KMDAwMDMyNzYwNiAwMDAwMCBuDQowMDAwMzI3NzQ2IDAwMDAwIG4NCjAwMDAzMjc4 ODYgMDAwMDAgbg0KMDAwMDMyODAyNiAwMDAwMCBuDQowMDAwMzI4MTY2IDAwMDAwIG4NCjAwMDAz MjgzMDYgMDAwMDAgbg0KMDAwMDMyODQ0NiAwMDAwMCBuDQowMDAwMzI4NTg2IDAwMDAwIG4NCjAw MDAzMjg3MjYgMDAwMDAgbg0KMDAwMDMyODg2NiAwMDAwMCBuDQowMDAwMzI5MDA2IDAwMDAwIG4N CjAwMDAzMjkxNDYgMDAwMDAgbg0KMDAwMDMyOTI4NiAwMDAwMCBuDQowMDAwMzI5NDI2IDAwMDAw IG4NCjAwMDAzMjk1NjYgMDAwMDAgbg0KMDAwMDMyOTcwNiAwMDAwMCBuDQowMDAwMzI5ODQ2IDAw MDAwIG4NCjAwMDAzMjk5ODYgMDAwMDAgbg0KMDAwMDMzMDEyOCAwMDAwMCBuDQowMDAwMzMwMjcw IDAwMDAwIG4NCjAwMDAzMzA0MTIgMDAwMDAgbg0KMDAwMDMzMDU1NCAwMDAwMCBuDQowMDAwMzMw Njk2IDAwMDAwIG4NCjAwMDAzMzA4MzggMDAwMDAgbg0KMDAwMDMzMDk4MCAwMDAwMCBuDQowMDAw MzMxMTIyIDAwMDAwIG4NCjAwMDAzMzEyNjQgMDAwMDAgbg0KMDAwMDMzMTQwNiAwMDAwMCBuDQow MDAwMzMxNTQ4IDAwMDAwIG4NCjAwMDAzMzE2OTIgMDAwMDAgbg0KMDAwMDMzMTgzNCAwMDAwMCBu DQowMDAwMzMxOTc2IDAwMDAwIG4NCjAwMDAzMzIxMTggMDAwMDAgbg0KMDAwMDMzMjI2MCAwMDAw MCBuDQowMDAwMzMyNDAyIDAwMDAwIG4NCjAwMDAzMzI1NDQgMDAwMDAgbg0KMDAwMDMzMjY4NiAw MDAwMCBuDQowMDAwMzMyODI4IDAwMDAwIG4NCjAwMDAzMzI5NzAgMDAwMDAgbg0KMDAwMDMzMzEx MiAwMDAwMCBuDQowMDAwMzMzMjU0IDAwMDAwIG4NCjAwMDAzMzMzOTYgMDAwMDAgbg0KMDAwMDMz MzUzOCAwMDAwMCBuDQowMDAwMzMzNjgwIDAwMDAwIG4NCjAwMDAzMzM4MjIgMDAwMDAgbg0KMDAw MDMzMzkwNSAwMDAwMCBuDQowMDAwMzMzOTgxIDAwMDAwIG4NCjAwMDAzMzQwNTggMDAwMDAgbg0K MDAwMDMzNDEzNSAwMDAwMCBuDQowMDAwMzM0Mjc4IDAwMDAwIG4NCjAwMDAzMzQ0MjEgMDAwMDAg bg0KMDAwMDMzNDU2NCAwMDAwMCBuDQowMDAwMzM0NzA2IDAwMDAwIG4NCjAwMDAzMzQ4NDYgMDAw MDAgbg0KMDAwMDMzNDk4OCAwMDAwMCBuDQowMDAwMzM1MTMwIDAwMDAwIG4NCjAwMDAzMzUzNjQg MDAwMDAgbg0KMDAwMDMzNTQ0MCAwMDAwMCBuDQowMDAwMzM1NTA3IDAwMDAwIG4NCjAwMDAzMzU1 NzQgMDAwMDAgbg0KMDAwMDMzNTY0MSAwMDAwMCBuDQowMDAwMzM1NzA4IDAwMDAwIG4NCjAwMDAz MzU3NzUgMDAwMDAgbg0KMDAwMDMzNTg0MiAwMDAwMCBuDQowMDAwMzM1OTA5IDAwMDAwIG4NCjAw MDAzMzU5NzYgMDAwMDAgbg0KMDAwMDMzNjA0MyAwMDAwMCBuDQowMDAwMzM2MTQ0IDAwMDAwIG4N CjAwMDAzMzYyOTMgMDAwMDAgbg0KMDAwMDMzNjM1NCAwMDAwMCBuDQowMDAwMzM2NDE1IDAwMDAw IG4NCjAwMDAzMzY0NjcgMDAwMDAgbg0KMDAwMDMzNjU0NCAwMDAwMCBuDQowMDAwMzM2NjEzIDAw MDAwIG4NCjAwMDAzMzY2NjUgMDAwMDAgbg0KMDAwMDMzNjc0MiAwMDAwMCBuDQowMDAwMzM2ODE5 IDAwMDAwIG4NCjAwMDAzMzY4ODggMDAwMDAgbg0KMDAwMDMzNjk1NyAwMDAwMCBuDQowMDAwMzM3 MDM0IDAwMDAwIG4NCjAwMDAzMzcwODYgMDAwMDAgbg0KMDAwMDMzNzE1NCAwMDAwMCBuDQowMDAw MzM3Mjk2IDAwMDAwIG4NCjAwMDAzMzczNjQgMDAwMDAgbg0KMDAwMDMzNzQ0MSAwMDAwMCBuDQow MDAwMzM3NTA5IDAwMDAwIG4NCjAwMDAzMzc1OTUgMDAwMDAgbg0KMDAwMDMzNzczNyAwMDAwMCBu DQowMDAwMzM3ODMwIDAwMDAwIG4NCjAwMDAzMzc5MTkgMDAwMDAgbg0KMDAwMDMzODAxNCAwMDAw MCBuDQowMDAwMzM4MTExIDAwMDAwIG4NCjAwMDAzMzgxODYgMDAwMDAgbg0KMDAwMDMzODI2MSAw MDAwMCBuDQowMDAwMzM4MzM2IDAwMDAwIG4NCjAwMDAzMzg0MTEgMDAwMDAgbg0KMDAwMDMzODU1 MyAwMDAwMCBuDQowMDAwMzM4Njk1IDAwMDAwIG4NCjAwMDAzMzg5NTggMDAwMDAgbg0KMDAwMDMz OTAzNSAwMDAwMCBuDQowMDAwMzM5MTc3IDAwMDAwIG4NCjAwMDAzMzkyNDUgMDAwMDAgbg0KMDAw MDMzOTMxMyAwMDAwMCBuDQowMDAwMzM5MzgxIDAwMDAwIG4NCjAwMDAzMzk1MjMgMDAwMDAgbg0K MDAwMDMzOTY2NSAwMDAwMCBuDQowMDAwMzM5ODA3IDAwMDAwIG4NCjAwMDAzMzk4NzUgMDAwMDAg bg0KMDAwMDMzOTk0MyAwMDAwMCBuDQowMDAwMzQwMDExIDAwMDAwIG4NCjAwMDAzNDAxNTMgMDAw MDAgbg0KMDAwMDM0MDI5NSAwMDAwMCBuDQowMDAwMzQwNDM3IDAwMDAwIG4NCjAwMDAzNDA1MDUg MDAwMDAgbg0KMDAwMDM0MDU3MyAwMDAwMCBuDQowMDAwMzQwNjQxIDAwMDAwIG4NCjAwMDAzNDA3 MDkgMDAwMDAgbg0KMDAwMDM0MDg1MSAwMDAwMCBuDQowMDAwMzQwOTkzIDAwMDAwIG4NCjAwMDAz NDExMzUgMDAwMDAgbg0KMDAwMDM0MTI3NyAwMDAwMCBuDQowMDAwMzQxMzQ1IDAwMDAwIG4NCjAw MDAzNDE0MTMgMDAwMDAgbg0KMDAwMDM0MTQ4MSAwMDAwMCBuDQowMDAwMzQxNTQ5IDAwMDAwIG4N CjAwMDAzNDE2OTEgMDAwMDAgbg0KMDAwMDM0MTgzMyAwMDAwMCBuDQowMDAwMzQxOTc1IDAwMDAw IG4NCjAwMDAzNDIxMTcgMDAwMDAgbg0KMDAwMDM0MjE3OCAwMDAwMCBuDQowMDAwMzQyMzIwIDAw MDAwIG4NCjAwMDAzNDI1ODMgMDAwMDAgbg0KMDAwMDM0MjY2MSAwMDAwMCBuDQowMDAwMzQyNzI5 IDAwMDAwIG4NCjAwMDAzNDI3OTcgMDAwMDAgbg0KMDAwMDM0Mjg2NSAwMDAwMCBuDQowMDAwMzQz MDA3IDAwMDAwIG4NCjAwMDAzNDMxNDkgMDAwMDAgbg0KMDAwMDM0MzI5MSAwMDAwMCBuDQowMDAw MzQzMzU5IDAwMDAwIG4NCjAwMDAzNDM0MjcgMDAwMDAgbg0KMDAwMDM0MzQ5NSAwMDAwMCBuDQow MDAwMzQzNTYzIDAwMDAwIG4NCjAwMDAzNDM3MDMgMDAwMDAgbg0KMDAwMDM0Mzg0NSAwMDAwMCBu DQowMDAwMzQzOTg3IDAwMDAwIG4NCjAwMDAzNDQxMjkgMDAwMDAgbg0KMDAwMDM0NDE5NyAwMDAw MCBuDQowMDAwMzQ0MzM5IDAwMDAwIG4NCjAwMDAzNDQ0MDcgMDAwMDAgbg0KMDAwMDM0NDQ3NSAw MDAwMCBuDQowMDAwMzQ0NjE3IDAwMDAwIG4NCjAwMDAzNDQ3NTkgMDAwMDAgbg0KMDAwMDM0NDgy OCAwMDAwMCBuDQowMDAwMzQ0ODk2IDAwMDAwIG4NCjAwMDAzNDUwMzggMDAwMDAgbg0KMDAwMDM0 NTE3OCAwMDAwMCBuDQowMDAwMzQ1MjQ2IDAwMDAwIG4NCjAwMDAzNDUzMTQgMDAwMDAgbg0KMDAw MDM0NTM4MiAwMDAwMCBuDQowMDAwMzQ1NDUwIDAwMDAwIG4NCjAwMDAzNDU1MTggMDAwMDAgbg0K MDAwMDM0NTU4NiAwMDAwMCBuDQowMDAwMzQ1NjU0IDAwMDAwIG4NCjAwMDAzNDU3MjIgMDAwMDAg bg0KMDAwMDM0NTc5MCAwMDAwMCBuDQowMDAwMzQ1ODU4IDAwMDAwIG4NCjAwMDAzNDU5MjYgMDAw MDAgbg0KMDAwMDM0NTk5NCAwMDAwMCBuDQowMDAwMzQ2MDYyIDAwMDAwIG4NCjAwMDAzNDYyMDQg MDAwMDAgbg0KMDAwMDM0NjM0NiAwMDAwMCBuDQowMDAwMzQ2NDg4IDAwMDAwIG4NCjAwMDAzNDY2 MzAgMDAwMDAgbg0KMDAwMDM0Njc3MiAwMDAwMCBuDQowMDAwMzQ2OTE0IDAwMDAwIG4NCjAwMDAz NDcwNTkgMDAwMDAgbg0KMDAwMDM0NzIwNCAwMDAwMCBuDQowMDAwMzQ3MzQ2IDAwMDAwIG4NCjAw MDAzNDc0OTEgMDAwMDAgbg0KMDAwMDM0NzYzMyAwMDAwMCBuDQowMDAwMzQ3Nzc1IDAwMDAwIG4N CjAwMDAzNDc5MTcgMDAwMDAgbg0KMDAwMDM0Nzk4NSAwMDAwMCBuDQowMDAwMzQ4MDUzIDAwMDAw IG4NCjAwMDAzNDgxMjEgMDAwMDAgbg0KMDAwMDM0ODE4OSAwMDAwMCBuDQowMDAwMzQ4MjU3IDAw MDAwIG4NCjAwMDAzNDgzMjUgMDAwMDAgbg0KMDAwMDM0ODM5MyAwMDAwMCBuDQowMDAwMzQ4NTM1 IDAwMDAwIG4NCjAwMDAzNDg2NzcgMDAwMDAgbg0KMDAwMDM0ODgxNyAwMDAwMCBuDQowMDAwMzQ4 OTU4IDAwMDAwIG4NCjAwMDAzNDkwOTggMDAwMDAgbg0KMDAwMDM0OTIzOCAwMDAwMCBuDQowMDAw MzQ5Mzc5IDAwMDAwIG4NCjAwMDAzNDk1MjEgMDAwMDAgbg0KMDAwMDM0OTY2MyAwMDAwMCBuDQow MDAwMzQ5ODA1IDAwMDAwIG4NCjAwMDAzNDk5NDcgMDAwMDAgbg0KMDAwMDM1MDA4OSAwMDAwMCBu DQowMDAwMzUwMjMxIDAwMDAwIG4NCjAwMDAzNTAzNzMgMDAwMDAgbg0KMDAwMDM1MDUxNSAwMDAw MCBuDQowMDAwMzUwNjU3IDAwMDAwIG4NCjAwMDAzNTA3OTkgMDAwMDAgbg0KMDAwMDM1MDg3NiAw MDAwMCBuDQowMDAwMzUxMjgxIDAwMDAwIG4NCjAwMDAzNTE1NjYgMDAwMDAgbg0KMDAwMDM1MTYx OCAwMDAwMCBuDQowMDAwMzUxNjcwIDAwMDAwIG4NCjAwMDAzNTE3MjIgMDAwMDAgbg0KMDAwMDM1 MTc3NCAwMDAwMCBuDQowMDAwMzUxODI2IDAwMDAwIG4NCjAwMDAzNTE4NzggMDAwMDAgbg0KMDAw MDM1MjEyMyAwMDAwMCBuDQowMDAwMzUyMTc1IDAwMDAwIG4NCjAwMDAzNTIyMjcgMDAwMDAgbg0K MDAwMDM1MjI3OSAwMDAwMCBuDQowMDAwMzUyMzMxIDAwMDAwIG4NCjAwMDAzNTIzODMgMDAwMDAg bg0KMDAwMDM1MjQ0NCAwMDAwMCBuDQowMDAwMzUyNDk2IDAwMDAwIG4NCjAwMDAzNTI1NDggMDAw MDAgbg0KMDAwMDM1MjYwMCAwMDAwMCBuDQowMDAwMzUyNjUyIDAwMDAwIG4NCjAwMDAzNTI3Mzkg MDAwMDAgbg0KMDAwMDM1MjgwNSAwMDAwMCBuDQowMDAwMzUyODcxIDAwMDAwIG4NCjAwMDAzNTI5 MzcgMDAwMDAgbg0KMDAwMDM1MzAwMyAwMDAwMCBuDQowMDAwMzUzMDY5IDAwMDAwIG4NCjAwMDAz NTMxMzUgMDAwMDAgbg0KMDAwMDM1MzI4MCAwMDAwMCBuDQowMDAwMzUzMzMwIDAwMDAwIG4NCjAw MDAzNTM0NzUgMDAwMDAgbg0KMDAwMDM1MzUyNSAwMDAwMCBuDQowMDAwMzUzNjcwIDAwMDAwIG4N CjAwMDAzNTM3MjAgMDAwMDAgbg0KMDAwMDM1Mzg2NSAwMDAwMCBuDQowMDAwMzUzOTE1IDAwMDAw IG4NCjAwMDAzNTQwNjAgMDAwMDAgbg0KMDAwMDM1NDExMCAwMDAwMCBuDQowMDAwMzU0MjU1IDAw MDAwIG4NCjAwMDAzNTQzMDUgMDAwMDAgbg0KMDAwMDM1NDM5MiAwMDAwMCBuDQowMDAwMzU0NDU1 IDAwMDAwIG4NCjAwMDAzNTQ1MjEgMDAwMDAgbg0KMDAwMDM1NDU4NyAwMDAwMCBuDQowMDAwMzU0 NjUzIDAwMDAwIG4NCjAwMDAzNTQ3OTYgMDAwMDAgbg0KMDAwMDM1NDg0NiAwMDAwMCBuDQowMDAw MzU0OTg5IDAwMDAwIG4NCjAwMDAzNTUwMzkgMDAwMDAgbg0KMDAwMDM1NTE4MiAwMDAwMCBuDQow MDAwMzU1MjMyIDAwMDAwIG4NCjAwMDAzNTUyOTggMDAwMDAgbg0KMDAwMDM1NTM2NCAwMDAwMCBu DQowMDAwMzU1NDMwIDAwMDAwIG4NCjAwMDAzNTU0OTYgMDAwMDAgbg0KMDAwMDM1NTU1MSAwMDAw MCBuDQowMDAwMzU1NjE3IDAwMDAwIG4NCjAwMDAzNTU3NjAgMDAwMDAgbg0KMDAwMDM1NTgxMCAw MDAwMCBuDQowMDAwMzU1ODc2IDAwMDAwIG4NCjAwMDAzNTU5NDIgMDAwMDAgbg0KMDAwMDM1NjA4 NSAwMDAwMCBuDQowMDAwMzU2MTM1IDAwMDAwIG4NCjAwMDAzNTYyNzggMDAwMDAgbg0KMDAwMDM1 NjMyOCAwMDAwMCBuDQowMDAwMzU2NDcxIDAwMDAwIG4NCjAwMDAzNTY1MjEgMDAwMDAgbg0KMDAw MDM1NjY2NCAwMDAwMCBuDQowMDAwMzU2NzE0IDAwMDAwIG4NCjAwMDAzNTY4NTcgMDAwMDAgbg0K MDAwMDM1NjkwNyAwMDAwMCBuDQowMDAwMzU3MDUwIDAwMDAwIG4NCjAwMDAzNTcxMDAgMDAwMDAg bg0KMDAwMDM1NzE3MSAwMDAwMCBuDQowMDAwMzU3MjM3IDAwMDAwIG4NCjAwMDAzNTczMDMgMDAw MDAgbg0KMDAwMDM1NzM2OSAwMDAwMCBuDQowMDAwMzU3NDM1IDAwMDAwIG4NCjAwMDAzNTc1Nzgg MDAwMDAgbg0KMDAwMDM1NzYyOCAwMDAwMCBuDQowMDAwMzU3NzcxIDAwMDAwIG4NCjAwMDAzNTc4 MjEgMDAwMDAgbg0KMDAwMDM1Nzk2NCAwMDAwMCBuDQowMDAwMzU4MDE0IDAwMDAwIG4NCjAwMDAz NTgxNTcgMDAwMDAgbg0KMDAwMDM1ODIwNyAwMDAwMCBuDQowMDAwMzU4MzQ5IDAwMDAwIG4NCjAw MDAzNTg0OTEgMDAwMDAgbg0KMDAwMDM1ODYzMyAwMDAwMCBuDQowMDAwMzU4Nzc1IDAwMDAwIG4N CjAwMDAzNTg5MTcgMDAwMDAgbg0KMDAwMDM1OTA1OSAwMDAwMCBuDQowMDAwMzU5MjAxIDAwMDAw IG4NCjAwMDAzNTkzNDEgMDAwMDAgbg0KMDAwMDM1OTQ4MyAwMDAwMCBuDQowMDAwMzU5NjI1IDAw MDAwIG4NCjAwMDAzNTk3NjcgMDAwMDAgbg0KMDAwMDM1OTg0NSAwMDAwMCBuDQowMDAwMzU5OTg3 IDAwMDAwIG4NCjAwMDAzNjAxMjkgMDAwMDAgbg0KMDAwMDM2MDI3MSAwMDAwMCBuDQowMDAwMzYw NDExIDAwMDAwIG4NCjAwMDAzNjA1NTEgMDAwMDAgbg0KMDAwMDM2MDY5MSAwMDAwMCBuDQowMDAw MzYwODMxIDAwMDAwIG4NCjAwMDAzNjA5NzIgMDAwMDAgbg0KMDAwMDM2MTExMiAwMDAwMCBuDQow MDAwMzYxMjUyIDAwMDAwIG4NCjAwMDAzNjEzOTIgMDAwMDAgbg0KMDAwMDM2MTUzMiAwMDAwMCBu DQowMDAwMzYxNjcyIDAwMDAwIG4NCjAwMDAzNjE4MTIgMDAwMDAgbg0KMDAwMDM2MTk1MiAwMDAw MCBuDQowMDAwMzYyMDkyIDAwMDAwIG4NCjAwMDAzNjIyMzIgMDAwMDAgbg0KMDAwMDM2MjM3MiAw MDAwMCBuDQowMDAwMzYyNTEyIDAwMDAwIG4NCjAwMDAzNjI2NTIgMDAwMDAgbg0KMDAwMDM2Mjc5 MiAwMDAwMCBuDQowMDAwMzYyOTMyIDAwMDAwIG4NCjAwMDAzNjMwNzIgMDAwMDAgbg0KMDAwMDM2 MzIxNCAwMDAwMCBuDQowMDAwMzYzMzU2IDAwMDAwIG4NCjAwMDAzNjM0NjUgMDAwMDAgbg0KMDAw MDM2MzYwNyAwMDAwMCBuDQowMDAwMzYzNzQ3IDAwMDAwIG4NCjAwMDAzNjM4ODkgMDAwMDAgbg0K MDAwMDM2NDAzMSAwMDAwMCBuDQowMDAwMzY0MTcxIDAwMDAwIG4NCjAwMDAzNjQzMTEgMDAwMDAg bg0KMDAwMDM2NDQ1MSAwMDAwMCBuDQowMDAwMzY0NTkxIDAwMDAwIG4NCjAwMDAzNjQ3MzEgMDAw MDAgbg0KMDAwMDM2NDg3MSAwMDAwMCBuDQowMDAwMzY1MDExIDAwMDAwIG4NCjAwMDAzNjUxNTEg MDAwMDAgbg0KMDAwMDM2NTI5MSAwMDAwMCBuDQowMDAwMzY1NDMzIDAwMDAwIG4NCjAwMDAzNjU1 NzMgMDAwMDAgbg0KMDAwMDM2NTcxMyAwMDAwMCBuDQowMDAwMzY1ODUzIDAwMDAwIG4NCjAwMDAz NjU5OTMgMDAwMDAgbg0KMDAwMDM2NjEzNSAwMDAwMCBuDQowMDAwMzY2Mjc1IDAwMDAwIG4NCjAw MDAzNjY0MTYgMDAwMDAgbg0KMDAwMDM2NjU1OCAwMDAwMCBuDQowMDAwMzY2Njk4IDAwMDAwIG4N CjAwMDAzNjY4MzggMDAwMDAgbg0KMDAwMDM2Njk4MCAwMDAwMCBuDQowMDAwMzY3MTIwIDAwMDAw IG4NCjAwMDAzNjcyNjAgMDAwMDAgbg0KMDAwMDM2NzQwMCAwMDAwMCBuDQowMDAwMzY3NTQwIDAw MDAwIG4NCjAwMDAzNjc2ODAgMDAwMDAgbg0KMDAwMDM2NzgyMCAwMDAwMCBuDQowMDAwMzY3OTYw IDAwMDAwIG4NCjAwMDAzNjgxMDAgMDAwMDAgbg0KMDAwMDM2ODI0MCAwMDAwMCBuDQowMDAwMzY4 MzgwIDAwMDAwIG4NCjAwMDAzNjg1MjIgMDAwMDAgbg0KMDAwMDM2ODY2MiAwMDAwMCBuDQowMDAw MzY4ODAyIDAwMDAwIG4NCjAwMDAzNjg5NDIgMDAwMDAgbg0KMDAwMDM2OTA4MiAwMDAwMCBuDQow MDAwMzY5MjIyIDAwMDAwIG4NCjAwMDAzNjkzNjIgMDAwMDAgbg0KMDAwMDM2OTUwMiAwMDAwMCBu DQowMDAwMzY5NjQyIDAwMDAwIG4NCjAwMDAzNjk3ODIgMDAwMDAgbg0KMDAwMDM2OTkyMiAwMDAw MCBuDQowMDAwMzcwMDYyIDAwMDAwIG4NCjAwMDAzNzAyMDQgMDAwMDAgbg0KMDAwMDM3MDM0NCAw MDAwMCBuDQowMDAwMzcwNDg0IDAwMDAwIG4NCjAwMDAzNzA2MjYgMDAwMDAgbg0KMDAwMDM3MDc2 OCAwMDAwMCBuDQowMDAwMzcwOTEwIDAwMDAwIG4NCjAwMDAzNzEwNTIgMDAwMDAgbg0KMDAwMDM3 MTE5NCAwMDAwMCBuDQowMDAwMzcxMzM0IDAwMDAwIG4NCjAwMDAzNzE0NzYgMDAwMDAgbg0KMDAw MDM3MTYxOCAwMDAwMCBuDQowMDAwMzcxNzU4IDAwMDAwIG4NCjAwMDAzNzE5MDAgMDAwMDAgbg0K MDAwMDM3MjA0MiAwMDAwMCBuDQowMDAwMzcyMTg0IDAwMDAwIG4NCjAwMDAzNzIzMjYgMDAwMDAg bg0KMDAwMDM3MjQ2OCAwMDAwMCBuDQowMDAwMzcyNjEwIDAwMDAwIG4NCjAwMDAzNzI3NTIgMDAw MDAgbg0KMDAwMDM3Mjg5NCAwMDAwMCBuDQowMDAwMzczMDM2IDAwMDAwIG4NCjAwMDAzNzMxNzYg MDAwMDAgbg0KMDAwMDM3MzMxOCAwMDAwMCBuDQowMDAwMzczNDYwIDAwMDAwIG4NCjAwMDAzNzM2 MDIgMDAwMDAgbg0KMDAwMDM3Mzc0NCAwMDAwMCBuDQowMDAwMzczODg2IDAwMDAwIG4NCjAwMDAz NzQwMjggMDAwMDAgbg0KMDAwMDM3NDE3MCAwMDAwMCBuDQowMDAwMzc0MzEyIDAwMDAwIG4NCjAw MDAzNzQ0NTQgMDAwMDAgbg0KMDAwMDM3NDU5NSAwMDAwMCBuDQowMDAwMzc0NzM4IDAwMDAwIG4N CjAwMDAzNzQ4ODEgMDAwMDAgbg0KMDAwMDM3NTAyNCAwMDAwMCBuDQowMDAwMzc1MTY3IDAwMDAw IG4NCjAwMDAzNzUzMTAgMDAwMDAgbg0KMDAwMDM3NTQ1MyAwMDAwMCBuDQowMDAwMzc1NTk3IDAw MDAwIG4NCjAwMDAzNzU3NDEgMDAwMDAgbg0KMDAwMDM3NTg4NSAwMDAwMCBuDQowMDAwMzc2MDI4 IDAwMDAwIG4NCjAwMDAzNzYxMzggMDAwMDAgbg0KMDAwMDM3NjI0NiAwMDAwMCBuDQowMDAwMzc2 Mzg3IDAwMDAwIG4NCjAwMDAzNzY1MzAgMDAwMDAgbg0KMDAwMDM3NjY3MSAwMDAwMCBuDQowMDAw Mzc2NzQ4IDAwMDAwIG4NCjAwMDAzODAzMjggMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAxMDE5 Pj4NCnN0YXJ0eHJlZg0KMTE2DQolJUVPRg0K ------=_NextPart_000_001A_01CA0B12.A0F0C150-- From cattelan@thebarn.com Wed Jul 22 09:11:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6MEBsEQ246740 for ; Wed, 22 Jul 2009 09:11:56 -0500 X-ASG-Debug-ID: 1248271956-16fb036c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from slurp.thebarn.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E836737B61C for ; Wed, 22 Jul 2009 07:12:37 -0700 (PDT) Received: from slurp.thebarn.com (mail.thebarn.com [208.42.117.202]) by cuda.sgi.com with ESMTP id qF98fldDpouH45uO for ; Wed, 22 Jul 2009 07:12:37 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.x.thebarn.com [10.0.0.11]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n6MECKAV080592; Wed, 22 Jul 2009 09:12:36 -0500 (CDT) (envelope-from cattelan@xfs.org) Message-ID: <4A671E44.4040305@xfs.org> Date: Wed, 22 Jul 2009 09:12:20 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: "Linda A. Walsh" CC: xfs-oss X-ASG-Orig-Subj: Re: does XFS support block sizes other than 512 bytes? Subject: Re: does XFS support block sizes other than 512 bytes? References: <4A6119B5.6000706@tlinx.org> In-Reply-To: <4A6119B5.6000706@tlinx.org> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.thebarn.com[208.42.117.202] X-Barracuda-Start-Time: 1248271957 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4091 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Linda A. Walsh wrote: > This one's a bit more specific than the last. If memory serves me, > XFS supported differing block sizes (which you could do on a hardware > format > of a SCSI drive) back on IRIX. But when first ported to Linux it didn't > work. Was that ever fixed? I seem to remember that going to 1-2K > block sizes > gave and extra 10%, and it almost seems logical that going to a 4kK > block size > would be ideal for xfs (presuming your disk doesn't start getting errors, > then it might get harder to remap sectors and you'd hit hard disk failure > (w/o remappable sectors) sooner. > > But at least 1K might be a reasonable tradeoff? Been quite a while since > I tried it and don't even know if the SAS drives allow it (if they do, > I wonder > if the newer SATA drives do?) Yes XFS can support any power of 2 sector size up to the page size of your system. And it is recommend that on things like raid5 devices that the sector size be set to the same size as the filesystem block size. > > thanks more... :-) > -linda > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From gabriel@oxeva.fr Wed Jul 22 10:26:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6MFQqTI251824 for ; Wed, 22 Jul 2009 10:26:54 -0500 X-ASG-Debug-ID: 1248276947-0df002b30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.reagi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A1CFA10AC220 for ; Wed, 22 Jul 2009 08:35:47 -0700 (PDT) Received: from mail.reagi.com (mail.reagi.com [195.60.188.80]) by cuda.sgi.com with ESMTP id 9Hj7CuwAvnCq9pHu for ; Wed, 22 Jul 2009 08:35:47 -0700 (PDT) Received: (qmail 3107 invoked by uid 89); 22 Jul 2009 15:27:32 -0000 Received: by simscan 1.4.0 ppid: 3101, pid: 3104, t: 0.1070s scanners: regex: 1.4.0 clamav: 0.95.1/m:/d:9222 Received: from unknown (HELO Nezumi) (gabriel@oxeva.fr@83.202.109.146) by 0 with ESMTPA; 22 Jul 2009 15:27:32 -0000 From: "Gabriel Barazer" To: X-ASG-Orig-Subj: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) Subject: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) Date: Wed, 22 Jul 2009 17:27:21 +0200 Organization: Oxeva Message-ID: <000c01ca0ae0$e85420a0$b8fc61e0$@fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AcoK4OfmQedj9fjZS+2YtAAkDf0Ehg== Content-Language: en-us X-Barracuda-Connect: mail.reagi.com[195.60.188.80] X-Barracuda-Start-Time: 1248276948 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4098 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, I recently put a NFS file server into production, with mostly XFS = volumes on LVM. The server was quite low on traffic until this morning = and one of the filesystems crashed twice since this morning with the = following backtrace: Filesystem "dm-24": XFS internal error xfs_trans_cancel at line 1164 of = file fs/xfs/xfs_trans.c. Caller 0xffffffff811b09a7 Pid: 2053, comm: nfsd Not tainted 2.6.28.9-filer #1 Call Trace: [] xfs_rename+0x4a1/0x4f6 [] xfs_trans_cancel+0x56/0xed [] xfs_rename+0x4a1/0x4f6 [] xfs_vn_rename+0x5e/0x65 [] vfs_rename+0x1fb/0x2fb [] nfsd_rename+0x299/0x349 [] sunrpc_cache_lookup+0x4a/0x109 [] nfsd3_proc_rename+0xdb/0xea [] decode_filename+0x16/0x45 [] nfsd_dispatch+0xdf/0x1b5 [] svc_process+0x3f7/0x610 [] nfsd+0x12e/0x185 [] nfsd+0x0/0x185 [] kthread+0x47/0x71 [] schedule_tail+0x24/0x5c [] child_rip+0xa/0x11 [] read_tsc+0x0/0x19 [] kthread+0x0/0x71=09 [] child_rip+0x0/0x11 xfs_force_shutdown(dm-24,0x8) called from line 1165 of file = fs/xfs/xfs_trans.c. Return address =3D 0xffffffff811b181f Filesystem "dm-24": Corruption of in-memory data detected. Shutting = down filesystem: dm-24 The two crashed are related to the same function: xfs_rename. I _really_ cannot upgrade to 2.6.29 or later because of the = "reconnect_path: npd !=3D pd" bug and the maybe related radix-tree bug ( = http://bugzilla.kernel.org/show_bug.cgi?id=3D13375 ) affecting all = kernel version afeter 2.6.28. Unmounting then remounting the filesystem allow to access the mountpoint = again without any error message or apparent file corruption. This filesystem is used by ~30 NFS clients and contains about 5M files = (100GB). Before using the volume over NFS, there was only local activity (rsync = syncing) and we didn't get any error. I expect to see this crash again in a few hours except if the volume is = really corrupted. Does a full filesystem copy to a newly created volume = would have a chance to solve the problem? Thanks, Gabriel From wferi@niif.hu Wed Jul 22 12:52:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6MHqQEQ259389 for ; Wed, 22 Jul 2009 12:52:28 -0500 X-ASG-Debug-ID: 1248285679-0ce101f30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tac.ki.iif.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F3909AC3902 for ; Wed, 22 Jul 2009 11:01:19 -0700 (PDT) Received: from tac.ki.iif.hu (tac.ki.iif.hu [193.6.222.43]) by cuda.sgi.com with ESMTP id WEUbY5edYT5BIBPp for ; Wed, 22 Jul 2009 11:01:19 -0700 (PDT) Received: from wferi by tac.ki.iif.hu with local (Exim 4.69) (envelope-from ) id 1MTfz7-0001Qu-VA; Wed, 22 Jul 2009 19:52:09 +0200 From: Ferenc Wagner To: Christoph Hellwig Cc: Ray Lee , Andrew Morton , Peter Staubach , Miklos Szeredi , xfs@oss.sgi.com, linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: mmap vs mtime in 2.6.26 and up Subject: Re: mmap vs mtime in 2.6.26 and up References: <20090518114305.GA6303@infradead.org> Date: Wed, 22 Jul 2009 19:52:09 +0200 In-Reply-To: <20090518114305.GA6303@infradead.org> (Christoph Hellwig's message of "Mon, 18 May 2009 07:43:05 -0400") Message-ID: <87ab2w8v1y.fsf@tac.ki.iif.hu> User-Agent: Gnus/5.110006 (No Gnus v0.6) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Barracuda-Connect: tac.ki.iif.hu[193.6.222.43] X-Barracuda-Start-Time: 1248285680 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4106 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig writes: > On Fri, May 15, 2009 at 12:50:54PM -0400, Christoph Hellwig wrote: >> On Fri, May 15, 2009 at 06:40:29PM +0200, Ferenc Wagner wrote: >>> Thanks for the analysis. Unfortunately I don't nearly know enough to >>> work on this issue, but would like to track it as it affects our >>> backup system. So, shouldn't #2645 be reopened again? >> >> Yes, definitively as the current "fix" is incorrected. I'll try to cook >> up a correct version once I get some time. > > Doing this correctly in the framework of the current codee is > unfortunately not so easy, as calling ->setattr requires taking i_mutex > which we can't in the pagefaul path. > > To fix this properly we need to actually update the timestamps during > msync and co as done by the patches from Miklos: > http://lkml.org/lkml/2007/2/28/166 > and Peter: > http://lkml.org/lkml/2006/5/31/176 Hi Christoph, http://bugzilla.kernel.org/show_bug.cgi?id=2645#c53 shows that Anton doesn't quite agree with you on this. I really can't tell, would you (or anybody from the accused XFS community) please comment? Or did you perhaps fix it meanwhile? I can't easily test never kernels, but I will if there's some chance. -- Thanks, Feri. From k@adamski.org Wed Jul 22 20:40:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6N1euBD021265 for ; Wed, 22 Jul 2009 20:40:56 -0500 X-ASG-Debug-ID: 1248313794-3882014a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from radon.netxsys.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D5409AC8AA2 for ; Wed, 22 Jul 2009 18:49:54 -0700 (PDT) Received: from radon.netxsys.com (radon.netxsys.com [204.16.202.162]) by cuda.sgi.com with ESMTP id REjU1SmGj15bFHST for ; Wed, 22 Jul 2009 18:49:54 -0700 (PDT) Received: from [205.233.151.7] (Oxygen.NetXSys.Com [205.233.151.7]) by radon.netxsys.com (Postfix) with ESMTP id 6E0A9C0000A5 for ; Wed, 22 Jul 2009 21:41:36 -0400 (EDT) X-ASG-Orig-Subj: XFS: file system too large to be mounted on this system. 2.6.30.1 Subject: XFS: file system too large to be mounted on this system. 2.6.30.1 From: Krzysztof Adamski To: xfs@oss.sgi.com Content-Type: text/plain Date: Wed, 22 Jul 2009 21:41:35 -0400 Message-Id: <1248313295.4730.2.camel@oxygen.netxsys.com> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: radon.netxsys.com[204.16.202.162] X-Barracuda-Start-Time: 1248313794 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4139 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean I got "XFS: file system too large to be mounted on this system." when mounting my not to large file system. I'm running Debian lenny with a self compiled kernel, 32 bit userland distribution. I have both 32 and 64 bit kernels of the 2.6.30.1 installed. I was running the 64bit kernel for a while, I needed to switch to the 32 bit version to run VBox. After reboot to 32bit kernel, one filesystem would not mount. The xfs_repair did not find any good superblocks. Fortunately booting the 64bit kernel allowed mounting of this filesystem. This is a df while running 64bit kernel: /dev/mapper/big--raid-file--store xfs 2558652416 2540114040 18538376 100% /file-store /dev/sda1 xfs 195263012 194723636 539376 100% /disks/a1 The interesting part is that /disks/a1 did not have problem with mounting on the 32bit kernel, just the /file-store. When running 2.6.28.4 32bit kernel I have no problem with mounting this filesystem. So something broke between 2.6.28.4 and 2.6.30.1 I can provide any other info. K From etntecom@funky.cirtexhosting.com Wed Jul 22 22:46:41 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6N3ke6u027673 for ; Wed, 22 Jul 2009 22:46:41 -0500 X-ASG-Debug-ID: 1248320842-304001b80000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from funky.cirtexhosting.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C1E791B58BE7 for ; Wed, 22 Jul 2009 20:47:22 -0700 (PDT) Received: from funky.cirtexhosting.com (funky.cirtexhosting.com [208.53.158.84]) by cuda.sgi.com with ESMTP id dm40kstQxEffz2at for ; Wed, 22 Jul 2009 20:47:22 -0700 (PDT) Received: from etntecom by funky.cirtexhosting.com with local (Exim 4.69) (envelope-from ) id 1MTpGw-0000Vd-3N for linux-xfs@oss.sgi.com; Wed, 22 Jul 2009 22:47:10 -0500 To: linux-xfs@oss.sgi.com From: 7daywealthpartner@freemail.lt Reply-To: 7daywealthpartner@freemail.lt X-Mailer: Perl Powered Socket Mailer X-ASG-Orig-Subj: Website Suggestion from 7DayWealth JustLAUNCHTODAY Subject: Website Suggestion from 7DayWealth JustLAUNCHTODAY Message-Id: Date: Wed, 22 Jul 2009 22:47:10 -0500 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - funky.cirtexhosting.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [32340 32003] / [47 12] X-AntiAbuse: Sender Address Domain - funky.cirtexhosting.com X-Source: /usr/bin/perl X-Source-Args: /usr/local/bin/perl birdcast.cgi X-Source-Dir: etntelephone.com:/public_html/cgi-bin X-Barracuda-Connect: funky.cirtexhosting.com[208.53.158.84] X-Barracuda-Start-Time: 1248320842 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4997 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4146 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi linux-xfs, 7DayWealth JustLAUNCHTODAY stopped by the Discount Travel Home Page and suggested that you visit the following URL: http://www.etntelephone.com/cgi-bin/birdcast.cgi Here is their message.... No BRAINER NEEDED - ALLOW YOUR SELF TO BE THE TOP MILION EARNER TODAY! WE CRACKED THE CODE TO MAKE EASY MONEY FOR YOU! JUST LAUNCH TODAY! NO SURFING, NO HYIP, NO DOUBLERS, YOU WILL MAKE MONEY - http://urlxp.com/go/7daywealth-launching-now Greetings! A successful friend tipped me off about a brand new online marketing system that is simple and POWERFUL. Its ‘automatic’ features help ordinary people earn serious income in their spare time from home with an AWESOME system called 7DayWealth. They have a goal to help a million people build successful home based businesses with their unique system. AND, believe it or not, they actually SHOW you how your personal downline network is building, even BEFORE you officially join. The sooner you visit and become a FREE Pre-enrollee, the sooner they begin placing people below you — anyone of which could mean immediate income for your family. Literally hundreds of people who join after you, would be making you money, as they bui ld for themselves. It's HOT. Then, the more people on your downline who buy product and use the simple system to build their business below you, the more money YOU can make in no time at ALL. Remember, it’s FREE. Check it out cash, and when you see people being placed below you can either lock in your position and get paid on them, or forfeit your spot and they will leap frog above you. Either way is fine, just be sure to check it out: TAKE A TRIAL FOR FREE - http://urlxp.com/go/7daywealth-launching-now Email me after you sign up so we can discuss it. Have an awesome day, Mike 7daywealthpartner@europe.com For Free Information, Fill In Your Info ... You Will Receive A Verification Email In A Few Minutes To Opt In To Our System, If You Do Not You Have To Try Again Using Another Email Address! ----------------------- eMail here: 7daywealthpartner@europe.com and add "remove" for no further emails.. Discount Travel Home Page http://www.DiscountAirfares.com/ From sandeen@sandeen.net Wed Jul 22 23:10:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_32 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6N4ArDr028716 for ; Wed, 22 Jul 2009 23:10:54 -0500 X-ASG-Debug-ID: 1248322790-079e03820000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 78248AC8DD1 for ; Wed, 22 Jul 2009 21:19:51 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Je7Klt5sJ7OFLr7w for ; Wed, 22 Jul 2009 21:19:51 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id ACD3FA9C9A3; Wed, 22 Jul 2009 23:11:33 -0500 (CDT) Message-ID: <4A67E2F5.2030400@sandeen.net> Date: Wed, 22 Jul 2009 23:11:33 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Gabriel Barazer CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) Subject: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) References: <000c01ca0ae0$e85420a0$b8fc61e0$@fr> In-Reply-To: <000c01ca0ae0$e85420a0$b8fc61e0$@fr> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248322792 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4149 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Gabriel Barazer wrote: > Hi, > > I recently put a NFS file server into production, with mostly XFS volumes on LVM. The server was quite low on traffic until this morning and one of the filesystems crashed twice since this morning with the following backtrace: > > Filesystem "dm-24": XFS internal error xfs_trans_cancel at line 1164 of file fs/xfs/xfs_trans.c. Caller 0xffffffff811b09a7 > Pid: 2053, comm: nfsd Not tainted 2.6.28.9-filer #1 > Call Trace: > [] xfs_rename+0x4a1/0x4f6 > [] xfs_trans_cancel+0x56/0xed > [] xfs_rename+0x4a1/0x4f6 ... > xfs_force_shutdown(dm-24,0x8) called from line 1165 of file fs/xfs/xfs_trans.c. Return address = 0xffffffff811b181f > Filesystem "dm-24": Corruption of in-memory data detected. Shutting down filesystem: dm-24 > > The two crashed are related to the same function: xfs_rename. Can you do objdump -d xfs.ko | grep "xfs_rename\|xfs_trans_cancel" and maybe we can see which call to xfs_trans_cancel in xfs_rename this was. The problem relates to canceling a dirty transaction on an error path. -Eric > I _really_ cannot upgrade to 2.6.29 or later because of the "reconnect_path: npd != pd" bug and the maybe related radix-tree bug ( http://bugzilla.kernel.org/show_bug.cgi?id=13375 ) affecting all kernel version afeter 2.6.28. > > Unmounting then remounting the filesystem allow to access the mountpoint again without any error message or apparent file corruption. > This filesystem is used by ~30 NFS clients and contains about 5M files (100GB). > > Before using the volume over NFS, there was only local activity (rsync syncing) and we didn't get any error. > > I expect to see this crash again in a few hours except if the volume is really corrupted. Does a full filesystem copy to a newly created volume would have a chance to solve the problem? > > Thanks, > > Gabriel > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Wed Jul 22 23:19:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6N4J1wM029083 for ; Wed, 22 Jul 2009 23:19:02 -0500 X-ASG-Debug-ID: 1248323280-07a603bf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C81FBAC8E0D for ; Wed, 22 Jul 2009 21:28:00 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id FE5qMthxeHCT0W1i for ; Wed, 22 Jul 2009 21:28:00 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 6739EA9C9A8; Wed, 22 Jul 2009 23:19:43 -0500 (CDT) Message-ID: <4A67E4DE.1050904@sandeen.net> Date: Wed, 22 Jul 2009 23:19:42 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Krzysztof Adamski CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: file system too large to be mounted on this system. 2.6.30.1 Subject: Re: XFS: file system too large to be mounted on this system. 2.6.30.1 References: <1248313295.4730.2.camel@oxygen.netxsys.com> In-Reply-To: <1248313295.4730.2.camel@oxygen.netxsys.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248323280 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4149 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Krzysztof Adamski wrote: > I got "XFS: file system too large to be mounted on this system." when > mounting my not to large file system. > > I'm running Debian lenny with a self compiled kernel, 32 bit userland > distribution. > > I have both 32 and 64 bit kernels of the 2.6.30.1 installed. I was > running the 64bit kernel for a while, I needed to switch to the 32 bit > version to run VBox. After reboot to 32bit kernel, one filesystem would > not mount. The xfs_repair did not find any good superblocks. > Fortunately booting the 64bit kernel allowed mounting of this > filesystem. > This is a df while running 64bit kernel: > /dev/mapper/big--raid-file--store > xfs 2558652416 2540114040 18538376 100% /file-store > /dev/sda1 xfs 195263012 194723636 539376 100% /disks/a1 > > The interesting part is that /disks/a1 did not have problem with > mounting on the 32bit kernel, just the /file-store. Do you have CONFIG_LBD (or maye now CONFIG_LBDAF) set on the newer 32-bit kernel? You'll need that. If you do .... file-store is about 2T? What is the filesystem block size? (xfs_info on the mountpoint would tell you) The test is looking at whether the nr of filesystem blocks overflows based on CONFIG_LBD or not... and the function hasn't changed since 2007.... hrm. I'll put my money on CONFIG_LBDAF. -Eric > When running 2.6.28.4 32bit kernel I have no problem with mounting this > filesystem. So something broke between 2.6.28.4 and 2.6.30.1 > > I can provide any other info. > > K > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From elbles@sessys.com Thu Jul 23 18:57:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6NNvCLt087532 for ; Thu, 23 Jul 2009 18:57:12 -0500 X-ASG-Debug-ID: 1248393475-55f502e20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta11.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EEA493815AD for ; Thu, 23 Jul 2009 16:57:55 -0700 (PDT) Received: from mta11.charter.net (mta11.charter.net [216.33.127.80]) by cuda.sgi.com with ESMTP id G6ZV7Ota1CCmvVfm for ; Thu, 23 Jul 2009 16:57:55 -0700 (PDT) Received: from imp10 ([10.20.200.10]) by mta11.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090723235754.JUPY22327.mta11.charter.net@imp10> for ; Thu, 23 Jul 2009 19:57:54 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp10 with smtp.charter.net id Kbxu1c00L4yHaWo05bxuCl; Thu, 23 Jul 2009 19:57:54 -0400 Received: from c400 (dhcp-yelw-03-11.internal.sessys.com [192.168.3.11]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6NNvq14012260 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 23 Jul 2009 19:57:53 -0400 From: "Sean Elble" To: X-ASG-Orig-Subj: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Using xfsdump On Linux With IRIX Version 1 FS? Date: Thu, 23 Jul 2009 19:57:52 -0400 Organization: SES Computer Systems Message-ID: <008401ca0bf1$64c2eac0$2e48c040$@com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AcoL8WLEx+//WtF5Sb2e31ExzH7Kvw== Content-Language: en-us X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9609/Thu Jul 23 14:27:56 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta11.charter.net[216.33.127.80] X-Barracuda-Start-Time: 1248393475 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4227 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Hi all, While I am aware that the current kernel implementation of XFS doesn't support mounting an IRIX filesystem with version 1 directories, I'm not so sure whether xfsdump/xfsrestore will support the dumping of an IRIX filesystem with version 1 directories. To be more specific, I am dealing with an old disk from an Indigo2, running IRIX 6.5.6m with version 1 (0x1094) directories. I was hoping it had version 2 directories, but after finding an old SCSI card I could put in a Linux box with XFS support, I found just the opposite, obviously. I had the old SCSI card back in its donor system (which was up-and-running) when it occurred to me that xfsdump/xfsrestore *might* be a possibility, and I can't take it (the donor system) down again unless I know I can make this work. If anyone can give me an answer to this question, I would certainly appreciate it. I didn't see anything in the man pages, and my Google searches have proven fruitless thus far, but I've been known to be blind on occasion. :-) Thanks, in advance. -- +------------------------------------------------- | Sean Elble | Virginia Tech, Class of 2009 | E-Mail: elbles@sessys.com | Web: http://www.sessys.com/~elbles/ | Cell: 860.946.9477 +------------------------------------------------- From k@adamski.org Thu Jul 23 19:24:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O0OmdD088877 for ; Thu, 23 Jul 2009 19:24:48 -0500 X-ASG-Debug-ID: 1248395632-6dba01ea0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from radon.netxsys.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 56D4210B2B1E for ; Thu, 23 Jul 2009 17:33:52 -0700 (PDT) Received: from radon.netxsys.com (radon.netxsys.com [204.16.202.162]) by cuda.sgi.com with ESMTP id 9mxayb6N3xpM6Dpv for ; Thu, 23 Jul 2009 17:33:52 -0700 (PDT) Received: from [205.233.151.7] (Oxygen.NetXSys.Com [205.233.151.7]) by radon.netxsys.com (Postfix) with ESMTP id 611A2C0000A5; Thu, 23 Jul 2009 20:25:31 -0400 (EDT) X-ASG-Orig-Subj: Re: XFS: file system too large to be mounted on this system. 2.6.30.1 Subject: Re: XFS: file system too large to be mounted on this system. 2.6.30.1 From: Krzysztof Adamski To: Eric Sandeen Cc: xfs@oss.sgi.com In-Reply-To: <4A67E4DE.1050904@sandeen.net> References: <1248313295.4730.2.camel@oxygen.netxsys.com> <4A67E4DE.1050904@sandeen.net> Content-Type: text/plain Date: Thu, 23 Jul 2009 20:25:30 -0400 Message-Id: <1248395130.4520.3.camel@oxygen.netxsys.com> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: radon.netxsys.com[204.16.202.162] X-Barracuda-Start-Time: 1248395633 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4228 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, 2009-07-22 at 23:19 -0500, Eric Sandeen wrote: > Krzysztof Adamski wrote: > > I got "XFS: file system too large to be mounted on this system." when > > mounting my not to large file system. > > > > I'm running Debian lenny with a self compiled kernel, 32 bit userland > > distribution. > > > > I have both 32 and 64 bit kernels of the 2.6.30.1 installed. I was > > running the 64bit kernel for a while, I needed to switch to the 32 bit > > version to run VBox. After reboot to 32bit kernel, one filesystem would > > not mount. The xfs_repair did not find any good superblocks. > > Fortunately booting the 64bit kernel allowed mounting of this > > filesystem. > > This is a df while running 64bit kernel: > > /dev/mapper/big--raid-file--store > > xfs 2558652416 2540114040 18538376 100% /file-store > > /dev/sda1 xfs 195263012 194723636 539376 100% /disks/a1 > > > > The interesting part is that /disks/a1 did not have problem with > > mounting on the 32bit kernel, just the /file-store. > > > Do you have CONFIG_LBD (or maye now CONFIG_LBDAF) set on the newer > 32-bit kernel? You'll need that. Yes, this was it, the CONFIG_LBD got unset when I used the .config file to compile on a system that was running a 64 bit kernel. Now everything is back to normal, thanks. > > If you do .... > > file-store is about 2T? What is the filesystem block size? (xfs_info > on the mountpoint would tell you) For reference: # xfs_info /file-store meta-data=/dev/mapper/big--raid-file--store isize=256 agcount=32, agsize=19990496 blks = sectsz=512 attr=0 data = bsize=4096 blocks=639695872, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=65536 blocks=0, rtextents=0 > > The test is looking at whether the nr of filesystem blocks overflows > based on CONFIG_LBD or not... > > and the function hasn't changed since 2007.... hrm. > > I'll put my money on CONFIG_LBDAF. > > -Eric > > > When running 2.6.28.4 32bit kernel I have no problem with mounting this > > filesystem. So something broke between 2.6.28.4 and 2.6.30.1 > > > > I can provide any other info. > > > > K > > > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From elbles@sessys.com Thu Jul 23 19:43:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O0hX0C089824 for ; Thu, 23 Jul 2009 19:43:34 -0500 X-ASG-Debug-ID: 1248396256-2d80031b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta11.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0D68913E9DCC for ; Thu, 23 Jul 2009 17:44:16 -0700 (PDT) Received: from mta11.charter.net (mta11.charter.net [216.33.127.80]) by cuda.sgi.com with ESMTP id aKIL7wZHpMo0Gr7c for ; Thu, 23 Jul 2009 17:44:16 -0700 (PDT) Received: from imp09 ([10.20.200.9]) by mta11.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090724004416.KTTV22327.mta11.charter.net@imp09> for ; Thu, 23 Jul 2009 20:44:16 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp09 with smtp.charter.net id KckF1c00G4yHaWo05ckFRs; Thu, 23 Jul 2009 20:44:16 -0400 Received: from c400 (dhcp-yelw-03-11.internal.sessys.com [192.168.3.11]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6O0iD4L014638 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 23 Jul 2009 20:44:14 -0400 From: "Sean Elble" To: X-ASG-Orig-Subj: UPDATE: Using xfsdump On Linux With IRIX Version 1 FS Subject: UPDATE: Using xfsdump On Linux With IRIX Version 1 FS Date: Thu, 23 Jul 2009 20:44:13 -0400 Organization: SES Computer Systems Message-ID: <009601ca0bf7$de568440$9b038cc0$@com> X-Mailer: Microsoft Office Outlook 12.0 MIME-Version: 1.0 Thread-Index: AcoL99yv0oRWbZeIQQSvKmCrroJBbA== Content-Language: en-us Content-Type: multipart/signed; micalg=SHA1; protocol="application/x-pkcs7-signature"; boundary="----=_NextPart_000_0091_01CA0BD6.55ACDF20" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9609/Thu Jul 23 14:27:56 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta11.charter.net[216.33.127.80] X-Barracuda-Start-Time: 1248396257 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4229 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M This is a multi-part message in MIME format. ------=_NextPart_000_0091_01CA0BD6.55ACDF20 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi all, My apologies for my last e-mail, as I apparently missed this crucial line in the xfsdump(8) man page: "The filesystem, filesystem, can be specified either as a mount point or as a special device file (for example, /dev/dsk/dks0d1s0). The filesystem must be mounted to be dumped." Oh well. If anyone has any other thoughts on how to reset the root password on an IRIX box with a version 1 XFS file system without IRIX CDs, that would be appreciated, heh. -- +------------------------------------------------- | Sean Elble | Virginia Tech, Class of 2009 | E-Mail: elbles@sessys.com | Web: http://www.sessys.com/~elbles/ | Cell: 860.946.9477 +------------------------------------------------- ------=_NextPart_000_0091_01CA0BD6.55ACDF20 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJVDCCAtww ggJFoAMCAQICEC9/k0eNz8FH+XIKgerFfGMwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCWkEx JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA5MDExNjAzMDY1N1oXDTEwMDExNjAzMDY1 N1owQzEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEgMB4GCSqGSIb3DQEJARYRZWxi bGVzQHNlc3N5cy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfR8VzMbvmwy4+ ohpVDe9tw36kwluDuZV/xQAYXs7o5tShCh9Vl1493hbeLIbbGIayxN1FNqfuzm47/HV0sVE6gWTV ltrMLfazyIcP+53JB95omy/TZ7TwmUK3nhqPAuCVlLEAlJgpoKYBfmpSK6Y4SRGDzqx/pzRHLkBt 8FyKN+DQ8R7im0pXqyAX75UKjWjMHFLE39u0b0tHQbnAcnIC4Jz5uKIa/7v9jq+KEd0xedJVouba bPrETqgRXCX624tc9fpRQp4RRO2IO6rI5N/s8VqEYg95bOQOR1Ix/3wvHHNWqxrpqTelWARARl4+ GK0sVMM/HlGVgRR9Y8VYEv6rAgMBAAGjLjAsMBwGA1UdEQQVMBOBEWVsYmxlc0BzZXNzeXMuY29t MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEFBQADgYEAG4ldJjGC282reNDBG4eahTikx/rXLIpb yhIQpo8FvMXU+DAMEVqsApqu5spA4hQkZwa8Bs9u8IJcv6uftCxF+78svFUmmxmKCeqen7Vd3mdz /bSCSiJj8BeUV/hueaT2XAoX0BUeVbY9ZpSou934vsM3Lo1lDOCjdNJxTeO38RYwggMtMIIClqAD AgECAgEAMA0GCSqGSIb3DQEBBAUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBD YXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYD VQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVy c29uYWwgRnJlZW1haWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0 ZS5jb20wHhcNOTYwMTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCB0TELMAkGA1UEBhMCWkExFTAT BgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUg Q29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIG A1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25h bC1mcmVlbWFpbEB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUadfUsJRk W3HpR9gMUbbqcpGwhF59LQ2PexLfhSV1KHQ6QixjJ5+Ve0vvfhmHHYbqo925zpZkGsIUbkSsfOaP 6E0PcR9AOKYAo4d49vmUhl6t6sBeduvZFKNdbnp8DKVLVX8GGSl/npom1Wq7OCQIapjHsdqjmJH9 edvlWsQcuQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAMfskn5O +PWWpWdiKqTwTRFg0G+NYFhhrCa7UjVcCM8w+6hKloofYkIjjBcP9LpknBesRynfnZhe0mxgcVyi rNx54+duAEcftQ0o6AKd5Jr9E/Sm2Xyx+NxfIyYJkYBz0BQb3kOpgyXy5pwvFcr+pquKB3WLDN1R hGvk+NHOd6KBMIIDPzCCAqigAwIBAgIBDTANBgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3 dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEk MCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJz b25hbC1mcmVlbWFpbEB0aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVow YjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAq BgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU 5VAKMNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYBAf8C AQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBlcnNvbmFs RnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFQcml2 YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2asZw9/r6y+whehQ5aU nX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSeJVCUYsfbJ3FXJY3dqZw5 jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHTHUb/XV9lTzGCA3kwggN1AgEB MHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4x LDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAvf5NHjc/BR/ly CoHqxXxjMAkGBSsOAwIaBQCgggHYMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcN AQkFMQ8XDTA5MDcyNDAwNDQxMlowIwYJKoZIhvcNAQkEMRYEFLEOAI2ejrmEblEgodT1D5Zgx6Bg MGcGCSqGSIb3DQEJDzFaMFgwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMC AgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAcGBSsOAwIaMAoGCCqGSIb3DQIFMIGFBgkrBgEE AYI3EAQxeDB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5 KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQL3+T R43PwUf5cgqB6sV8YzCBhwYLKoZIhvcNAQkQAgsxeKB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQK ExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwg RnJlZW1haWwgSXNzdWluZyBDQQIQL3+TR43PwUf5cgqB6sV8YzANBgkqhkiG9w0BAQEFAASCAQAv nrd+ipooqMJ6aoohbJKs0mll+rE9SpS6tNrGZcaPgVuXckHz0q2hMHedIigrwgl/FdC9YqlTxSt5 v0HU0OuP+V+uuNzgDFu/hc8KGWVJv8uyqBg41U9+rqyKFmWy7rIF0TCH/7kaY6e9s/oum2afC5yD HymRdwNoVAAdiwm9RPjgteWaoW9qgyZVEVydaKwSaqXmENO6FXCngBOx42NuR22BWuzcPxHry+vK 2aD3Pf1hD/QR24WP0NFWjvo3gMwX0B4P6Ii3ixBmqz+5O6N8u+bh2UVR94oFYcU293hov7kivFcD JDUKaI8h9uZMuNcE/avTf4wkwY6XLEuWLQUwAAAAAAAA ------=_NextPart_000_0091_01CA0BD6.55ACDF20-- From sandeen@sandeen.net Thu Jul 23 21:23:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O2N0C4094518 for ; Thu, 23 Jul 2009 21:23:00 -0500 X-ASG-Debug-ID: 1248402223-4d4701bf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 487F91B596A4 for ; Thu, 23 Jul 2009 19:23:43 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id JvPLPMhqTFXaXds6 for ; Thu, 23 Jul 2009 19:23:43 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 87056A9DAA4; Thu, 23 Jul 2009 21:23:42 -0500 (CDT) Message-ID: <4A691B2D.1090600@sandeen.net> Date: Thu, 23 Jul 2009 21:23:41 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Sean Elble CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? References: <008401ca0bf1$64c2eac0$2e48c040$@com> In-Reply-To: <008401ca0bf1$64c2eac0$2e48c040$@com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248402224 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4237 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Sean Elble wrote: > Hi all, > > While I am aware that the current kernel implementation of XFS doesn't > support mounting an IRIX filesystem with version 1 directories, I'm not so > sure whether xfsdump/xfsrestore will support the dumping of an IRIX > filesystem with version 1 directories. To be more specific, I am dealing > with an old disk from an Indigo2, running IRIX 6.5.6m with version 1 > (0x1094) directories. I was hoping it had version 2 directories, but after > finding an old SCSI card I could put in a Linux box with XFS support, I > found just the opposite, obviously. I had the old SCSI card back in its > donor system (which was up-and-running) when it occurred to me that > xfsdump/xfsrestore *might* be a possibility, and I can't take it (the donor > system) down again unless I know I can make this work. > > If anyone can give me an answer to this question, I would certainly > appreciate it. I didn't see anything in the man pages, and my Google > searches have proven fruitless thus far, but I've been known to be blind on > occasion. :-) Thanks, in advance. > linux used to work with v1 dirs, though there were some problems. It never got fixed, was not critical for 99.9% of users, and got taken out. But it might work well enough to do what you need. Go through the changelogs or google, and try an older Linux kernel, perhaps .... -Eric From elbles@sessys.com Thu Jul 23 22:01:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O31TQ4097030 for ; Thu, 23 Jul 2009 22:01:29 -0500 X-ASG-Debug-ID: 1248405032-72e3006e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta11.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6CA9D10B6BCF for ; Thu, 23 Jul 2009 20:10:32 -0700 (PDT) Received: from mta11.charter.net (mta11.charter.net [216.33.127.80]) by cuda.sgi.com with ESMTP id xFf2jw4Yp4UMKhBh for ; Thu, 23 Jul 2009 20:10:32 -0700 (PDT) Received: from imp09 ([10.20.200.9]) by mta11.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090724030210.NVIY22327.mta11.charter.net@imp09>; Thu, 23 Jul 2009 23:02:10 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp09 with smtp.charter.net id Kf2A1c00C4yHaWo05f2A5q; Thu, 23 Jul 2009 23:02:10 -0400 Received: from [192.168.3.9] (dhcp-yelw-03-09.internal.sessys.com [192.168.3.9]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6O326GE021679 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Thu, 23 Jul 2009 23:02:07 -0400 User-Agent: Microsoft-Entourage/12.20.0.090605 Date: Thu, 23 Jul 2009 23:02:05 -0400 X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Sean Elble To: Eric Sandeen CC: Message-ID: Thread-Topic: Using xfsdump On Linux With IRIX Version 1 FS? Thread-Index: AcoMCx+6cKsPiVndA0yYpOrm/+frWQ== In-Reply-To: <4A691B2D.1090600@sandeen.net> Mime-version: 1.0 Content-type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="B_3331234925_2670211" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9610/Thu Jul 23 22:11:48 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta11.charter.net[216.33.127.80] X-Barracuda-Start-Time: 1248405034 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4240 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3331234925_2670211 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit On 7/23/09 10:23 PM, "Eric Sandeen" wrote: > Sean Elble wrote: >> Hi all, >> >> While I am aware that the current kernel implementation of XFS doesn't >> support mounting an IRIX filesystem with version 1 directories, I'm not so >> sure whether xfsdump/xfsrestore will support the dumping of an IRIX >> filesystem with version 1 directories. To be more specific, I am dealing >> with an old disk from an Indigo2, running IRIX 6.5.6m with version 1 >> (0x1094) directories. I was hoping it had version 2 directories, but after >> finding an old SCSI card I could put in a Linux box with XFS support, I >> found just the opposite, obviously. I had the old SCSI card back in its >> donor system (which was up-and-running) when it occurred to me that >> xfsdump/xfsrestore *might* be a possibility, and I can't take it (the donor >> system) down again unless I know I can make this work. >> >> If anyone can give me an answer to this question, I would certainly >> appreciate it. I didn't see anything in the man pages, and my Google >> searches have proven fruitless thus far, but I've been known to be blind on >> occasion. :-) Thanks, in advance. >> > > linux used to work with v1 dirs, though there were some problems. It > never got fixed, was not critical for 99.9% of users, and got taken out. > But it might work well enough to do what you need. Go through the > changelogs or google, and try an older Linux kernel, perhaps .... > > -Eric > Thanks for the reply, Eric, I appreciate it. I'll take a look and see what I can find, being sure to post back the latest version of the kernel with version 1 support. Think it was removed during the 2.5.x period, or could it possibly have made it to the 2.6 era? -Sean --B_3331234925_2670211 Content-type: application/pkcs7-signature; name="smime.p7s" Content-transfer-encoding: base64 Content-disposition: attachment; filename="smime.p7s" MIIIVwYJKoZIhvcNAQcCoIIISDCCCEQCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BiMwggLcMIICRaADAgECAhAvf5NHjc/BR/lyCoHqxXxjMA0GCSqGSIb3DQEBBQUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wOTAxMTYwMzA2 NTdaFw0xMDAxMTYwMzA2NTdaMEMxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx IDAeBgkqhkiG9w0BCQEWEWVsYmxlc0BzZXNzeXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAn0fFczG75sMuPqIaVQ3vbcN+pMJbg7mVf8UAGF7O6ObUoQofVZdePd4W 3iyG2xiGssTdRTan7s5uO/x1dLFROoFk1ZbazC32s8iHD/udyQfeaJsv02e08JlCt54ajwLg lZSxAJSYKaCmAX5qUiumOEkRg86sf6c0Ry5AbfBcijfg0PEe4ptKV6sgF++VCo1ozBxSxN/b tG9LR0G5wHJyAuCc+biiGv+7/Y6vihHdMXnSVaLm2mz6xE6oEVwl+tuLXPX6UUKeEUTtiDuq yOTf7PFahGIPeWzkDkdSMf98LxxzVqsa6ak3pVgEQEZePhitLFTDPx5RlYEUfWPFWBL+qwID AQABoy4wLDAcBgNVHREEFTATgRFlbGJsZXNAc2Vzc3lzLmNvbTAMBgNVHRMBAf8EAjAAMA0G CSqGSIb3DQEBBQUAA4GBABuJXSYxgtvNq3jQwRuHmoU4pMf61yyKW8oSEKaPBbzF1PgwDBFa rAKarubKQOIUJGcGvAbPbvCCXL+rn7QsRfu/LLxVJpsZignqnp+1Xd5nc/20gkoiY/AXlFf4 bnmk9lwKF9AVHlW2PWaUqLvd+L7DNy6NZQzgo3TScU3jt/EWMIIDPzCCAqigAwIBAgIBDTAN BgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTES MBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0 aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAK MNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYB Af8CAQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBl cnNvbmFsRnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYD VQQDExFQcml2YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2as Zw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSe JVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHT HUb/XV9lTzGCAfwwggH4AgEBMHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp bCBJc3N1aW5nIENBAhAvf5NHjc/BR/lyCoHqxXxjMAkGBSsOAwIaBQCgXTAjBgkqhkiG9w0B CQQxFgQUx5r6JecfvZDqqkY2fTnERLZ+HuowGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc BgkqhkiG9w0BCQUxDxcNMDkwNzI0MDMwMjA1WjANBgkqhkiG9w0BAQEFAASCAQB4rRCDTjmS Rnyfj5rglm5UtNI+DOrbjWi3AhXVc9adwMXJHfJ2hc4rLwc4P7VMkvXLdOwPx0ObZ97Yg+Xx ppRdw8HpTqgZFRhyOO1GcAHS56NM2Eu3TkVr4PGHYFHcgIBqldCbUsOKDJbZJtJedz2c9G8h tUKLeEVhdM31Tstj2X0PjD13Z2+9JRAoI2ydhfOIKq24kftYEYVKxza7K0EVE+jrnUJ0jcn5 vDgiYAEehFPYSBTEcYICy+kkSsCll/8au1hLPDN9Q+qk6I4s1tVKXPR7oKfiT39MnDwxISAE 4tbmWDjyFlZQXp1epbzoz0yb7yVsgegop6CzI+stTs/S --B_3331234925_2670211-- From elbles@sessys.com Thu Jul 23 22:31:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O3VltA099061 for ; Thu, 23 Jul 2009 22:31:48 -0500 X-ASG-Debug-ID: 1248406852-5bd501760000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta11.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1C08010B6A91 for ; Thu, 23 Jul 2009 20:40:52 -0700 (PDT) Received: from mta11.charter.net (mta11.charter.net [216.33.127.80]) by cuda.sgi.com with ESMTP id F3QvXdbmFZuOKD6c for ; Thu, 23 Jul 2009 20:40:52 -0700 (PDT) Received: from imp10 ([10.20.200.10]) by mta11.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090724033226.OIWQ22327.mta11.charter.net@imp10>; Thu, 23 Jul 2009 23:32:26 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp10 with smtp.charter.net id KfYS1c0044yHaWo05fYSLs; Thu, 23 Jul 2009 23:32:26 -0400 Received: from [192.168.3.9] (dhcp-yelw-03-09.internal.sessys.com [192.168.3.9]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6O3WLiv023193 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Thu, 23 Jul 2009 23:32:24 -0400 User-Agent: Microsoft-Entourage/12.20.0.090605 Date: Thu, 23 Jul 2009 23:32:21 -0400 X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Sean Elble To: Eric Sandeen CC: Message-ID: Thread-Topic: Using xfsdump On Linux With IRIX Version 1 FS? Thread-Index: AcoMD1omsd4KSHDKKEyPjVu66qkNxg== In-Reply-To: <4A691B2D.1090600@sandeen.net> Mime-version: 1.0 Content-type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="B_3331236741_2749541" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9610/Thu Jul 23 22:11:48 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta11.charter.net[216.33.127.80] X-Barracuda-Start-Time: 1248406853 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4242 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3331236741_2749541 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit On 7/23/09 10:23 PM, "Eric Sandeen" wrote: > Sean Elble wrote: >> Hi all, >> >> While I am aware that the current kernel implementation of XFS doesn't >> support mounting an IRIX filesystem with version 1 directories, I'm not so >> sure whether xfsdump/xfsrestore will support the dumping of an IRIX >> filesystem with version 1 directories. To be more specific, I am dealing >> with an old disk from an Indigo2, running IRIX 6.5.6m with version 1 >> (0x1094) directories. I was hoping it had version 2 directories, but after >> finding an old SCSI card I could put in a Linux box with XFS support, I >> found just the opposite, obviously. I had the old SCSI card back in its >> donor system (which was up-and-running) when it occurred to me that >> xfsdump/xfsrestore *might* be a possibility, and I can't take it (the donor >> system) down again unless I know I can make this work. >> >> If anyone can give me an answer to this question, I would certainly >> appreciate it. I didn't see anything in the man pages, and my Google >> searches have proven fruitless thus far, but I've been known to be blind on >> occasion. :-) Thanks, in advance. >> > > linux used to work with v1 dirs, though there were some problems. It > never got fixed, was not critical for 99.9% of users, and got taken out. > But it might work well enough to do what you need. Go through the > changelogs or google, and try an older Linux kernel, perhaps .... > > -Eric > Looks like the version 1 directory code was removed as of June 15th, 2006, per this: http://oss.sgi.com/archives/xfs/2006-06/msg00067.html But another post has a 2.4.21 kernel being used with a patch, so I'm not sure if I want to try a 2.6 kernel, or see if I can patch together a 2.4.x kernel on an old FC4 box I have laying around. Truth be told, it's a lot of work just to blank the entries in /etc/shadow so I can login to a 150 MHz box again, so who knows if I'll even try at this point, hah. In any event, thanks a lot for the pointers in the right direction. -Sean --B_3331236741_2749541 Content-type: application/pkcs7-signature; name="smime.p7s" Content-transfer-encoding: base64 Content-disposition: attachment; filename="smime.p7s" MIIIVwYJKoZIhvcNAQcCoIIISDCCCEQCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BiMwggLcMIICRaADAgECAhAvf5NHjc/BR/lyCoHqxXxjMA0GCSqGSIb3DQEBBQUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wOTAxMTYwMzA2 NTdaFw0xMDAxMTYwMzA2NTdaMEMxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx IDAeBgkqhkiG9w0BCQEWEWVsYmxlc0BzZXNzeXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAn0fFczG75sMuPqIaVQ3vbcN+pMJbg7mVf8UAGF7O6ObUoQofVZdePd4W 3iyG2xiGssTdRTan7s5uO/x1dLFROoFk1ZbazC32s8iHD/udyQfeaJsv02e08JlCt54ajwLg lZSxAJSYKaCmAX5qUiumOEkRg86sf6c0Ry5AbfBcijfg0PEe4ptKV6sgF++VCo1ozBxSxN/b tG9LR0G5wHJyAuCc+biiGv+7/Y6vihHdMXnSVaLm2mz6xE6oEVwl+tuLXPX6UUKeEUTtiDuq yOTf7PFahGIPeWzkDkdSMf98LxxzVqsa6ak3pVgEQEZePhitLFTDPx5RlYEUfWPFWBL+qwID AQABoy4wLDAcBgNVHREEFTATgRFlbGJsZXNAc2Vzc3lzLmNvbTAMBgNVHRMBAf8EAjAAMA0G CSqGSIb3DQEBBQUAA4GBABuJXSYxgtvNq3jQwRuHmoU4pMf61yyKW8oSEKaPBbzF1PgwDBFa rAKarubKQOIUJGcGvAbPbvCCXL+rn7QsRfu/LLxVJpsZignqnp+1Xd5nc/20gkoiY/AXlFf4 bnmk9lwKF9AVHlW2PWaUqLvd+L7DNy6NZQzgo3TScU3jt/EWMIIDPzCCAqigAwIBAgIBDTAN BgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTES MBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0 aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAK MNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYB Af8CAQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBl cnNvbmFsRnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYD VQQDExFQcml2YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2as Zw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSe JVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHT HUb/XV9lTzGCAfwwggH4AgEBMHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp bCBJc3N1aW5nIENBAhAvf5NHjc/BR/lyCoHqxXxjMAkGBSsOAwIaBQCgXTAjBgkqhkiG9w0B CQQxFgQU0hnMLPB1PpyVqPnymBRKrbEKvk8wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc BgkqhkiG9w0BCQUxDxcNMDkwNzI0MDMzMjIxWjANBgkqhkiG9w0BAQEFAASCAQBGCI5JO60L fUqV2YxN4uJxXotp6d1CkrOQku85OEK48dEOmzZqBgiV4dSPImPV4sOe8UZECHExqFQsp8XI jZBBoWFgZ4CPXOtWnxSZk2PARn/UpJh7fHS3QSzAyWNjbBLNsyk0ohkZSyi0hhMen/kxpy2R 7CevivL5qxsUNNlswnDqbiHxTFm7fAGnqPiLCFXvCamEkkvpIV5Yg29aJEaAGZzHrurqR74p CgYfGSrXyrn3k5NO8IGbCzzAslmZZvGTytmzGfOExCi+gP1x0v6deeLPcvU+N3q0UPVWMkRq QreqUFKuBV3BcFTCZqjPQKmOOOBh2vI4sjFVKb8JEPQV --B_3331236741_2749541-- From felixb@sgi.com Fri Jul 24 00:19:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O5JrHa108143 for ; Fri, 24 Jul 2009 00:19:53 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id AB8BEAC00E for ; Thu, 23 Jul 2009 22:20:34 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id D289D7000103; Fri, 24 Jul 2009 00:20:33 -0500 (CDT) Cc: Chris Mason , Eric Sandeen , xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, Olaf Weber Message-Id: <7149D747-2769-4559-BAF6-AAD2B6C6C941@sgi.com> From: Felix Blyakher To: KOSAKI Motohiro In-Reply-To: <20090710153349.17EC.A69D9226@jp.fujitsu.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Date: Fri, 24 Jul 2009 00:20:32 -0500 References: <20090709110342.2386.A69D9226@jp.fujitsu.com> <20090709130134.GH18008@think> <20090710153349.17EC.A69D9226@jp.fujitsu.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 10, 2009, at 2:12 AM, KOSAKI Motohiro wrote: >> On Thu, Jul 09, 2009 at 11:04:32AM +0900, KOSAKI Motohiro wrote: >>>> On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: >>>>> At least, I agree with Olaf. if you got someone's NAK in past >>>>> thread, >>>>> Could you please tell me its url? >>>> >>>> The previous thread was simply dead-ended and nothing happened. >>>> >>> >>> Can you remember this thread subject? sorry, I haven't remember it. >> >> This is the original thread, it did lead to a few different patches >> going in, but the nr_to_write change wasn't one of them. >> >> http://kerneltrap.org/mailarchive/linux-kernel/2008/10/1/3472704/thread > > Thanks good pointer. This thread have multiple interesting discussion. > > 1. making ext4_write_cache_pages() or modifying write_cache_pages() > > I think this is Christoph's homework. he said > >> I agree. But I'm still not quite sure if that requirement is >> unique to >> ext4 anyway. Give me some time to dive into the writeback code >> again, >> haven't been there for quite a while. > > if he says modifying write_cache_pages() is necessary, I'd like to > review it. > > > 2. Current mapping->writeback_index updating is not proper? > > I'm not sure which solution is better. but I think your first > proposal is > enough acceptable. > > > 3. Current wbc->nr_to_write value is not proper? > > Current writeback_set_ratelimit() doesn't permit that > ratelimit_pages exceed > 4M byte. but it is too low restriction for nowadays. > (that's my understand. right?) > > ======================================================= > void writeback_set_ratelimit(void) > { > ratelimit_pages = vm_total_pages / (num_online_cpus() * 32); > if (ratelimit_pages < 16) > ratelimit_pages = 16; > if (ratelimit_pages * PAGE_CACHE_SIZE > 4096 * 1024) > ratelimit_pages = (4096 * 1024) / PAGE_CACHE_SIZE; > } > ======================================================= > > Yes, 4M bytes are pretty magical constant. We have three choice > A. Remove magical 4M constant simple (a bit danger) That's will be outside the xfs, and seems like there is no much interest from mm people. > B. Decide high border from IO capability It's not clear to me how to calculate that high border, but again it's outside of the xfs scope, and we don't have much control here. > C. Introduce new /proc knob (as Olaf proposed) We need at least to play with different numbers, and putting the knob (xfs tunable) would be one way to do it. Also, different configurations may need different nr_to_write value. In either way it seems hackish, but with the knob at least there is some control of it. Felix From kosaki.motohiro@jp.fujitsu.com Fri Jul 24 00:32:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O5WNIn108903 for ; Fri, 24 Jul 2009 00:32:24 -0500 X-ASG-Debug-ID: 1248413585-774f00fa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail6.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5345F13D9A32 for ; Thu, 23 Jul 2009 22:33:06 -0700 (PDT) Received: from fgwmail6.fujitsu.co.jp (fgwmail6.fujitsu.co.jp [192.51.44.36]) by cuda.sgi.com with ESMTP id oqyJgDkDW0i5uHBj for ; Thu, 23 Jul 2009 22:33:06 -0700 (PDT) Received: from m5.gw.fujitsu.co.jp ([10.0.50.75]) by fgwmail6.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n6O5X4iI019103 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Fri, 24 Jul 2009 14:33:04 +0900 Received: from smail (m5 [127.0.0.1]) by outgoing.m5.gw.fujitsu.co.jp (Postfix) with ESMTP id 4563945DE4F for ; Fri, 24 Jul 2009 14:33:04 +0900 (JST) Received: from s5.gw.fujitsu.co.jp (s5.gw.fujitsu.co.jp [10.0.50.95]) by m5.gw.fujitsu.co.jp (Postfix) with ESMTP id 1624745DE4E for ; Fri, 24 Jul 2009 14:33:04 +0900 (JST) Received: from s5.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s5.gw.fujitsu.co.jp (Postfix) with ESMTP id 018B0E1800B for ; Fri, 24 Jul 2009 14:33:04 +0900 (JST) Received: from ml13.s.css.fujitsu.com (ml13.s.css.fujitsu.com [10.249.87.103]) by s5.gw.fujitsu.co.jp (Postfix) with ESMTP id 9DA33E1800C for ; Fri, 24 Jul 2009 14:33:03 +0900 (JST) Received: from ml13.css.fujitsu.com (ml13 [127.0.0.1]) by ml13.s.css.fujitsu.com (Postfix) with ESMTP id 7A224FD000B; Fri, 24 Jul 2009 14:33:03 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by ml13.s.css.fujitsu.com (Postfix) with ESMTP id 01FA2FD0008; Fri, 24 Jul 2009 14:33:02 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Fri, 24 Jul 2009 14:32:58 +0900 (JST) From: KOSAKI Motohiro To: Felix Blyakher X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Chris Mason , Eric Sandeen , xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, Olaf Weber In-Reply-To: <7149D747-2769-4559-BAF6-AAD2B6C6C941@sgi.com> References: <20090710153349.17EC.A69D9226@jp.fujitsu.com> <7149D747-2769-4559-BAF6-AAD2B6C6C941@sgi.com> Message-Id: <20090724143159.67B6.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Fri, 24 Jul 2009 14:33:02 +0900 (JST) X-Barracuda-Connect: fgwmail6.fujitsu.co.jp[192.51.44.36] X-Barracuda-Start-Time: 1248413587 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4249 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > > On Jul 10, 2009, at 2:12 AM, KOSAKI Motohiro wrote: > > >> On Thu, Jul 09, 2009 at 11:04:32AM +0900, KOSAKI Motohiro wrote: > >>>> On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > >>>>> At least, I agree with Olaf. if you got someone's NAK in past > >>>>> thread, > >>>>> Could you please tell me its url? > >>>> > >>>> The previous thread was simply dead-ended and nothing happened. > >>>> > >>> > >>> Can you remember this thread subject? sorry, I haven't remember it. > >> > >> This is the original thread, it did lead to a few different patches > >> going in, but the nr_to_write change wasn't one of them. > >> > >> http://kerneltrap.org/mailarchive/linux-kernel/2008/10/1/3472704/thread > > > > Thanks good pointer. This thread have multiple interesting discussion. > > > > 1. making ext4_write_cache_pages() or modifying write_cache_pages() > > > > I think this is Christoph's homework. he said > > > >> I agree. But I'm still not quite sure if that requirement is > >> unique to > >> ext4 anyway. Give me some time to dive into the writeback code > >> again, > >> haven't been there for quite a while. > > > > if he says modifying write_cache_pages() is necessary, I'd like to > > review it. > > > > > > 2. Current mapping->writeback_index updating is not proper? > > > > I'm not sure which solution is better. but I think your first > > proposal is > > enough acceptable. > > > > > > 3. Current wbc->nr_to_write value is not proper? > > > > Current writeback_set_ratelimit() doesn't permit that > > ratelimit_pages exceed > > 4M byte. but it is too low restriction for nowadays. > > (that's my understand. right?) > > > > ======================================================= > > void writeback_set_ratelimit(void) > > { > > ratelimit_pages = vm_total_pages / (num_online_cpus() * 32); > > if (ratelimit_pages < 16) > > ratelimit_pages = 16; > > if (ratelimit_pages * PAGE_CACHE_SIZE > 4096 * 1024) > > ratelimit_pages = (4096 * 1024) / PAGE_CACHE_SIZE; > > } > > ======================================================= > > > > Yes, 4M bytes are pretty magical constant. We have three choice > > A. Remove magical 4M constant simple (a bit danger) > > That's will be outside the xfs, and seems like there is no much interest > from mm people. That's ok. you can join mm people :) > > B. Decide high border from IO capability > > It's not clear to me how to calculate that high border, but again > it's outside of the xfs scope, and we don't have much control here. > > > C. Introduce new /proc knob (as Olaf proposed) > > We need at least to play with different numbers, and putting the > knob (xfs tunable) would be one way to do it. Also, different > configurations may need different nr_to_write value. > > In either way it seems hackish, but with the knob at least there is > some control of it. From kseniya@lytkarino.org Fri Jul 24 01:27:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, SUBJ_ALL_CAPS autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O6RutW112370 for ; Fri, 24 Jul 2009 01:27:57 -0500 X-ASG-Debug-ID: 1248416918-2126019f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ppp-92-39-140-23.in-tel.ru (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CC2993820F7 for ; Thu, 23 Jul 2009 23:28:39 -0700 (PDT) Received: from ppp-92-39-140-23.in-tel.ru (ppp-92-39-140-23.in-tel.ru [92.39.140.23]) by cuda.sgi.com with ESMTP id 1TQk9gHBW9M7F0dA for ; Thu, 23 Jul 2009 23:28:39 -0700 (PDT) Message-ID: <000801ca0c27$efe12cd0$178c275c@comp-7> From: Kseniya To: xfs@oss.sgi.com, owner-linux-xfs@oss.sgi.com X-ASG-Orig-Subj: =?windows-1251?b?zM7SzsvOz8DSwC5fX8TAxsVfwcDB09jKwF/Iw9DA3tfIX87B0MDBzg==?= =?windows-1251?b?0sDF0l/Ow87QzsRfLiA4KDk1MU8pXzk2XzU2XzU2IA==?= Subject: =?windows-1251?b?zM7SzsvOz8DSwC5fX8TAxsVfwcDB09jKwF/Iw9DA3tfIX87B0MDBzg==?= =?windows-1251?b?0sDF0l/Ow87QzsRfLiA4KDk1MU8pXzk2XzU2XzU2IA==?= Date: Fri, 24 Jul 2009 10:28:20 +0300 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="windows-1251"; Content-Transfer-Encoding: 7bit X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-Barracuda-Connect: ppp-92-39-140-23.in-tel.ru[92.39.140.23] X-Barracuda-Start-Time: 1248416920 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4855 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=FH_HELO_EQ_D_D_D_D, RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4253 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 FH_HELO_EQ_D_D_D_D Helo is d-d-d-d 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean -MOTOËOÏATA âcïaøeò 5 coòok â ÷ac äaæe áaáyøka ! âcåãî__1_499póá._+_ÁÅCÏËÀTHÎ_ïëóã~îkó÷íèk~ïpîïîëüíèk, áîpîíà,_áîpîçäîäåë,_òpàìáîâkà,_pîòîpíàÿ_ëîïàòà. -Oïëaòa_ïðu_ïoëy÷eíuu_u_oñìoòðe. e-mail: mlopata@mail.ru 8(951O)~96~56~56 SMS 3àêà3 8_9Ç7_27_777_72 Îòñòàíåò áîã, ïîêèíóò è äîáðûå ëþäè. Ìóõà äî óõà, ñîðîêà äî îêà, îñà äî íîñà (çàïàäè.). From ms@citd.de Fri Jul 24 02:30:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O7UR2x115829 for ; Fri, 24 Jul 2009 02:30:28 -0500 X-ASG-Debug-ID: 1248420670-776e02f10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DD7CA13EC15B for ; Fri, 24 Jul 2009 00:31:11 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id 5SQTZ1R1vRWJKizS for ; Fri, 24 Jul 2009 00:31:11 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id BA3F22BCCF; Fri, 24 Jul 2009 09:31:08 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id lZyZ80MrT5+K; Fri, 24 Jul 2009 09:30:37 +0200 (CEST) Received: from citd.de (p4FC4D02A.dip.t-dialin.net [79.196.208.42]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 80C592BC06; Fri, 24 Jul 2009 09:30:35 +0200 (CEST) Date: Fri, 24 Jul 2009 09:30:30 +0200 From: Matthias Schniedermeyer To: Sean Elble Cc: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? Message-ID: <20090724073030.GA15785@citd.de> References: <4A691B2D.1090600@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1248420671 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 23.07.2009 23:32, Sean Elble wrote: > On 7/23/09 10:23 PM, "Eric Sandeen" wrote: > > > Sean Elble wrote: > >> Hi all, > >> > >> While I am aware that the current kernel implementation of XFS doesn't > >> support mounting an IRIX filesystem with version 1 directories, I'm not so > >> sure whether xfsdump/xfsrestore will support the dumping of an IRIX > >> filesystem with version 1 directories. To be more specific, I am dealing > >> with an old disk from an Indigo2, running IRIX 6.5.6m with version 1 > >> (0x1094) directories. I was hoping it had version 2 directories, but after > >> finding an old SCSI card I could put in a Linux box with XFS support, I > >> found just the opposite, obviously. I had the old SCSI card back in its > >> donor system (which was up-and-running) when it occurred to me that > >> xfsdump/xfsrestore *might* be a possibility, and I can't take it (the donor > >> system) down again unless I know I can make this work. > >> > >> If anyone can give me an answer to this question, I would certainly > >> appreciate it. I didn't see anything in the man pages, and my Google > >> searches have proven fruitless thus far, but I've been known to be blind on > >> occasion. :-) Thanks, in advance. > >> > > > > linux used to work with v1 dirs, though there were some problems. It > > never got fixed, was not critical for 99.9% of users, and got taken out. > > But it might work well enough to do what you need. Go through the > > changelogs or google, and try an older Linux kernel, perhaps .... > > > > -Eric > > > > Looks like the version 1 directory code was removed as of June 15th, 2006, > per this: > > http://oss.sgi.com/archives/xfs/2006-06/msg00067.html > > But another post has > a 2.4.21 kernel being used with a patch, so I'm not sure if I want to try a > 2.6 kernel, or see if I can patch together a 2.4.x kernel on an old FC4 box > I have laying around. Truth be told, it's a lot of work just to blank the > entries in /etc/shadow so I can login to a 150 MHz box again, so who knows > if I'll even try at this point, hah. > > In any event, thanks a lot for the pointers in the right direction. I'd guess the disc isn't very big. You just dd it completly (for backup). Then search for the content of the shadow-file and blank out the entry with a hex-editor. Make sure that you don't change the filesize, pad the previous/following entry with any character you have to remove. Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From lmcilroy@redhat.com Fri Jul 24 03:21:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O8LOUh117686 for ; Fri, 24 Jul 2009 03:21:24 -0500 X-ASG-Debug-ID: 1248424229-082303120000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 07B6D10B7CAB; Fri, 24 Jul 2009 01:30:29 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id BiIIBfkA7COaRLGF; Fri, 24 Jul 2009 01:30:29 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n6O8M4mG024880; Fri, 24 Jul 2009 04:22:05 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6O8M3KI012369; Fri, 24 Jul 2009 04:22:04 -0400 Date: Fri, 24 Jul 2009 04:22:03 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Eddy Zhao Cc: xfs@oss.sgi.com, felixb@sgi.com Message-ID: <1301281514.948741248423723710.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <1983390176.948321248423442558.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1248424231 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4260 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Eddy, CC'ing this to the xfs list. ----- "Eddy Zhao" wrote: > Hello Felix, Lachlan: > > I find your names in 2.6.30 Changlog as XFS maintainer. Can you kindly > take a look at the problem we are facing. > > Follow the sequence below to reproduce the problem > - write data on 2.6.28 system > - unplug usb disk while writing I don't recommend you pull the usb disk out while the filesystem is still mounted (if you can avoid it). > - plug usb disk to 2.6.10 system > - mount filesystem. mount failed!! (refer error info at mail end) > - repair filesystem. repair failed!! (refer to error info at mail end) > - unplug usb disk, then plug usb disk to 2.6.28 system > - mount filesystem. mount success Okay good. Looks like whatever the problem is it has been fixed. > - unplug usb disk, then plug usb disk to 2.6.10 system > - mount filesystem. mount success > > We are hitting this because our products need to migrate data between > them. And they are using either 2.6.28 or 2.6.10 kernel. > > You can easily reproduce the problem follow the sequence above. > > Is it XFS log "forward" compatible? Where's the problem? How can I fix > it? I would start by looking through the change history for fs/xfs/xfs_log_recover.c and paying particular attention to anything to do with inode transactions. Or try some intermediate kernels and see if you can narrow the fix down to a set of changes. > > Thanks > Eddy > > > --------------------------- > Error info on 2.6.10 system > > > # mount /dev/sda1 /mnt/ > UDF-fs: No VRS found > XFS mounting filesystem sda1 > Starting XFS recovery on filesystem: sda1 (dev: sda1) > Filesystem "sda1": xfs_inode_recover: Bad inode magic number, dino ptr > = 0xc8266700, dino bp = 0xc8281b40, ino = 0 Here we have log replay processing an inode and it's checking that what is on disk (at the location where we are going to write the inode) is actually an inode. In this case what we read from the filesystem did not have the magic number for an inode. Hmm that 'ino = 0' doesn't seem right either. > Filesystem "sda1": XFS internal error xlog_recover_do_inode_trans(1) > at line 2366 of file fs/xfs/xfs_log_recover.c. Caller 0xc01677c0 > [] (xlog_recover_process_data+0x0/0x1904) from [] > (xlog_do_recovery_pass+0x328/0x900) > [] (xlog_do_recovery_pass+0x0/0x900) from [] > (xlog_recover+0xf4/0x22c) > [] (xlog_recover+0x0/0x22c) from [] > (xfs_log_mount+0x444/0x4bc) > r9 = 00000004 r8 = C8295000 r7 = C8278000 r6 = 00000000 > r5 = C8BCAD80 r4 = C8C74DE0 > [] (xfs_log_mount+0x0/0x4bc) from [] > (xfs_mountfs+0x7f0/0xac0) > [] (xfs_mountfs+0x0/0xac0) from [] > (xfs_mount+0x618/0x6c4) > [] (xfs_mount+0x0/0x6c4) from [] > (vfs_mount+0x34/0x38) > [] (vfs_mount+0x0/0x38) from [] > (linvfs_fill_super+0xa4/0x294) > [] (linvfs_fill_super+0x0/0x294) from [] > (get_sb_bdev+0x128/0x184) > r8 = C8239000 r7 = 00008000 r6 = C800C6C0 r5 = C8C57200 > r4 = C800C6DC > [] (get_sb_bdev+0x0/0x184) from [] > (linvfs_get_sb+0x1c/0x28) > r8 = 00008000 r7 = C8238000 r6 = C032344C r5 = FFFFFFF4 > r4 = C8007960 > [] (linvfs_get_sb+0x0/0x28) from [] > (do_kern_mount+0x5c/0xf4) > [] (do_kern_mount+0x0/0xf4) from [] > (do_mount+0x624/0x658) > [] (do_mount+0x0/0x658) from [] > (sys_mount+0xa8/0xf4) > [] (sys_mount+0x0/0xf4) from [] > (ret_fast_syscall+0x0/0x2c) > r7 = 00000015 r6 = 001CCBD8 r5 = BEFFFF8C r4 = 001CC308 > XFS: log mount/recovery failed: error 990 > XFS: log mount failed > yaffs: dev is 8388609 name is "sda1" > yaffs: Attempting MTD mount on 8.1, "sda1" > yaffs: dev is 8388609 name is "sda1" > yaffs: Attempting MTD mount on 8.1, "sda1" > mount: mounting /dev/sda1 on /mnt/ failed: Invalid argument > # > # > # > # > # xfs_repair /dev/sda1 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > ERROR: The filesystem has valuable metadata changes in a log which > needs to > be replayed. Mount the filesystem to replay the log, and unmount it > before > re-running xfs_repair. If you are unable to mount the filesystem, then > use > the -L option to destroy the log and attempt a repair. > Note that destroying the log may cause corruption -- please attempt a > mount > of the filesystem before doing this. > # mount > rootfs on / type rootfs (rw) > /dev/root on / type nfs > (rw,v2,rsize=4096,wsize=4096,hard,udp,nolock,addr=7.7.7.1) > none on /proc type proc (rw,nodiratime) > none on /sys type sysfs (rw) > none on /dev/pts type devpts (rw) > none on /proc/bus/usb type usbfs (rw) From andi@firstfloor.org Fri Jul 24 03:22:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6O8Mrb0117755 for ; Fri, 24 Jul 2009 03:22:54 -0500 X-ASG-Debug-ID: 1248423816-38e500640000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from one.firstfloor.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0317518C262B for ; Fri, 24 Jul 2009 01:23:37 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id SjBN7b17IEtmCORi for ; Fri, 24 Jul 2009 01:23:37 -0700 (PDT) Received: from basil.firstfloor.org (p5B3CB62F.dip0.t-ipconnect.de [91.60.182.47]) by one.firstfloor.org (Postfix) with ESMTP id 2A4EF1A98002; Fri, 24 Jul 2009 10:23:34 +0200 (CEST) Received: by basil.firstfloor.org (Postfix, from userid 1000) id 64C1AB1D83; Fri, 24 Jul 2009 10:23:33 +0200 (CEST) To: Sean Elble Cc: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Andi Kleen References: <4A691B2D.1090600@sandeen.net> Date: Fri, 24 Jul 2009 10:23:33 +0200 In-Reply-To: (Sean Elble's message of "Thu, 23 Jul 2009 23:32:21 -0400") Message-ID: <87vdli1oca.fsf@basil.nowhere.org> User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1248423818 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4261 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Sean Elble writes: > > But another post has > a 2.4.21 kernel being used with a patch, so I'm not sure if I want to try a > 2.6 kernel, or see if I can patch together a 2.4.x kernel on an old FC4 box > I have laying around. Truth be told, it's a lot of work just to blank the > entries in /etc/shadow so I can login to a 150 MHz box again, so who knows > if I'll even try at this point, hah. If you just want to modify /etc/shadow I would just search for the strings on the raw disk and then edit them directly with some hex editor. You'll need to fill in something with the same length, presumably another encrypted password. Just make sure you generate it with the same algorithm as Irix. -Andi -- ak@linux.intel.com -- Speaking for myself only. From eddy.y.zhao@gmail.com Fri Jul 24 06:03:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OB3MBY123518 for ; Fri, 24 Jul 2009 06:03:23 -0500 X-ASG-Debug-ID: 1248433445-4571035d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-pz0-f186.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E3A4413ECFD6 for ; Fri, 24 Jul 2009 04:04:06 -0700 (PDT) Received: from mail-pz0-f186.google.com (mail-pz0-f186.google.com [209.85.222.186]) by cuda.sgi.com with ESMTP id J3QlruoHdhzXDrKH for ; Fri, 24 Jul 2009 04:04:06 -0700 (PDT) Received: by pzk16 with SMTP id 16so1124252pzk.20 for ; Fri, 24 Jul 2009 04:04:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=qzNWXFtMX0hEt2A+UKnd5+WvyR45+I0408PPj3BA5O4=; b=Xv9ZsI+rXQpIPOrwMR/00IE8YB8fk0Q0VfdkMp1RYTw1CLBhqjXnbG95B6I1jCx0EI dGlxi2JihzPi8ej9NGvt3fvPm1+cvcOFPzUJSmxzat4aY+pd29xTQ43ejuEk+zKJJIDj DLWeCoTqmzG2cZkpVJzEpz6NSGRTUqZuK6SUE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=LeYsBQRDpbt9laepo6d/YqzZl/sXY83rVGAcFCK74/nbjPE8anJzKInO1CpUTKM/Ip seql1O5D7bSQU71xTsMoi1ezzi2MY+pOiX+C8Joe108LcF4duqM9aaGYxgEJNBqlPVhq 6IzWhLlbWEOjQtK9a5WL8f7OIzJCchwPCKz7c= MIME-Version: 1.0 Received: by 10.114.210.3 with SMTP id i3mr4224229wag.207.1248433445520; Fri, 24 Jul 2009 04:04:05 -0700 (PDT) In-Reply-To: <1301281514.948741248423723710.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> References: <1983390176.948321248423442558.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1301281514.948741248423723710.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Date: Fri, 24 Jul 2009 19:04:05 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Lachlan McIlroy Cc: xfs@oss.sgi.com, felixb@sgi.com Content-Type: multipart/alternative; boundary=0016364c5adf0bc3c9046f71901b X-Barracuda-Connect: mail-pz0-f186.google.com[209.85.222.186] X-Barracuda-Start-Time: 1248433446 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4271 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016364c5adf0bc3c9046f71901b Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > > I don't recommend you pull the usb disk out while the filesystem is still > mounted (if you can avoid it). > Doing that to emulate power loss scenario our device might experience. > > I would start by looking through the change history for fs/xfs/xfs_log_recover.c > and paying particular attention to anything to do with inode transactions. > Not quite familiar with XFS code :( > > Or try some intermediate kernels and see if you can narrow the fix down to a set of > changes. > I'll try to bisect (It will take some time...) > > # mount /dev/sda1 /mnt/ > UDF-fs: No VRS found > XFS mounting filesystem sda1 > Starting XFS recovery on filesystem: sda1 (dev: sda1) > Filesystem "sda1": xfs_inode_recover: Bad inode magic number, dino ptr > = 0xc8266700, dino bp = 0xc8281b40, ino = 0 Because XFS log is OK to 2.6.28 system, which means the log is correct in itself. Would it be easy for you to debug the problem by compare 2.6.10 log recovery code fail point and the corresponding 2.6.28 log record? Thanks Eddy --0016364c5adf0bc3c9046f71901b Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

>
> I don't recommend you pull the usb disk out while the f= ilesystem is still
> mounted (if you can avoid it).
>

Doing that to emulate power loss scenario our device might experience.

>
> I would start by looking through the change history for fs/= xfs/xfs_log_recover.c
> and paying particular attention to anything t= o do with inode transactions.=A0
>

Not quite familiar with XFS code :(

>
> Or try some intermediate kernels and see if you can narrow = the fix down to a set of
> changes.
>

I'll try to bisect (It will take some time...)

>
> # mount /dev/sda1 /mnt/
> UDF-fs: No VRS found
>= ; XFS mounting filesystem sda1
> Starting XFS recovery on filesystem:= sda1 (dev: sda1)
> Filesystem "sda1": xfs_inode_recover: B= ad inode magic number, dino ptr
> =3D 0xc8266700, dino bp =3D 0xc8281b40, ino =3D 0

Because XFS log is OK to 2.6.28 system, which means the log is correct i= n itself.
Would it be easy for you to debug the problem by compare 2.6.1= 0 log recovery code fail point and the corresponding 2.6.28 log record?

Thanks
Eddy

--0016364c5adf0bc3c9046f71901b-- From chris.mason@oracle.com Fri Jul 24 07:04:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00, UNPARSEABLE_RELAY autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OC4qM5126717 for ; Fri, 24 Jul 2009 07:04:53 -0500 X-ASG-Debug-ID: 1248437136-0822003b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from acsinet11.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 261041B59CD7 for ; Fri, 24 Jul 2009 05:05:36 -0700 (PDT) Received: from acsinet11.oracle.com (acsinet11.oracle.com [141.146.126.233]) by cuda.sgi.com with ESMTP id rfhSgim7X7rUi3ZI for ; Fri, 24 Jul 2009 05:05:36 -0700 (PDT) Received: from rgminet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by acsinet11.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n6OC5chP023951 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 24 Jul 2009 12:05:39 GMT Received: from abhmt010.oracle.com (abhmt010.oracle.com [141.146.116.19]) by rgminet15.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n6OC5LcX000836; Fri, 24 Jul 2009 12:05:22 GMT Received: from localhost (/72.225.47.21) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 24 Jul 2009 05:05:20 -0700 Date: Fri, 24 Jul 2009 08:05:19 -0400 From: Chris Mason To: Felix Blyakher Cc: KOSAKI Motohiro , Eric Sandeen , xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, Olaf Weber X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090724120519.GB16192@think> References: <20090709110342.2386.A69D9226@jp.fujitsu.com> <20090709130134.GH18008@think> <20090710153349.17EC.A69D9226@jp.fujitsu.com> <7149D747-2769-4559-BAF6-AAD2B6C6C941@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7149D747-2769-4559-BAF6-AAD2B6C6C941@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Source-IP: abhmt010.oracle.com [141.146.116.19] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090201.4A69A382.0063:SCFSTAT5015188,ss=1,fgs=0 X-Barracuda-Connect: acsinet11.oracle.com[141.146.126.233] X-Barracuda-Start-Time: 1248437137 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4275 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Jul 24, 2009 at 12:20:32AM -0500, Felix Blyakher wrote: > > On Jul 10, 2009, at 2:12 AM, KOSAKI Motohiro wrote: >> 3. Current wbc->nr_to_write value is not proper? >> >> Current writeback_set_ratelimit() doesn't permit that ratelimit_pages >> exceed >> 4M byte. but it is too low restriction for nowadays. >> (that's my understand. right?) >> >> ======================================================= >> void writeback_set_ratelimit(void) >> { >> ratelimit_pages = vm_total_pages / (num_online_cpus() * 32); >> if (ratelimit_pages < 16) >> ratelimit_pages = 16; >> if (ratelimit_pages * PAGE_CACHE_SIZE > 4096 * 1024) >> ratelimit_pages = (4096 * 1024) / PAGE_CACHE_SIZE; >> } >> ======================================================= >> >> Yes, 4M bytes are pretty magical constant. We have three choice >> A. Remove magical 4M constant simple (a bit danger) > > That's will be outside the xfs, and seems like there is no much interest > from mm people. > >> B. Decide high border from IO capability It is worth pointing out that Jens Axboe is planning on more feedback controlled knobs as part of pdflush rework. -chris From olaf@sgi.com Fri Jul 24 07:52:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OCq12m128707 for ; Fri, 24 Jul 2009 07:52:01 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6OCqiVS045071; Fri, 24 Jul 2009 14:52:44 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6OCqgsR045064; Fri, 24 Jul 2009 14:52:42 +0200 (MEST) To: Daniele Nuzzo - Readytec SPA Cc: xfs@oss.sgi.com Subject: Re: umount xfs filesystem References: <4A66C5E7.7050408@readytec.it> From: Olaf Weber Date: Fri, 24 Jul 2009 14:52:42 +0200 In-Reply-To: <4A66C5E7.7050408@readytec.it> (Daniele Nuzzo's message of "Wed, 22 Jul 2009 09:55:19 +0200") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Daniele Nuzzo writes: > hi, > I think I need your advice-opinion ... > I set up a system like CentOS 5.3, lvm, drbd 8.2, various systems raid > (Adaptec aacraid or LSI MegaRAID with or without write back cache) > after some time of work (a few hours or days) do the umount is > slow... even a few minutes ... why? > I have already disabled barrier and write cache on drbd, but not on > the controller or the sas drives... ideas? > thanks a lot. > p.s. > drbd partitions formatted with the default options. On unmount the system has flush all dirty data to disk. Depending on the amount of data in memory, this might take a while. I'm not claiming this is definitely the case here, but it is an obvious candidate. -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Fri Jul 24 08:42:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ODgHej130733 for ; Fri, 24 Jul 2009 08:42:17 -0500 X-ASG-Debug-ID: 1248442981-359500ff0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CFFEB13EF34D for ; Fri, 24 Jul 2009 06:43:01 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id TuHXF3kM6ZEXWgwl for ; Fri, 24 Jul 2009 06:43:01 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 2AF6AA9DAD9; Fri, 24 Jul 2009 08:43:00 -0500 (CDT) Message-ID: <4A69BA63.4030501@sandeen.net> Date: Fri, 24 Jul 2009 08:42:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Lachlan McIlroy CC: Eddy Zhao , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM References: <1301281514.948741248423723710.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <1301281514.948741248423723710.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248442981 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4281 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Lachlan McIlroy wrote: > Hi Eddy, > > CC'ing this to the xfs list. > > ----- "Eddy Zhao" wrote: > >> Hello Felix, Lachlan: >> >> I find your names in 2.6.30 Changlog as XFS maintainer. Can you kindly >> take a look at the problem we are facing. >> >> Follow the sequence below to reproduce the problem >> - write data on 2.6.28 system >> - unplug usb disk while writing > I don't recommend you pull the usb disk out while the filesystem is still > mounted (if you can avoid it). > Unless you have write barriers enabled and passing through to the USB device, or write cache turned off on the USB device, this test may well just be corrupting the log to an unreplayable state. Although I can't explain why, w/o further modification, it seems to mount again on .28 ... -Eric From michael.monnerie@is.it-management.at Fri Jul 24 08:47:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ODlT7r130957 for ; Fri, 24 Jul 2009 08:47:29 -0500 X-ASG-Debug-ID: 1248443795-0b1e02c80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E0DAD10B86C1 for ; Fri, 24 Jul 2009 06:56:35 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id MZ7nEBXKulfXCBXf for ; Fri, 24 Jul 2009 06:56:35 -0700 (PDT) Received: from mailsrv.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 63ECE53F0 for ; Fri, 24 Jul 2009 15:48:36 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id 57AB9400166 for ; Fri, 24 Jul 2009 15:48:10 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: umount xfs filesystem Subject: Re: umount xfs filesystem Date: Fri, 24 Jul 2009 15:48:09 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.1-ZMI; KDE/4.1.3; x86_64; ; ) References: <4A66C5E7.7050408@readytec.it> In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1457420.WZiSFGVdXm"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907241548.09961@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248443796 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4281 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart1457420.WZiSFGVdXm Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Freitag 24 Juli 2009 Olaf Weber wrote: > On unmount the system has flush all dirty data to disk. =A0Depending on > the amount of data in memory, this might take a while. > > I'm not claiming this is definitely the case here, but it is an > obvious candidate. The OP should try sync umount then he could see if sync takes long or umount mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart1457420.WZiSFGVdXm Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkppu5kACgkQzhSR9xwSCbRe8QCfaCxwYhaQtqP+1+7O0/k1JLLu y7UAoMBa/LxC7+r9uTTR5dTHrqMhBHM4 =Cdqm -----END PGP SIGNATURE----- --nextPart1457420.WZiSFGVdXm-- From feiji1983@gmail.com Fri Jul 24 08:51:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ODpNOC131162 for ; Fri, 24 Jul 2009 08:51:24 -0500 X-ASG-Debug-ID: 1248444031-0b2002e20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wf-out-1314.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BB0CF10BA026 for ; Fri, 24 Jul 2009 07:00:31 -0700 (PDT) Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.169]) by cuda.sgi.com with ESMTP id TAm6JLWJPQmiKJFa for ; Fri, 24 Jul 2009 07:00:31 -0700 (PDT) Received: by wf-out-1314.google.com with SMTP id 29so518392wff.32 for ; Fri, 24 Jul 2009 06:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=n9gOBw7dqE0oiItTzI09OExMpWFxQqlhxn44UXbl8zI=; b=u48OCq7VxKK4wjS4LAlIgic86r8CDNvRrKSmMjbYbvuiWyGFxn5+TzA1Bs2tWpSHxx vmlSkMeIXZSufLEPuqjfX/zGhXEqDoTGc/KJKVmxTVFPaSBi315txy05y7BHEcfKsYl4 sNRlezHsUFzMqFotmf0Im3a/nO6Mg+f8xJYvI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=TRfH3TEKguYRn0UH+MoerdLoiRxYWnbBrQyIUu6dhOBliBvO0ElOXjzOms+PUrq54U H2vL4P/rHAkYIk5LW8N+AzEHkkgDNbiGhdoG30dW3vhaLP0c+VBsPwvqaOffqX+bDxpu w7BPN+6e/ALTLoEsO3ub3GJGkE14aSqZFIUBY= MIME-Version: 1.0 Received: by 10.142.135.16 with SMTP id i16mr478293wfd.29.1248443526970; Fri, 24 Jul 2009 06:52:06 -0700 (PDT) Date: Fri, 24 Jul 2009 21:52:06 +0800 Message-ID: <3ec42bdd0907240652q1bfb6784n9ba1c9e931b58900@mail.gmail.com> X-ASG-Orig-Subj: A question about installing XFS filesystem support on Debian Lenny Subject: A question about installing XFS filesystem support on Debian Lenny From: feiji1983@gmail.com To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: wf-out-1314.google.com[209.85.200.169] X-Barracuda-Start-Time: 1248444031 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4281 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean i recenttly got a NAS hard disk box which run Debian Lenny ,the linux kernel is 2.6.29. I can install xfsprogs with apt-get , after formatting a partition using mkfs.xfs, i can't mount it with command "mount -t xfs XXX XXX" , it says "xfs" is not supported. i think i have to install a path,but can't find one using apt-get,can any body tell me how can i fix this problem? Thanks. From eflorac@intellique.com Fri Jul 24 09:33:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, RCVD_IN_BRBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OEX4uC132798 for ; Fri, 24 Jul 2009 09:33:05 -0500 X-ASG-Debug-ID: 1248446529-561602510000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp2-g21.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 37DA3131052F for ; Fri, 24 Jul 2009 07:42:11 -0700 (PDT) Received: from smtp2-g21.free.fr (smtp2-g21.free.fr [212.27.42.2]) by cuda.sgi.com with ESMTP id lZGVbraxruysv0hq for ; Fri, 24 Jul 2009 07:42:11 -0700 (PDT) Received: from smtp2-g21.free.fr (localhost [127.0.0.1]) by smtp2-g21.free.fr (Postfix) with ESMTP id 33B714B014B for ; Fri, 24 Jul 2009 16:33:43 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp2-g21.free.fr (Postfix) with ESMTP id 41A8A4B014E for ; Fri, 24 Jul 2009 16:33:41 +0200 (CEST) Date: Fri, 24 Jul 2009 16:33:45 +0200 From: Emmanuel Florac To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: A question about installing XFS filesystem support on Debian Lenny Subject: Re: A question about installing XFS filesystem support on Debian Lenny Message-ID: <20090724163345.5e8e6364@harpe.intellique.com> In-Reply-To: <3ec42bdd0907240652q1bfb6784n9ba1c9e931b58900@mail.gmail.com> References: <3ec42bdd0907240652q1bfb6784n9ba1c9e931b58900@mail.gmail.com> Organization: Intellique X-Mailer: Claws Mail 3.7.1 (GTK+ 2.16.1; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp2-g21.free.fr[212.27.42.2] X-Barracuda-Start-Time: 1248446533 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4285 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Le Fri, 24 Jul 2009 21:52:06 +0800 feiji1983@gmail.com =E9crivait: > i recenttly got a NAS hard disk box which run Debian Lenny ,the linux > kernel is 2.6.29. I can install xfsprogs with apt-get , after > formatting a partition using mkfs.xfs, i can't mount it with command > "mount -t xfs XXX XXX" , it says "xfs" is not supported. i think i > have to install a path,but can't find one using apt-get,can any body > tell me how can i fix this problem? Thanks. The standard Debian Lenny kernel is 2.6.26, and comes with built-in xfs support. If you're using some custom kernel, check that it was properly compiled with xfs support (see in /boot/config-2.6.xxxxxx if there's CONFIG_XFS_FS=3Dm or CONFIG_XFS_FS=3Dy ), or that there isn't an optional package for some kernel modules. --=20 ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From sandeen@sandeen.net Fri Jul 24 09:33:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OEXQ0b132827 for ; Fri, 24 Jul 2009 09:33:26 -0500 X-ASG-Debug-ID: 1248446049-702102020000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D414F382F9D for ; Fri, 24 Jul 2009 07:34:09 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id DnBmGoluCQBbNFxJ for ; Fri, 24 Jul 2009 07:34:09 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 6434FA9DAA6; Fri, 24 Jul 2009 09:34:09 -0500 (CDT) Message-ID: <4A69C660.9000604@sandeen.net> Date: Fri, 24 Jul 2009 09:34:08 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss CC: Arkadiusz Miskiewicz X-ASG-Orig-Subj: [PATCH] xfs_repair: check for null single-block dir buffer pointer in phase6 Subject: [PATCH] xfs_repair: check for null single-block dir buffer pointer in phase6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248446050 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4284 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is for Bug 844 - xfs_repair from git segfaults in stage 6 on oss.sgi.com's bugzilla: Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... entry "stdio-common" in dir ino 2858345118 doesn't have a .. entry, will set it in ino 3503084373. empty data block 0 in directory inode 3503084373: junking block longform_dir2_entry_check() calls longform_dir2_entry_check_data() which issues that "junking block" message, and it sets *bpp (which is bplist[0] passed in) to NULL. (minor note, I think this leaks a bit of memory). In this case it's a single-block directory, the dir was found to have no valid data, and so it was junked. So there is no point in checking the integrity of this block, and in fact trying to do so is what segfaults, thanks to the NULL-setting above. So a simple patch like this avoids the segfault. However, there is still an issue where the problematic directory is set to link count 1 in Phase 7, and a subsequent repair run bumps it back up to 2. But in the spirit of fixing one thing at a time, here's a patch. Signed-off-by: Eric Sandeen --- diff --git a/repair/phase6.c b/repair/phase6.c index becedbd..101df15 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -2516,6 +2516,7 @@ longform_dir2_entry_check(xfs_mount_t *mp, *num_illegal += 1; continue; /* try and read all "data" blocks */ } + /* Note, this may NULL out bplist[db] if it's junked */ longform_dir2_entry_check_data(mp, ip, num_illegal, need_dot, irec, ino_offset, &bplist[db], hashtab, &freetab, da_bno, isblock); @@ -2524,7 +2525,7 @@ longform_dir2_entry_check(xfs_mount_t *mp, if (!dotdot_update) { /* check btree and freespace */ - if (isblock) { + if (isblock && bplist[0]) { xfs_dir2_block_tail_t *btp; xfs_dir2_leaf_entry_t *blp; From elbles@sessys.com Fri Jul 24 10:35:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OFZqFR135735 for ; Fri, 24 Jul 2009 10:35:56 -0500 X-ASG-Debug-ID: 1248449796-701f03300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta21.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A2A70383301 for ; Fri, 24 Jul 2009 08:36:36 -0700 (PDT) Received: from mta21.charter.net (mta21.charter.net [216.33.127.81]) by cuda.sgi.com with ESMTP id MefHjXeChulK5MAW for ; Fri, 24 Jul 2009 08:36:36 -0700 (PDT) Received: from imp11 ([10.20.200.11]) by mta21.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090724153636.UEGE3344.mta21.charter.net@imp11>; Fri, 24 Jul 2009 11:36:36 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp11 with smtp.charter.net id Krcb1c00V4yHaWo05rcbq5; Fri, 24 Jul 2009 11:36:36 -0400 Received: from [192.168.3.9] (dhcp-yelw-03-09.internal.sessys.com [192.168.3.9]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6OFaXFQ028017 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Fri, 24 Jul 2009 11:36:34 -0400 User-Agent: Microsoft-Entourage/12.20.0.090605 Date: Fri, 24 Jul 2009 11:36:31 -0400 X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Sean Elble To: Matthias Schniedermeyer CC: Eric Sandeen , Message-ID: Thread-Topic: Using xfsdump On Linux With IRIX Version 1 FS? Thread-Index: AcoMdIReCjWVv7YvnEGTOOljzanUaQ== In-Reply-To: <20090724073030.GA15785@citd.de> Mime-version: 1.0 Content-type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="B_3331280192_225399" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9611/Fri Jul 24 09:35:11 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta21.charter.net[216.33.127.81] X-Barracuda-Start-Time: 1248449796 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4288 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3331280192_225399 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit On 7/24/09 3:30 AM, "Matthias Schniedermeyer" wrote: >> >> Looks like the version 1 directory code was removed as of June 15th, 2006, >> per this: >> >> http://oss.sgi.com/archives/xfs/2006-06/msg00067.html >> >> But another post has >> a 2.4.21 kernel being used with a patch, so I'm not sure if I want to try a >> 2.6 kernel, or see if I can patch together a 2.4.x kernel on an old FC4 box >> I have laying around. Truth be told, it's a lot of work just to blank the >> entries in /etc/shadow so I can login to a 150 MHz box again, so who knows >> if I'll even try at this point, hah. >> >> In any event, thanks a lot for the pointers in the right direction. > > I'd guess the disc isn't very big. > > You just dd it completly (for backup). > > Then search for the content of the shadow-file and blank out the entry > with a hex-editor. Make sure that you don't change the filesize, pad > the previous/following entry with any character you have to remove. Right, the disk is only 2 GB. Presumably, to back the disk up, all I'd have to do would be something like: dd if=/dev/sda of=IRIXbackup Correct? No need to specify bs or count, I presume... Then, I could use hexedit in the following manner to edit the disk: hexedit -d -f /dev/sda I suppose I could search for the encrypted password string itself, but as Chris Wedgwood suggested, I might be better off finding the offset of the /etc/shadow file by doing something like the following: xfs_ncheck /dev/sda | grep /etc/shadow I'm not sure if I can use the inode number directly as an offset or not, but I *think* I could use it in conjunction with a xfs_db convert command to get something usable as an offset. Something like the following, perhaps? xfs_db -c convert inode daddr /dev/sda My apologies for all the questions, but I've never tried this before, and I don't particularly feel like messing it up, even with a backup of the FS available. Many thanks to Andi Kleen and Chris Wedgwood, in addition to Eric Sandeen and Matthias Schniedermeyer. -Sean --B_3331280192_225399 Content-type: application/pkcs7-signature; name="smime.p7s" Content-transfer-encoding: base64 Content-disposition: attachment; filename="smime.p7s" MIIIVwYJKoZIhvcNAQcCoIIISDCCCEQCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BiMwggLcMIICRaADAgECAhAvf5NHjc/BR/lyCoHqxXxjMA0GCSqGSIb3DQEBBQUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wOTAxMTYwMzA2 NTdaFw0xMDAxMTYwMzA2NTdaMEMxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx IDAeBgkqhkiG9w0BCQEWEWVsYmxlc0BzZXNzeXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAn0fFczG75sMuPqIaVQ3vbcN+pMJbg7mVf8UAGF7O6ObUoQofVZdePd4W 3iyG2xiGssTdRTan7s5uO/x1dLFROoFk1ZbazC32s8iHD/udyQfeaJsv02e08JlCt54ajwLg lZSxAJSYKaCmAX5qUiumOEkRg86sf6c0Ry5AbfBcijfg0PEe4ptKV6sgF++VCo1ozBxSxN/b tG9LR0G5wHJyAuCc+biiGv+7/Y6vihHdMXnSVaLm2mz6xE6oEVwl+tuLXPX6UUKeEUTtiDuq yOTf7PFahGIPeWzkDkdSMf98LxxzVqsa6ak3pVgEQEZePhitLFTDPx5RlYEUfWPFWBL+qwID AQABoy4wLDAcBgNVHREEFTATgRFlbGJsZXNAc2Vzc3lzLmNvbTAMBgNVHRMBAf8EAjAAMA0G CSqGSIb3DQEBBQUAA4GBABuJXSYxgtvNq3jQwRuHmoU4pMf61yyKW8oSEKaPBbzF1PgwDBFa rAKarubKQOIUJGcGvAbPbvCCXL+rn7QsRfu/LLxVJpsZignqnp+1Xd5nc/20gkoiY/AXlFf4 bnmk9lwKF9AVHlW2PWaUqLvd+L7DNy6NZQzgo3TScU3jt/EWMIIDPzCCAqigAwIBAgIBDTAN BgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTES MBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0 aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAK MNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYB Af8CAQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBl cnNvbmFsRnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYD VQQDExFQcml2YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2as Zw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSe JVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHT HUb/XV9lTzGCAfwwggH4AgEBMHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp bCBJc3N1aW5nIENBAhAvf5NHjc/BR/lyCoHqxXxjMAkGBSsOAwIaBQCgXTAjBgkqhkiG9w0B CQQxFgQUxLtejo/Xz1qzRuJW8vhdsbmbnKowGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc BgkqhkiG9w0BCQUxDxcNMDkwNzI0MTUzNjMyWjANBgkqhkiG9w0BAQEFAASCAQBKjI5/M78Q qy4yDFU331y2/gSVoVpqAcMO5UP96d6S/OfA7erhhkbWR0zld87JAmFzTyguUQJmBw8RKHqk OB1gQL07L/FnGuBBM+CrzXcrYMLhzUAYgKCnHAjyvm6ObsarCTN7N6Sbuk1UsXhX91AGLMv/ sej1yEv8ynhOXxxBHaunBRXglcwXiste620/Jq9a2bST0/dcRM65fK4cXyhIQFFkIf7O7Oam 5FnrZfz+lku69mAepNJrwerzLzKbBUDq4ruA9T5eUbg6/3/Tt8/lpILr8A6ilPTqE8OcnAMv 3IgiSOpZ/mJx35xfSqBLnBWxLM0c4iNQL2BSrBkYaj9Y --B_3331280192_225399-- From ms@citd.de Fri Jul 24 12:11:26 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OHBPNc138948 for ; Fri, 24 Jul 2009 12:11:26 -0500 X-ASG-Debug-ID: 1248455528-29c302ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7C189383E4B for ; Fri, 24 Jul 2009 10:12:09 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id 1cEBBrHndyeD3Zzh for ; Fri, 24 Jul 2009 10:12:09 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id CB8D72BC06; Fri, 24 Jul 2009 19:12:07 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id LkBbYLf0tbcU; Fri, 24 Jul 2009 19:11:58 +0200 (CEST) Received: from citd.de (p4FC4E252.dip.t-dialin.net [79.196.226.82]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 8DA222BC09; Fri, 24 Jul 2009 19:11:55 +0200 (CEST) Date: Fri, 24 Jul 2009 19:11:51 +0200 From: Matthias Schniedermeyer To: Sean Elble Cc: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? Message-ID: <20090724171151.GA23077@citd.de> References: <20090724073030.GA15785@citd.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1248455530 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 24.07.2009 11:36, Sean Elble wrote: > On 7/24/09 3:30 AM, "Matthias Schniedermeyer" wrote: > > >> > >> Looks like the version 1 directory code was removed as of June 15th, 2006, > >> per this: > >> > >> http://oss.sgi.com/archives/xfs/2006-06/msg00067.html > >> > >> But another post has > >> a 2.4.21 kernel being used with a patch, so I'm not sure if I want to try a > >> 2.6 kernel, or see if I can patch together a 2.4.x kernel on an old FC4 box > >> I have laying around. Truth be told, it's a lot of work just to blank the > >> entries in /etc/shadow so I can login to a 150 MHz box again, so who knows > >> if I'll even try at this point, hah. > >> > >> In any event, thanks a lot for the pointers in the right direction. > > > > I'd guess the disc isn't very big. > > > > You just dd it completly (for backup). > > > > Then search for the content of the shadow-file and blank out the entry > > with a hex-editor. Make sure that you don't change the filesize, pad > > the previous/following entry with any character you have to remove. > > Right, the disk is only 2 GB. Presumably, to back the disk up, all I'd have > to do would be something like: > > dd if=/dev/sda of=IRIXbackup > > Correct? No need to specify bs or count, I presume... Exactly. > Then, I could use hexedit in the following manner to edit the disk: > > hexedit -d -f /dev/sda Don't know hexedit. Last time i used a hex editor it was "khexedit", worked good enough. > I suppose I could search for the encrypted password string itself, but as > Chris Wedgwood suggested, I might be better off finding the offset of the > /etc/shadow file by doing something like the following: > > xfs_ncheck /dev/sda | grep /etc/shadow > > I'm not sure if I can use the inode number directly as an offset or not, but > I *think* I could use it in conjunction with a xfs_db convert command to get > something usable as an offset. Something like the following, perhaps? > > xfs_db -c convert inode daddr /dev/sda 2GB is small enough to just use "brute force". - Make a backup-copy of the image - Open the image in a/the hexeditor - Search for something that appears in the shadow file it should be pretty obvious if the hit is inside the shadow file. - Make the changes, (Remember filesize has to stay the same!) - dd the image back to the HDD. Not very complicated and it still shouldn't take too long. :-) Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From elbles@sessys.com Fri Jul 24 14:12:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6OJCftK143530 for ; Fri, 24 Jul 2009 14:12:42 -0500 X-ASG-Debug-ID: 1248462805-03d9020a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta31.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2EDED384447 for ; Fri, 24 Jul 2009 12:13:25 -0700 (PDT) Received: from mta31.charter.net (mta31.charter.net [216.33.127.82]) by cuda.sgi.com with ESMTP id k9aKdSRc4LGOFFE0 for ; Fri, 24 Jul 2009 12:13:25 -0700 (PDT) Received: from imp11 ([10.20.200.11]) by mta31.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090724191325.VUAB2647.mta31.charter.net@imp11>; Fri, 24 Jul 2009 15:13:25 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp11 with smtp.charter.net id KvDR1c0074yHaWo05vDR2P; Fri, 24 Jul 2009 15:13:25 -0400 Received: from [192.168.3.9] (dhcp-yelw-03-09.internal.sessys.com [192.168.3.9]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6OJDL91006706 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Fri, 24 Jul 2009 15:13:23 -0400 User-Agent: Microsoft-Entourage/12.20.0.090605 Date: Fri, 24 Jul 2009 15:13:20 -0400 X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Sean Elble To: Matthias Schniedermeyer CC: Message-ID: Thread-Topic: Using xfsdump On Linux With IRIX Version 1 FS? Thread-Index: AcoMks5WLTzrhCbNFkKXgptVCq6/2g== In-Reply-To: <20090724171151.GA23077@citd.de> Mime-version: 1.0 Content-type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="B_3331293200_1044000" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9612/Fri Jul 24 13:42:58 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta31.charter.net[216.33.127.82] X-Barracuda-Start-Time: 1248462806 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3331293200_1044000 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit On 7/24/09 1:11 PM, "Matthias Schniedermeyer" wrote: > On 24.07.2009 11:36, Sean Elble wrote: >> On 7/24/09 3:30 AM, "Matthias Schniedermeyer" wrote: >> >>> >>> I'd guess the disc isn't very big. >>> >>> You just dd it completly (for backup). >>> >>> Then search for the content of the shadow-file and blank out the entry >>> with a hex-editor. Make sure that you don't change the filesize, pad >>> the previous/following entry with any character you have to remove. >> >> Right, the disk is only 2 GB. Presumably, to back the disk up, all I'd have >> to do would be something like: >> >> dd if=/dev/sda of=IRIXbackup >> >> Correct? No need to specify bs or count, I presume... > > Exactly. > >> Then, I could use hexedit in the following manner to edit the disk: >> >> hexedit -d -f /dev/sda > > Don't know hexedit. Last time i used a hex editor it was "khexedit", > worked good enough. > >> I suppose I could search for the encrypted password string itself, but as >> Chris Wedgwood suggested, I might be better off finding the offset of the >> /etc/shadow file by doing something like the following: >> >> xfs_ncheck /dev/sda | grep /etc/shadow >> >> I'm not sure if I can use the inode number directly as an offset or not, but >> I *think* I could use it in conjunction with a xfs_db convert command to get >> something usable as an offset. Something like the following, perhaps? >> >> xfs_db -c convert inode daddr /dev/sda > > 2GB is small enough to just use "brute force". > > - Make a backup-copy of the image > - Open the image in a/the hexeditor > - Search for something that appears in the shadow file > it should be pretty obvious if the hit is inside the shadow file. > - Make the changes, (Remember filesize has to stay the same!) > - dd the image back to the HDD. > > Not very complicated and it still shouldn't take too long. :-) > Yeah, that's probably what I'll do then. I figure the disk will thrash for a while during the search for a string in /etc/shadow, but hopefully it'll work. Thanks for all the advice! -Sean -- +------------------------------------------------- | Sean Elble | Virginia Tech, Class of 2009 | E-Mail: elbles@sessys.com | Web: http://www.sessys.com/~elbles/ | Cell: 860.946.9477 +------------------------------------------------- --B_3331293200_1044000 Content-type: application/pkcs7-signature; name="smime.p7s" Content-transfer-encoding: base64 Content-disposition: attachment; filename="smime.p7s" MIIIVwYJKoZIhvcNAQcCoIIISDCCCEQCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BiMwggLcMIICRaADAgECAhAvf5NHjc/BR/lyCoHqxXxjMA0GCSqGSIb3DQEBBQUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wOTAxMTYwMzA2 NTdaFw0xMDAxMTYwMzA2NTdaMEMxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx IDAeBgkqhkiG9w0BCQEWEWVsYmxlc0BzZXNzeXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAn0fFczG75sMuPqIaVQ3vbcN+pMJbg7mVf8UAGF7O6ObUoQofVZdePd4W 3iyG2xiGssTdRTan7s5uO/x1dLFROoFk1ZbazC32s8iHD/udyQfeaJsv02e08JlCt54ajwLg lZSxAJSYKaCmAX5qUiumOEkRg86sf6c0Ry5AbfBcijfg0PEe4ptKV6sgF++VCo1ozBxSxN/b tG9LR0G5wHJyAuCc+biiGv+7/Y6vihHdMXnSVaLm2mz6xE6oEVwl+tuLXPX6UUKeEUTtiDuq yOTf7PFahGIPeWzkDkdSMf98LxxzVqsa6ak3pVgEQEZePhitLFTDPx5RlYEUfWPFWBL+qwID AQABoy4wLDAcBgNVHREEFTATgRFlbGJsZXNAc2Vzc3lzLmNvbTAMBgNVHRMBAf8EAjAAMA0G CSqGSIb3DQEBBQUAA4GBABuJXSYxgtvNq3jQwRuHmoU4pMf61yyKW8oSEKaPBbzF1PgwDBFa rAKarubKQOIUJGcGvAbPbvCCXL+rn7QsRfu/LLxVJpsZignqnp+1Xd5nc/20gkoiY/AXlFf4 bnmk9lwKF9AVHlW2PWaUqLvd+L7DNy6NZQzgo3TScU3jt/EWMIIDPzCCAqigAwIBAgIBDTAN BgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTES MBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0 aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAK MNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYB Af8CAQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBl cnNvbmFsRnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYD VQQDExFQcml2YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2as Zw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSe JVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHT HUb/XV9lTzGCAfwwggH4AgEBMHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp bCBJc3N1aW5nIENBAhAvf5NHjc/BR/lyCoHqxXxjMAkGBSsOAwIaBQCgXTAjBgkqhkiG9w0B CQQxFgQUlrub+GFD4htUXeBhGq9UHOI5PM8wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc BgkqhkiG9w0BCQUxDxcNMDkwNzI0MTkxMzIwWjANBgkqhkiG9w0BAQEFAASCAQBQjI1+hxXQ D7Gs5CINkHoxHUwPICDm364Di96xwCiBD80cVTHH7hEGyd5U14Z1pPOinv/kiUgQW7Can1Xn 3f6vUSoadeVa6Y6SL6azBviVROndWTB72rNcsszzTq8xM/wltkJQ8zmPMluUnOBrhOrY6rnm tMU6Bjtd95MNMvP2xvxJVAFIF97YlrCaOo7wX4fVLSEOj1/Xwu1lO2DLM0QZtfo10LEtCd7J tBNDoNXosE29Jagu/QLlVhdqDqW3MEgmeo/kY67tcf/e/50oXG8+/zQ5dCI6nrQ3y5+fmOmm qeqikwE3d+d01LWXxdR6E+czcheRPUyZxtbxIU5lVBd6 --B_3331293200_1044000-- From lists@nerdbynature.de Fri Jul 24 22:53:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6P3rSxg169779 for ; Fri, 24 Jul 2009 22:53:30 -0500 X-ASG-Debug-ID: 1248494052-6e60008f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D83A313F669D for ; Fri, 24 Jul 2009 20:54:12 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.9]) by cuda.sgi.com with ESMTP id bbZJXbVN28DbAagq for ; Fri, 24 Jul 2009 20:54:12 -0700 (PDT) Received: from bogon.housecafe.de (ppp-93-104-168-133.dynamic.mnet-online.de [93.104.168.133]) by mrelayeu.kundenserver.de (node=mrbap2) with ESMTP (Nemesis) id 0MKt72-1MUYKl1gAo-0009oG; Sat, 25 Jul 2009 05:54:08 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon.housecafe.de with esmtp (Exim 4.69) (envelope-from ) id 1MUYKd-0000tR-0m; Sat, 25 Jul 2009 05:53:59 +0200 Date: Fri, 24 Jul 2009 20:53:58 -0700 (PDT) From: Christian Kujau To: Sean Elble cc: Matthias Schniedermeyer , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? In-Reply-To: Message-ID: References: User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX1+6yR6sFVkh+6GKm+lvrGxXbl4tfTbLco7htul PtgfDmV8PRc6wG83xm5uSGqDMqjlKoeIpUC+AGnCkbmLO9l6Vb 21heZD46FazWi+bIj8ETw== X-Barracuda-Connect: moutng.kundenserver.de[212.227.17.9] X-Barracuda-Start-Time: 1248494052 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4338 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, 24 Jul 2009 at 15:13, Sean Elble wrote: > Yeah, that's probably what I'll do then. I figure the disk will thrash for > a while during the search for a string in /etc/shadow, but hopefully it'll Instead of working on the (old, slow) disk, you could just work on the backup (located on faster disk, I presume), maybe even set up a blockdevice for it: # losetup -r /dev/loop0 /path/to/IRIXbackup # hexedit /dev/loop0 ...or whatever tool you'll be using. Christian. -- BOFH excuse #378: Operators killed by year 2000 bug bite. From ms@citd.de Sat Jul 25 02:26:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6P7Qf13184861 for ; Sat, 25 Jul 2009 02:26:42 -0500 X-ASG-Debug-ID: 1248506845-32d602470000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4351A385652 for ; Sat, 25 Jul 2009 00:27:25 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id t381EUI6PaVout2q for ; Sat, 25 Jul 2009 00:27:25 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id AF5A82BC0A; Sat, 25 Jul 2009 09:27:22 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id ebSaRJjXO3px; Sat, 25 Jul 2009 09:26:25 +0200 (CEST) Received: from citd.de (p4FC4E252.dip.t-dialin.net [79.196.226.82]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 00A402BC08; Sat, 25 Jul 2009 09:26:21 +0200 (CEST) Date: Sat, 25 Jul 2009 09:26:17 +0200 From: Matthias Schniedermeyer To: Christian Kujau Cc: Sean Elble , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? Message-ID: <20090725072617.GA30450@citd.de> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1248506846 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 24.07.2009 20:53, Christian Kujau wrote: > On Fri, 24 Jul 2009 at 15:13, Sean Elble wrote: > > Yeah, that's probably what I'll do then. I figure the disk will thrash for > > a while during the search for a string in /etc/shadow, but hopefully it'll > > Instead of working on the (old, slow) disk, you could just work on the > backup (located on faster disk, I presume), maybe even set up a > blockdevice for it: > > # losetup -r /dev/loop0 /path/to/IRIXbackup > # hexedit /dev/loop0 ...or whatever tool you'll be using. Which has what advantage over directly changing the image? And the old disc may be slow, but the relative speed (Speed in relation to total capacity) is much better than modern discs. IOW it only takes minutes to read/write it completly. Some month ago i backed up some old HDDs (biggest was 4GB), it nearly took longer to switch on/off the computer and change the HDDs, than the actual time to copy the HDDs. Even with just 10MB/s it's less than 4 Minutes for 2GB. In comparison it takes over 3 hours to copy a modern 1TB HDD @ 80MB/s. Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From lists@nerdbynature.de Sat Jul 25 04:45:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6P9jnwg192078 for ; Sat, 25 Jul 2009 04:45:50 -0500 X-ASG-Debug-ID: 1248515193-5625010b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 93EEE13F6D5E for ; Sat, 25 Jul 2009 02:46:33 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.177]) by cuda.sgi.com with ESMTP id UtU9m1f4nQYhT8PC for ; Sat, 25 Jul 2009 02:46:33 -0700 (PDT) Received: from bogon.housecafe.de (ppp-93-104-168-133.dynamic.mnet-online.de [93.104.168.133]) by mrelayeu.kundenserver.de (node=mreu1) with ESMTP (Nemesis) id 0MKv1o-1MUdpn4APQ-0008KQ; Sat, 25 Jul 2009 11:46:32 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon.housecafe.de with esmtp (Exim 4.69) (envelope-from ) id 1MUdph-0005lH-Km; Sat, 25 Jul 2009 11:46:25 +0200 Date: Sat, 25 Jul 2009 02:46:19 -0700 (PDT) From: Christian Kujau To: Matthias Schniedermeyer cc: Sean Elble , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? In-Reply-To: <20090725072617.GA30450@citd.de> Message-ID: References: <20090725072617.GA30450@citd.de> User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX18qBL3uKzUM1gq5kCLGvjvxetk4IpfgBdW/gXE W8VljLrYWR6VPleIBQcP3VYivatg3f2S+zB2VUZ1WTE8H3UJIz uMLc0g3Fdo/wK/6iQeYNw== X-Barracuda-Connect: moutng.kundenserver.de[212.227.126.177] X-Barracuda-Start-Time: 1248515194 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4360 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sat, 25 Jul 2009 at 09:26, Matthias Schniedermeyer wrote: > > # losetup -r /dev/loop0 /path/to/IRIXbackup > > # hexedit /dev/loop0 ...or whatever tool you'll be using. > > Which has what advantage over directly changing the image? Sean mentioned the "thrashing of the old disk" and I figured I'd be worried not only by that but that the old disk might die anytime soon. So I wanted to present an alternative to do the search - I don't know too much about his setup, so it's up to him to follow this advice or not. > Even with just 10MB/s it's less than 4 Minutes for 2GB. > In comparison it takes over 3 hours to copy a modern 1TB HDD @ 80MB/s. ?? (what kind of comparison is that?) C. -- BOFH excuse #443: Zombie processes detected, machine is haunted. From ms@citd.de Sat Jul 25 05:22:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6PAMYPC193820 for ; Sat, 25 Jul 2009 05:22:34 -0500 X-ASG-Debug-ID: 1248517398-68e8030f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4528B3856D6 for ; Sat, 25 Jul 2009 03:23:18 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id HKOOuThqEEJGMoFI for ; Sat, 25 Jul 2009 03:23:18 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id BA37F2BC09; Sat, 25 Jul 2009 12:23:15 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id fDCpFopO5q4p; Sat, 25 Jul 2009 12:23:04 +0200 (CEST) Received: from citd.de (p4FC4E252.dip.t-dialin.net [79.196.226.82]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id C6EAF2BC08; Sat, 25 Jul 2009 12:23:02 +0200 (CEST) Date: Sat, 25 Jul 2009 12:22:58 +0200 From: Matthias Schniedermeyer To: Christian Kujau Cc: Sean Elble , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? Message-ID: <20090725102258.GA1121@citd.de> References: <20090725072617.GA30450@citd.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1248517399 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 25.07.2009 02:46, Christian Kujau wrote: > On Sat, 25 Jul 2009 at 09:26, Matthias Schniedermeyer wrote: > > > # losetup -r /dev/loop0 /path/to/IRIXbackup > > > # hexedit /dev/loop0 ...or whatever tool you'll be using. > > > > Which has what advantage over directly changing the image? > > Sean mentioned the "thrashing of the old disk" and I figured I'd be > worried not only by that but that the old disk might die anytime soon. So > I wanted to present an alternative to do the search - I don't know too > much about his setup, so it's up to him to follow this advice or not. I meant: What is the advantage of using the a loop-device (of the image) instead of directly using the image? > > Even with just 10MB/s it's less than 4 Minutes for 2GB. > > In comparison it takes over 3 hours to copy a modern 1TB HDD @ 80MB/s. > > ?? (what kind of comparison is that?) That you can read/write whole "ancient" discs without having to wait for hours? Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From lists@nerdbynature.de Sat Jul 25 05:36:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_48 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6PAaYAO194670 for ; Sat, 25 Jul 2009 05:36:34 -0500 X-ASG-Debug-ID: 1248518746-6f22035e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from moutng.kundenserver.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7779510C053C for ; Sat, 25 Jul 2009 03:45:46 -0700 (PDT) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.10]) by cuda.sgi.com with ESMTP id n1Hr9xsUUrUidFq1 for ; Sat, 25 Jul 2009 03:45:46 -0700 (PDT) Received: from bogon.housecafe.de (ppp-93-104-168-133.dynamic.mnet-online.de [93.104.168.133]) by mrelayeu.kundenserver.de (node=mrbap0) with ESMTP (Nemesis) id 0MKsym-1MUecu36T2-000Yby; Sat, 25 Jul 2009 12:37:17 +0200 Received: from localhost.housecafe.de ([127.0.0.1] helo=localhost) by bogon.housecafe.de with esmtp (Exim 4.69) (envelope-from ) id 1MUece-0006yy-Ki; Sat, 25 Jul 2009 12:37:00 +0200 Date: Sat, 25 Jul 2009 03:36:53 -0700 (PDT) From: Christian Kujau To: Matthias Schniedermeyer cc: Sean Elble , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? In-Reply-To: <20090725102258.GA1121@citd.de> Message-ID: References: <20090725072617.GA30450@citd.de> <20090725102258.GA1121@citd.de> User-Agent: Alpine 2.01 (DEB 1184 2008-12-16) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Provags-ID: V01U2FsdGVkX1/nhd6D0RUncOBCi0E+r2dKIGjdI9gNIIPePkr PV4kXslhUHdjRMYNykitUPX5EryZuodVF+YDJFfvpdcedCUrAe SSHNDLdpda3jFptmidujg== X-Barracuda-Connect: moutng.kundenserver.de[212.227.17.10] X-Barracuda-Start-Time: 1248518747 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4365 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sat, 25 Jul 2009 at 12:22, Matthias Schniedermeyer wrote: > I meant: What is the advantage of using the a loop-device (of the image) > instead of directly using the image? Some tools don't like to act on flat files, i.e. mkfs.reiserfs won't create a filesystem on a file without -forcing it, dunno about all the xfsprogs though, or "hexedit", or.... -- BOFH excuse #5: static from plastic slide rules From BATV+c19e1ba81caaa8dc88a2+2162+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 25 10:02:16 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6PF2DLs212759 for ; Sat, 25 Jul 2009 10:02:15 -0500 X-ASG-Debug-ID: 1248534177-422001820000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6A01D385C3B for ; Sat, 25 Jul 2009 08:02:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id eQROGeAdtAM27DG5 for ; Sat, 25 Jul 2009 08:02:57 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MUim0-0004wx-Nb; Sat, 25 Jul 2009 15:02:56 +0000 Date: Sat, 25 Jul 2009 11:02:56 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfs_repair: check for null single-block dir buffer pointer in phase6 Subject: Re: [PATCH] xfs_repair: check for null single-block dir buffer pointer in phase6 Message-ID: <20090725150256.GA12148@infradead.org> References: <4A69C660.9000604@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A69C660.9000604@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248534178 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Jul 24, 2009 at 09:34:08AM -0500, Eric Sandeen wrote: > @@ -2524,7 +2525,7 @@ longform_dir2_entry_check(xfs_mount_t *mp, > > if (!dotdot_update) { > /* check btree and freespace */ > - if (isblock) { > + if (isblock && bplist[0]) { > xfs_dir2_block_tail_t *btp; > xfs_dir2_leaf_entry_t *blp; This doesn't look quite correct to me. Now we falls through to the final else statement when bplist[0] is zeroed. From elbles@sessys.com Sat Jul 25 11:24:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6PGOow0217579 for ; Sat, 25 Jul 2009 11:24:50 -0500 X-ASG-Debug-ID: 1248539134-421002e70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta21.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 616FC385D6E for ; Sat, 25 Jul 2009 09:25:35 -0700 (PDT) Received: from mta21.charter.net (mta21.charter.net [216.33.127.81]) by cuda.sgi.com with ESMTP id pCj9lW2D1TbbKYNS for ; Sat, 25 Jul 2009 09:25:35 -0700 (PDT) Received: from imp11 ([10.20.200.11]) by mta21.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090725162534.PNSV3344.mta21.charter.net@imp11>; Sat, 25 Jul 2009 12:25:34 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp11 with smtp.charter.net id LGRa1c00D4yHaWo05GRarj; Sat, 25 Jul 2009 12:25:34 -0400 Received: from [192.168.3.5] (dhcp-yelw-03-05.internal.sessys.com [192.168.3.5]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6PGPVDp006703 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Sat, 25 Jul 2009 12:25:33 -0400 User-Agent: Microsoft-Entourage/12.20.0.090605 Date: Sat, 25 Jul 2009 12:25:30 -0400 X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Sean Elble To: Christian Kujau , Matthias Schniedermeyer CC: Message-ID: Thread-Topic: Using xfsdump On Linux With IRIX Version 1 FS? Thread-Index: AcoNRIaPfnRKupWq6UCx414HfJB29g== In-Reply-To: Mime-version: 1.0 Content-type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="B_3331369530_141012" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV 0.94.2/9613/Fri Jul 24 20:08:58 2009 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta21.charter.net[216.33.127.81] X-Barracuda-Start-Time: 1248539135 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3331369530_141012 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit On 7/25/09 5:46 AM, "Christian Kujau" wrote: > On Sat, 25 Jul 2009 at 09:26, Matthias Schniedermeyer wrote: >>> # losetup -r /dev/loop0 /path/to/IRIXbackup >>> # hexedit /dev/loop0 ...or whatever tool you'll be using. >> >> Which has what advantage over directly changing the image? > > Sean mentioned the "thrashing of the old disk" and I figured I'd be > worried not only by that but that the old disk might die anytime soon. So > I wanted to present an alternative to do the search - I don't know too > much about his setup, so it's up to him to follow this advice or not. > > I think (and hope, considering its age) that the disk is OK. My concern was more with the speed that hexedit could traverse the drive searching for a string, as opposed to dd'ing the drive to disk, editing the image, and then dd'ing the image back to disk. Using the loopback driver is definitely a thought, but I don't know if the kernel on my spare box supports it or not. I'll definitely take it into consideration, depending on how it goes, so thanks for the info. >> Even with just 10MB/s it's less than 4 Minutes for 2GB. >> In comparison it takes over 3 hours to copy a modern 1TB HDD @ 80MB/s. > > ?? (what kind of comparison is that?) > > C. -- +------------------------------------------------- | Sean Elble | Virginia Tech, Class of 2009 | E-Mail: elbles@sessys.com | Web: http://www.sessys.com/~elbles/ | Cell: 860.946.9477 +------------------------------------------------- --B_3331369530_141012 Content-type: application/pkcs7-signature; name="smime.p7s" Content-transfer-encoding: base64 Content-disposition: attachment; filename="smime.p7s" MIIIVwYJKoZIhvcNAQcCoIIISDCCCEQCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BiMwggLcMIICRaADAgECAhAvf5NHjc/BR/lyCoHqxXxjMA0GCSqGSIb3DQEBBQUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wOTAxMTYwMzA2 NTdaFw0xMDAxMTYwMzA2NTdaMEMxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx IDAeBgkqhkiG9w0BCQEWEWVsYmxlc0BzZXNzeXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAn0fFczG75sMuPqIaVQ3vbcN+pMJbg7mVf8UAGF7O6ObUoQofVZdePd4W 3iyG2xiGssTdRTan7s5uO/x1dLFROoFk1ZbazC32s8iHD/udyQfeaJsv02e08JlCt54ajwLg lZSxAJSYKaCmAX5qUiumOEkRg86sf6c0Ry5AbfBcijfg0PEe4ptKV6sgF++VCo1ozBxSxN/b tG9LR0G5wHJyAuCc+biiGv+7/Y6vihHdMXnSVaLm2mz6xE6oEVwl+tuLXPX6UUKeEUTtiDuq yOTf7PFahGIPeWzkDkdSMf98LxxzVqsa6ak3pVgEQEZePhitLFTDPx5RlYEUfWPFWBL+qwID AQABoy4wLDAcBgNVHREEFTATgRFlbGJsZXNAc2Vzc3lzLmNvbTAMBgNVHRMBAf8EAjAAMA0G CSqGSIb3DQEBBQUAA4GBABuJXSYxgtvNq3jQwRuHmoU4pMf61yyKW8oSEKaPBbzF1PgwDBFa rAKarubKQOIUJGcGvAbPbvCCXL+rn7QsRfu/LLxVJpsZignqnp+1Xd5nc/20gkoiY/AXlFf4 bnmk9lwKF9AVHlW2PWaUqLvd+L7DNy6NZQzgo3TScU3jt/EWMIIDPzCCAqigAwIBAgIBDTAN BgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTES MBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0 aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAK MNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYB Af8CAQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBl cnNvbmFsRnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYD VQQDExFQcml2YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2as Zw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSe JVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHT HUb/XV9lTzGCAfwwggH4AgEBMHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp bCBJc3N1aW5nIENBAhAvf5NHjc/BR/lyCoHqxXxjMAkGBSsOAwIaBQCgXTAjBgkqhkiG9w0B CQQxFgQUxMEWGRME39ChgeIkMY4SkQMyFa4wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc BgkqhkiG9w0BCQUxDxcNMDkwNzI1MTYyNTMwWjANBgkqhkiG9w0BAQEFAASCAQB5tg+BoRS7 YquOvWC6TYT0PgUrU2AdrJ8rNnflyxJoAD3kTc/2aPn7j/S9Pc07E4OmHcWv+xAiMQYctu1U eTRD5ruJnSsON+dSB2XcFOWyxadvlB7Q8U0RiTyi+klBTDMbqlme+z8EeBperz35f+BhtZ9J 9a7z06VASqqzeg1WuMNylSjpdl2W84/mkjyR2H5mi0349pq0yHpdeHCBtGcQZ8kXtx5xyfVD vClUptMtj3fnPplLL0Mxv3WXV76EkqWUor0xHpscMiBzyT8JT1pJz2ICHhsrO1r7zafTMI9y c8S20FT9cnPRzwccf5ZD5PinhpQ8AIsHsmPVawf2Z/y+ --B_3331369530_141012-- From elbles@sessys.com Sat Jul 25 19:23:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6Q0Nimi239129 for ; Sat, 25 Jul 2009 19:23:45 -0500 X-ASG-Debug-ID: 1248568379-127300f40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mta21.charter.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 890D510C0D0C for ; Sat, 25 Jul 2009 17:32:59 -0700 (PDT) Received: from mta21.charter.net (mta21.charter.net [216.33.127.81]) by cuda.sgi.com with ESMTP id HTEkxGKeK6wHSxqg for ; Sat, 25 Jul 2009 17:32:59 -0700 (PDT) Received: from imp10 ([10.20.200.10]) by mta21.charter.net (InterMail vM.7.09.01.00 201-2219-108-20080618) with ESMTP id <20090726002427.VSKF3344.mta21.charter.net@imp10>; Sat, 25 Jul 2009 20:24:27 -0400 Received: from mail.sessys.com ([24.151.108.230]) by imp10 with smtp.charter.net id LQQT1c0024yHaWo05QQTbL; Sat, 25 Jul 2009 20:24:27 -0400 Received: from [192.168.3.5] (dhcp-yelw-03-05.internal.sessys.com [192.168.3.5]) (authenticated bits=0) (authenticated user=elbles) by mail.sessys.com (8.13.7/8.13.7-SES__MASTER) with ESMTP id n6Q0OJWo004522 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Sat, 25 Jul 2009 20:24:22 -0400 User-Agent: Microsoft-Entourage/12.20.0.090605 Date: Sat, 25 Jul 2009 20:24:18 -0400 X-ASG-Orig-Subj: Re: Using xfsdump On Linux With IRIX Version 1 FS? Subject: Re: Using xfsdump On Linux With IRIX Version 1 FS? From: Sean Elble To: Christian Kujau , Matthias Schniedermeyer CC: Message-ID: Thread-Topic: Using xfsdump On Linux With IRIX Version 1 FS? Thread-Index: AcoNh2nIqN9wd+BylEa1h6YSuyK1Cg== In-Reply-To: Mime-version: 1.0 Content-type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="B_3331398258_1856570" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: SES Computer Systems ClamAV Version 0.94.2, ClamAV Mail Filter Version 0.94.2 on zeus.sessys.com X-Virus-Status: Clean X-Barracuda-Connect: mta21.charter.net[216.33.127.81] X-Barracuda-Start-Time: 1248568380 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4419 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3331398258_1856570 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit On 7/25/09 5:46 AM, "Christian Kujau" wrote: > On Sat, 25 Jul 2009 at 09:26, Matthias Schniedermeyer wrote: >>> # losetup -r /dev/loop0 /path/to/IRIXbackup >>> # hexedit /dev/loop0 ...or whatever tool you'll be using. >> >> Which has what advantage over directly changing the image? > > Sean mentioned the "thrashing of the old disk" and I figured I'd be > worried not only by that but that the old disk might die anytime soon. So > I wanted to present an alternative to do the search - I don't know too > much about his setup, so it's up to him to follow this advice or not. > Well, I ended up dd'ing the old SCSI disk to a file on a spare Linux box I have laying around for just this sort of purpose. I then opened the resulting file up with hexedit, switched to ASCII mode, did a search for the root password hash, and replaced it with a known hash for "blah." DD'ed the image back to the disk, threw it back in the Indigo2, and booted. I entered maintenace mode, ran sash, and cat'ed the /etc/shadow file. It still had the old password. So, back to the image file I went. The password string was in there multiple times, to the point where I lost count. I should have thought of that the first time around, but I figured once was good enough. Searched and replaced the string until the old string wasn't in there anymore, reimaged the drive, put it back in the SGI, booted, and voila: I can log in again. The loopback method was a moot point, as the box I was using didn't have the loopback driver compiled in or available as a module, so I never even tried it. I'll definitely keep it in mind (and in my inbox) should another few years go by and I can't remember the password again. :-) Thanks so much for all the help guys, I really appreciate it. -Sean -- +------------------------------------------------- | Sean Elble | Virginia Tech, Class of 2009 | E-Mail: elbles@sessys.com | Web: http://www.sessys.com/~elbles/ | Cell: 860.946.9477 +------------------------------------------------- --B_3331398258_1856570 Content-type: application/pkcs7-signature; name="smime.p7s" Content-transfer-encoding: base64 Content-disposition: attachment; filename="smime.p7s" MIIIVwYJKoZIhvcNAQcCoIIISDCCCEQCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC BiMwggLcMIICRaADAgECAhAvf5NHjc/BR/lyCoHqxXxjMA0GCSqGSIb3DQEBBQUAMGIxCzAJ BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYD VQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTAeFw0wOTAxMTYwMzA2 NTdaFw0xMDAxMTYwMzA2NTdaMEMxHzAdBgNVBAMTFlRoYXd0ZSBGcmVlbWFpbCBNZW1iZXIx IDAeBgkqhkiG9w0BCQEWEWVsYmxlc0BzZXNzeXMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEAn0fFczG75sMuPqIaVQ3vbcN+pMJbg7mVf8UAGF7O6ObUoQofVZdePd4W 3iyG2xiGssTdRTan7s5uO/x1dLFROoFk1ZbazC32s8iHD/udyQfeaJsv02e08JlCt54ajwLg lZSxAJSYKaCmAX5qUiumOEkRg86sf6c0Ry5AbfBcijfg0PEe4ptKV6sgF++VCo1ozBxSxN/b tG9LR0G5wHJyAuCc+biiGv+7/Y6vihHdMXnSVaLm2mz6xE6oEVwl+tuLXPX6UUKeEUTtiDuq yOTf7PFahGIPeWzkDkdSMf98LxxzVqsa6ak3pVgEQEZePhitLFTDPx5RlYEUfWPFWBL+qwID AQABoy4wLDAcBgNVHREEFTATgRFlbGJsZXNAc2Vzc3lzLmNvbTAMBgNVHRMBAf8EAjAAMA0G CSqGSIb3DQEBBQUAA4GBABuJXSYxgtvNq3jQwRuHmoU4pMf61yyKW8oSEKaPBbzF1PgwDBFa rAKarubKQOIUJGcGvAbPbvCCXL+rn7QsRfu/LLxVJpsZignqnp+1Xd5nc/20gkoiY/AXlFf4 bnmk9lwKF9AVHlW2PWaUqLvd+L7DNy6NZQzgo3TScU3jt/EWMIIDPzCCAqigAwIBAgIBDTAN BgkqhkiG9w0BAQUFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTES MBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UE CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0 aGF3dGUuY29tMB4XDTAzMDcxNzAwMDAwMFoXDTEzMDcxNjIzNTk1OVowYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDEpjxVc1X7TrnKmVoeaMB1BHCd3+n/ox7svc31W/Iadr1/DDph8r9RzgHU5VAK MNcCY1osiRVwjt3J8CuFWqo/cVbLrzwLB+fxH5E2JCoTzyvV84J3PQO+K/67GD4Hv0CAAmTX p6a7n2XRxSpUhQ9IBH+nttE8YQRAHmQZcmC3+wIDAQABo4GUMIGRMBIGA1UdEwEB/wQIMAYB Af8CAQAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC50aGF3dGUuY29tL1RoYXd0ZVBl cnNvbmFsRnJlZW1haWxDQS5jcmwwCwYDVR0PBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYD VQQDExFQcml2YXRlTGFiZWwyLTEzODANBgkqhkiG9w0BAQUFAAOBgQBIjNFQg+oLLswNo2as Zw9/r6y+whehQ5aUnX9MIbj4Nh+qLZ82L8D0HFAgk3A8/a3hYWLD2ToZfoSxmRsAxRoLgnSe JVCUYsfbJ3FXJY3dqZw5jowgT2Vfldr394fWxghOrvbqNOUQGls1TXfjViF4gtwhGTXeJLHT HUb/XV9lTzGCAfwwggH4AgEBMHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFp bCBJc3N1aW5nIENBAhAvf5NHjc/BR/lyCoHqxXxjMAkGBSsOAwIaBQCgXTAjBgkqhkiG9w0B CQQxFgQUyAWeJ4f5lpFtrYEdODemMfQCMbswGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc BgkqhkiG9w0BCQUxDxcNMDkwNzI2MDAyNDE4WjANBgkqhkiG9w0BAQEFAASCAQAvq2TeC81e 2UdtEStOSPmU3tY1/J1fR+XAPrAr25qGzo6DV3wmpN57xoE0NfGt03pFZktPLStjHLZmeEKF zKxhwQIvxYPSsKzFPDRExL8c8cvwpcBt5cZQvckUD5f5X/IfRzZ5q4N5iapMRGrNre98ZRwJ GwWsEeRY7Was+icgo48Z1nniqVXlM3c8yzomtNggswWBew3iswxVSk+dIT9Xr06uiKhvJO/g mx32kBzrnD4hLOJaloeJ8+/C5O+ngWZzrks7HVB33lWxF11CfHXSwfxmuACy6/7kZzUuT8zA sG5KGqqq81FWIlF72j1ZWSxSklzDyr+XijxgBCO+jW0Y --B_3331398258_1856570-- From pengxihan@gmail.com Sat Jul 25 22:29:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6Q3TM4G246845 for ; Sat, 25 Jul 2009 22:29:22 -0500 X-ASG-Debug-ID: 1248579516-607f02ad0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f208.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A32210C0ADB for ; Sat, 25 Jul 2009 20:38:37 -0700 (PDT) Received: from mail-fx0-f208.google.com (mail-fx0-f208.google.com [209.85.220.208]) by cuda.sgi.com with ESMTP id h9eCflA0invNg1Z2 for ; Sat, 25 Jul 2009 20:38:37 -0700 (PDT) Received: by fxm4 with SMTP id 4so1962239fxm.20 for ; Sat, 25 Jul 2009 20:30:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=4Xh0CoByY0jtSnQ/dNEaT3CFLQY3pehHIDi66XhaNvg=; b=v5XRGQ8xUXXTWyRgH8ZMXRX9jSZmzH4HKu3TUIMaT3OSA0CErZ7H+ArLP2V7dV7ETJ WWl6pxedwwuqPh0pkq+LwnUT2HN2eWyV9/Z2gtB74qy2zDfpfb/epVzF6wfHT663LZOz 9ihyFHCsGnIOCsG27uzV0w89WSw6G09WL/ZVg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=aiak95LyyoHsZpD1BVZTdc8w1k9kQ81MvURJmBIkPnWI8SvvfPhbsNPKWt3bQfIuBE ns573SfqEr3QsDbN32MRxwDxV4myqLWIhKMiMxDnk2VLgtWGyO45ai7PlLrjKpIAKPyH RYqMkONf+AjRhV2crUgkMhmPI5E1sm3eMp23Q= MIME-Version: 1.0 Received: by 10.103.189.18 with SMTP id r18mr2518830mup.98.1248579003769; Sat, 25 Jul 2009 20:30:03 -0700 (PDT) Date: Sun, 26 Jul 2009 11:30:03 +0800 Message-ID: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> X-ASG-Orig-Subj: How to solve "No space left" problem on my 32bit machine? Subject: How to solve "No space left" problem on my 32bit machine? From: hank peng To: linux-xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-fx0-f208.google.com[209.85.220.208] X-Barracuda-Start-Time: 1248579518 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4431 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, folks: I have a 2.5T file system formatted with XFS, df tells me it still have about 10G space available, but I can't create new files or directory any more. Return message is "No space left on this device". I searched solution for this problem through google, and found this: http://oss.sgi.com/archives/xfs/2005-06/msg00347.html. I think it is a known "No space left" problem. I wonder whether it can only be solved on 64-bit machine? If on my 32-bit machine, what should I do? -- The simplest is not all best but the best is surely the simplest! From eflorac@intellique.com Sun Jul 26 10:39:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6QFd5nj028454 for ; Sun, 26 Jul 2009 10:39:05 -0500 X-ASG-Debug-ID: 1248622784-590402bf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp5-g21.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4A54D386F43 for ; Sun, 26 Jul 2009 08:39:47 -0700 (PDT) Received: from smtp5-g21.free.fr (smtp5-g21.free.fr [212.27.42.5]) by cuda.sgi.com with ESMTP id XC0dwo86BGQMmdfE for ; Sun, 26 Jul 2009 08:39:47 -0700 (PDT) Received: from smtp5-g21.free.fr (localhost [127.0.0.1]) by smtp5-g21.free.fr (Postfix) with ESMTP id 5B78BD480C0 for ; Sun, 26 Jul 2009 17:39:41 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp5-g21.free.fr (Postfix) with ESMTP id 4DE9BD480CF for ; Sun, 26 Jul 2009 17:39:39 +0200 (CEST) Date: Sun, 26 Jul 2009 17:39:38 +0200 From: Emmanuel Florac To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: How to solve "No space left" problem on my 32bit machine? Subject: Re: How to solve "No space left" problem on my 32bit machine? Message-ID: <20090726173938.4179bd18@galadriel.home> In-Reply-To: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> References: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp5-g21.free.fr[212.27.42.5] X-Barracuda-Start-Time: 1248622790 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4477 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Le Sun, 26 Jul 2009 11:30:03 +0800 vous =E9criviez: > If on my 32-bit machine, what should I do? 2.5TB is far from the 32 bits limit (16 TB). You're probably out of inodes (lots of small files?). You can add some with xfs_growfs, though. --=20 -------------------------------------------------- Emmanuel Florac www.intellique.com =20 -------------------------------------------------- From sandeen@sandeen.net Sun Jul 26 17:51:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6QMpg2B048730 for ; Sun, 26 Jul 2009 17:51:43 -0500 X-ASG-Debug-ID: 1248649263-0e7902810000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 979F010C2908 for ; Sun, 26 Jul 2009 16:01:03 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id v0E93xAB53hKaVJK for ; Sun, 26 Jul 2009 16:01:03 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 95A3FA9DAA6; Sun, 26 Jul 2009 17:52:24 -0500 (CDT) Message-ID: <4A6CDE2C.9070508@sandeen.net> Date: Sun, 26 Jul 2009 17:52:28 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfs_repair: check for null single-block dir buffer pointer in phase6 Subject: Re: [PATCH] xfs_repair: check for null single-block dir buffer pointer in phase6 References: <4A69C660.9000604@sandeen.net> <20090725150256.GA12148@infradead.org> In-Reply-To: <20090725150256.GA12148@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248649264 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4506 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Fri, Jul 24, 2009 at 09:34:08AM -0500, Eric Sandeen wrote: >> @@ -2524,7 +2525,7 @@ longform_dir2_entry_check(xfs_mount_t *mp, >> >> if (!dotdot_update) { >> /* check btree and freespace */ >> - if (isblock) { >> + if (isblock && bplist[0]) { >> xfs_dir2_block_tail_t *btp; >> xfs_dir2_leaf_entry_t *blp; > > This doesn't look quite correct to me. Now we falls through to the > final else statement when bplist[0] is zeroed. > Oh, ugh, you're right. Will fix that up, thanks. -Eric From sandeen@sandeen.net Sun Jul 26 20:47:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R1lMQc057368 for ; Sun, 26 Jul 2009 20:47:23 -0500 X-ASG-Debug-ID: 1248659288-5d1901df0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 734581D4F44F for ; Sun, 26 Jul 2009 18:48:08 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id nrJF5V5Og0ltA8i8 for ; Sun, 26 Jul 2009 18:48:08 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id D4C01A704B7; Sun, 26 Jul 2009 20:48:07 -0500 (CDT) Message-ID: <4A6D075B.9060601@sandeen.net> Date: Sun, 26 Jul 2009 20:48:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: hank peng CC: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: How to solve "No space left" problem on my 32bit machine? Subject: Re: How to solve "No space left" problem on my 32bit machine? References: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> In-Reply-To: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248659288 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4517 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean hank peng wrote: > Hi, folks: > I have a 2.5T file system formatted with XFS, df tells me it still > have about 10G space available, but I can't create new files or > directory any more. Return message is "No space left on this device". > I searched solution for this problem through google, and found this: > http://oss.sgi.com/archives/xfs/2005-06/msg00347.html. I think it is a > known "No space left" problem. I wonder whether it can only > be solved on 64-bit machine? If on my 32-bit machine, what should I do? On very recent kernels you can use 64-bit inodes on 32-bit machines; you can try mounting with -o inode64 t allow this. Be warned though that some applications use 32-bit stat calls still, rather than 64-bit variants, and you may have some problems. You should file bugs against any such applications that you find... -eric From felixb@sgi.com Sun Jul 26 20:47:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R1lPHU057377 for ; Sun, 26 Jul 2009 20:47:25 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 3E8668F8040 for ; Sun, 26 Jul 2009 18:48:08 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 6BC6C700016A; Sun, 26 Jul 2009 20:48:07 -0500 (CDT) Cc: xfs@oss.sgi.com, sage@newdream.net Message-Id: From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090718221732.034903000@bombadil.infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 1/9] xfs: avoid memory allocation under m_peraglock in growfs code Date: Sun, 26 Jul 2009 20:48:07 -0500 References: <20090718221452.594956000@bombadil.infradead.org> <20090718221732.034903000@bombadil.infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 18, 2009, at 5:14 PM, Christoph Hellwig wrote: > Allocate the memory for the larger m_perag array before taking the > per-AG lock as the per-AG lock can be taken under the i_lock which > can be taken from reclaim context. > > Reported by the new reclaim context tracing in lockdep. > > Signed-off-by: Christoph Hellwig For the whole series: Reviewed-by: Felix Blyakher > > > Index: linux-2.6/fs/xfs/xfs_fsops.c > =================================================================== > --- linux-2.6.orig/fs/xfs/xfs_fsops.c 2009-07-10 13:05:24.798364926 > +0200 > +++ linux-2.6/fs/xfs/xfs_fsops.c 2009-07-10 13:16:00.827394975 +0200 > @@ -167,17 +167,25 @@ xfs_growfs_data_private( > new = nb - mp->m_sb.sb_dblocks; > oagcount = mp->m_sb.sb_agcount; > if (nagcount > oagcount) { > + void *new_perag, *old_perag; > + > xfs_filestream_flush(mp); > + > + new_perag = kmem_zalloc(sizeof(xfs_perag_t) * nagcount, > + KM_MAYFAIL); > + if (!new_perag) > + return XFS_ERROR(ENOMEM); > + > down_write(&mp->m_peraglock); > - mp->m_perag = kmem_realloc(mp->m_perag, > - sizeof(xfs_perag_t) * nagcount, > - sizeof(xfs_perag_t) * oagcount, > - KM_SLEEP); > - memset(&mp->m_perag[oagcount], 0, > - (nagcount - oagcount) * sizeof(xfs_perag_t)); > + memcpy(new_perag, mp->m_perag, sizeof(xfs_perag_t) * oagcount); > + old_perag = mp->m_perag; > + mp->m_perag = new_perag; > + > mp->m_flags |= XFS_MOUNT_32BITINODES; > nagimax = xfs_initialize_perag(mp, nagcount); > up_write(&mp->m_peraglock); > + > + kmem_free(old_perag); > } > tp = xfs_trans_alloc(mp, XFS_TRANS_GROWFS); > tp->t_flags |= XFS_TRANS_RESERVE; > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Sun Jul 26 21:45:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_54,J_CHICKENPOX_64,J_CHICKENPOX_92,URIBL_BLACK autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R2jYk2060610 for ; Sun, 26 Jul 2009 21:45:35 -0500 X-ASG-Debug-ID: 1248662779-51df00650000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 17023387CAC for ; Sun, 26 Jul 2009 19:46:19 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id wEPAwDr0X5mzkfWL for ; Sun, 26 Jul 2009 19:46:19 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 712DAA54762 for ; Sun, 26 Jul 2009 21:46:19 -0500 (CDT) Message-ID: <4A6D14FF.2000107@sandeen.net> Date: Sun, 26 Jul 2009 21:46:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] xfstests: random fallocate calls in fsx Subject: Re: [PATCH, RFC] xfstests: random fallocate calls in fsx References: <4A0B420E.3070908@sandeen.net> In-Reply-To: <4A0B420E.3070908@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248662780 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4521 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Seems to work for me. Any comments/suggestions? > > I can probably make it fall back to the xfs ioctl if fallocate > isn't supported, if strongly desired. ping^3? Does this look ok to folks? It'd be nice to get preallocation coverage in fsx beyond the simple "preallocate first" that's there now. Thanks, -Eric > diff --git a/aclocal.m4 b/aclocal.m4 > index 52f1c7d..120c1e0 100644 > --- a/aclocal.m4 > +++ b/aclocal.m4 > @@ -511,3 +511,14 @@ AC_DEFUN([AC_PACKAGE_NEED_XFSCTL_MACRO], > ]) > ]) > > +AC_DEFUN([AC_PACKAGE_WANT_FALLOCATE], > + [ AC_MSG_CHECKING([for fallocate]) > + AC_TRY_COMPILE([ > +#include > + ], [ > + fallocate(0, 0, 0, 0); > + ], have_fallocate=true > + AC_MSG_RESULT(true), > + AC_MSG_RESULT(false)) > + AC_SUBST(have_fallocate) > + ]) > diff --git a/configure.in b/configure.in > index 32a2496..61adac7 100644 > --- a/configure.in > +++ b/configure.in > @@ -62,6 +62,7 @@ in > AC_PACKAGE_WANT_GDBM > AC_PACKAGE_WANT_AIO > AC_PACKAGE_WANT_DMAPI > + AC_PACKAGE_WANT_FALLOCATE > ;; > esac > > diff --git a/include/builddefs.in b/include/builddefs.in > index 636f632..6a51b99 100644 > --- a/include/builddefs.in > +++ b/include/builddefs.in > @@ -56,6 +56,7 @@ RPM_VERSION = @rpm_version@ > ENABLE_SHARED = @enable_shared@ > HAVE_DB = @have_db@ > HAVE_AIO = @have_aio@ > +HAVE_FALLOCATE = @have_fallocate@ > HAVE_DMAPI = @have_dmapi@ > HAVE_ATTR_LIST = @have_attr_list@ > > diff --git a/ltp/Makefile b/ltp/Makefile > index bcdac84..3b81101 100644 > --- a/ltp/Makefile > +++ b/ltp/Makefile > @@ -25,6 +25,10 @@ LCFLAGS += -DAIO > LIBAIO = -laio -lpthread > endif > > +ifeq ($(HAVE_FALLOCATE), true) > +LCFLAGS += -DFALLOCATE > +endif > + > default: $(TARGETS) > > include $(BUILDRULES) > diff --git a/ltp/fsx.c b/ltp/fsx.c > index e4c528d..fe01f6e 100644 > --- a/ltp/fsx.c > +++ b/ltp/fsx.c > @@ -32,6 +32,9 @@ > #ifdef AIO > #include > #endif > +#ifdef FALLOCATE > +#include > +#endif > > #ifndef MAP_FILE > # define MAP_FILE 0 > @@ -65,6 +68,7 @@ int logcount = 0; /* total ops */ > #define OP_MAPREAD 5 > #define OP_MAPWRITE 6 > #define OP_SKIPPED 7 > +#define OP_FALLOCATE 8 > > #undef PAGE_SIZE > #define PAGE_SIZE getpagesize() > @@ -105,6 +109,11 @@ long numops = -1; /* -N flag */ > int randomoplen = 1; /* -O flag disables it */ > int seed = 1; /* -S flag */ > int mapped_writes = 1; /* -W flag disables */ > +#ifdef FALLOCATE > +int fallocate_calls = 1; /* -F flag disables */ > +#else > +int fallocate_calls = 0; /* -F flag disables */ > +#endif > int mapped_reads = 1; /* -R flag disables it */ > int fsxgoodfd = 0; > int o_direct; /* -Z */ > @@ -202,6 +211,7 @@ logdump(void) > { > int i, count, down; > struct log_entry *lp; > + char *falloc_type[3] = {"PAST_EOF", "EXTENDING", "INTERIOR"}; > > prt("LOG DUMP (%d total operations):\n", logcount); > if (logcount < LOGSIZE) { > @@ -265,6 +275,14 @@ logdump(void) > badoff < lp->args[!!down]) > prt("\t******WWWW"); > break; > + case OP_FALLOCATE: > + /* 0: offset 1: length 2: where alloced */ > + prt("FALLOCATE %s\tfrom 0x%x to 0x%x", > + falloc_type[lp->args[2]], lp->args[0], lp->args[0] + lp->args[1]); > + if (badoff >= lp->args[0] && > + badoff < lp->args[0] + lp->args[1]) > + prt("\t******FFFF"); > + break; > case OP_SKIPPED: > prt("SKIPPED (no operation)"); > break; > @@ -770,6 +788,64 @@ dotruncate(unsigned size) > } > } > > +#ifdef FALLOCATE > +/* fallocate is basically a no-op unless extending, then a lot like a truncate */ > +void > +dofallocate(unsigned offset, unsigned length) > +{ > + unsigned end_offset; > + int keep_size; > + > + if (length == 0) { > + if (!quiet && testcalls > simulatedopcount) > + prt("skipping zero length fallocate\n"); > + log4(OP_SKIPPED, OP_FALLOCATE, offset, length); > + return; > + } > + > + keep_size = random() % 2; > + > + end_offset = keep_size ? 0 : offset + length; > + > + if (end_offset > biggest) { > + biggest = end_offset; > + if (!quiet && testcalls > simulatedopcount) > + prt("fallocating to largest ever: 0x%x\n", end_offset); > + } > + > + /* > + * last arg: > + * 1: allocate past EOF > + * 2: extending prealloc > + * 3: interior prealloc > + */ > + log4(OP_FALLOCATE, offset, length, (end_offset > file_size) ? (keep_size ? 1 : 2) : 3); > + > + if (end_offset > file_size) { > + memset(good_buf + file_size, '\0', end_offset - file_size); > + file_size = end_offset; > + } > + > + if (testcalls <= simulatedopcount) > + return; > + > + if ((progressinterval && testcalls % progressinterval == 0) || > + (debug && (monitorstart == -1 || monitorend == -1 || > + end_offset <= monitorend))) > + prt("%lu falloc\tfrom 0x%x to 0x%x\n", testcalls, offset, length); > + if (fallocate(fd, keep_size ? FALLOC_FL_KEEP_SIZE : 0, (loff_t)offset, (loff_t)length) == -1) { > + prt("fallocate: %x to %x\n", offset, length); > + prterr("dofallocate: fallocate"); > + report_failure(161); > + } > +} > +#else > +void > +dofallocate(unsigned offset, unsigned length) > +{ > + return; > +} > +#endif > > void > writefileimage() > @@ -823,7 +899,7 @@ test(void) > unsigned long offset; > unsigned long size = maxoplen; > unsigned long rv = random(); > - unsigned long op = rv % (3 + !lite + mapped_writes); > + unsigned long op = rv % (3 + !lite + mapped_writes + fallocate_calls); > > /* turn off the map read if necessary */ > > @@ -845,22 +921,33 @@ test(void) > prt("%lu...\n", testcalls); > > /* > - * READ: op = 0 > - * WRITE: op = 1 > - * MAPREAD: op = 2 > - * TRUNCATE: op = 3 > - * MAPWRITE: op = 3 or 4 > + * lite !lite > + * READ: op = 0 0 > + * WRITE: op = 1 1 > + * MAPREAD: op = 2 2 > + * TRUNCATE: op = - 3 > + * MAPWRITE: op = 3 4 > + * FALLOCATE: op = - 5 > */ > if (lite ? 0 : op == 3 && (style & 1) == 0) /* vanilla truncate? */ > dotruncate(random() % maxfilelen); > else { > if (randomoplen) > size = random() % (maxoplen+1); > + > + /* truncate */ > if (lite ? 0 : op == 3) > dotruncate(size); > else { > offset = random(); > - if (op == 1 || op == (lite ? 3 : 4)) { > + /* fallocate */ > + if (op == 5) { > + offset %= maxfilelen; > + if (offset + size > maxfilelen) > + size = maxfilelen - offset; > + dofallocate(offset, size); > + /* write / mapwrite */ > + } else if (op == 1 || op == (lite ? 3 : 4)) { > offset %= maxfilelen; > if (offset + size > maxfilelen) > size = maxfilelen - offset; > @@ -868,6 +955,7 @@ test(void) > domapwrite(offset, size); > else > dowrite(offset, size); > + /* read / mapread */ > } else { > if (file_size) > offset %= file_size; > @@ -904,7 +992,7 @@ void > usage(void) > { > fprintf(stdout, "usage: %s", > - "fsx [-dnqxALOWZ] [-b opnum] [-c Prob] [-l flen] [-m start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S seed] fname\n\ > + "fsx [-dnqxAFLOWZ] [-b opnum] [-c Prob] [-l flen] [-m start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S seed] fname\n\ > -b opnum: beginning operation number (default 1)\n\ > -c P: 1 in P chance of file close+open at each op (default infinity)\n\ > -d: debug output for all operations\n\ > @@ -925,8 +1013,11 @@ usage(void) > #ifdef AIO > " -A: Use the AIO system calls\n" > #endif > -" -D startingop: debug output starting at specified operation\n\ > - -L: fsxLite - no file creations & no file size changes\n\ > +" -D startingop: debug output starting at specified operation\n" > +#ifdef FALLOCATE > +" -F: Do not use fallocate (preallocation) calls\n" > +#endif > +" -L: fsxLite - no file creations & no file size changes\n\ > -N numops: total # operations to do (default infinity)\n\ > -O: use oplen (see -o flag) for every op (default random)\n\ > -P: save .fsxlog and .fsxgood files in dirpath (default ./)\n\ > @@ -1092,7 +1183,7 @@ main(int argc, char **argv) > > setvbuf(stdout, (char *)0, _IOLBF, 0); /* line buffered stdout */ > > - while ((ch = getopt(argc, argv, "b:c:dfl:m:no:p:qr:s:t:w:xyAD:LN:OP:RS:WZ")) > + while ((ch = getopt(argc, argv, "b:c:dfl:m:no:p:qr:s:t:w:xyAD:FLN:OP:RS:WZ")) > != EOF) > switch (ch) { > case 'b': > @@ -1186,6 +1277,9 @@ main(int argc, char **argv) > if (debugstart < 1) > usage(); > break; > + case 'F': > + fallocate_calls = 0; > + break; > case 'L': > lite = 1; > break; > @@ -1331,6 +1425,16 @@ main(int argc, char **argv) > } else > check_trunc_hack(); > > +#ifdef FALLOCATE > + if (!lite && fallocate_calls) { > + if (fallocate(fd, 0, 0, 1) && errno == EOPNOTSUPP) { > + warn("main: filesystem does not support fallocate, disabling"); > + fallocate_calls = 0; > + } else > + ftruncate(fd, 0); > + } > +#endif > + > while (numops == -1 || numops--) > test(); > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Sun Jul 26 21:47:17 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R2lGtU060719 for ; Sun, 26 Jul 2009 21:47:17 -0500 X-ASG-Debug-ID: 1248663399-792201660000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E4FE9A0BC03 for ; Sun, 26 Jul 2009 19:56:39 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id TyHsSF4j311UvQWH for ; Sun, 26 Jul 2009 19:56:39 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id BC24EA54762; Sun, 26 Jul 2009 21:48:01 -0500 (CDT) Message-ID: <4A6D1565.3080307@sandeen.net> Date: Sun, 26 Jul 2009 21:48:05 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: Josef Bacik , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests 219: test fiemap Subject: Re: [PATCH] xfstests 219: test fiemap References: <4A5F82D8.8080709@sandeen.net> <20090718142339.GA20905@infradead.org> <4A61F92D.7090708@sandeen.net> <20090718221948.GA22347@infradead.org> In-Reply-To: <20090718221948.GA22347@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248663399 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4522 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Sat, Jul 18, 2009 at 11:32:45AM -0500, Eric Sandeen wrote: >> I suppose it'd be nice to have, though in this case the test program >> also generates all the random patterns and does the checking ... the >> fiemap calls are a relatively simple part of it ... >> >> Using xfs_io would be a bit like saying "xfs_io can already generate all >> the calls that fsx generates, why not use it instead of a special test >> program...." IMHO. > > fiemap support in xfs_io would still be useful. The big difference with > fsx and co is that the I/O path is quite performance critical even for > testcases, while for preallocation it's not. Ok, we can add that. Another patch. :) > But if it makes life a lot easier we can certainly drive these tests > from a C program. It's easier in the sense that it's done. It'd be nice to get some fiemap coverage & this is a quick route that seems to work. Thanks, -Eric From sandeen@sandeen.net Sun Jul 26 21:51:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R2pDPo061005 for ; Sun, 26 Jul 2009 21:51:13 -0500 X-ASG-Debug-ID: 1248663117-5785001f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 52EF6387CE4 for ; Sun, 26 Jul 2009 19:51:58 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 4mrDCbnm64DKV5hB for ; Sun, 26 Jul 2009 19:51:58 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id B1C83A9B0A7; Sun, 26 Jul 2009 21:51:57 -0500 (CDT) Message-ID: <4A6D1651.5010102@sandeen.net> Date: Sun, 26 Jul 2009 21:52:01 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Olaf Weber CC: xfs mailing list , Felix Blyakher X-ASG-Orig-Subj: [PATCH V4] reduce bmv_count in xfs_vn_fiemap Subject: [PATCH V4] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> <4A5F3DBA.9040005@sandeen.net> <4A5F7B7B.6020903@sandeen.net> In-Reply-To: <4A5F7B7B.6020903@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248663118 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4523 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused the full bmv_count's worth of getbmapx structures to get allocated; telling it to do MAXEXTNUM was a bit insane, resulting in ENOMEM every time. Chop it down to something reasonable, the number of slots in the caller's input buffer. If this is too large the caller may get ENOMEM but the reason should not be a mystery, and they can try again with something smaller. We add 1 to the value because in the normal getbmap world, bmv_count includes the header and xfs_getbmap does: nex = bmv->bmv_count - 1; if (nex <= 0) return XFS_ERROR(EINVAL); Signed-off-by: Eric Sandeen --- V2: set it to the fiemap info's fi_extents_max V3: bump up by one to accomodate expected bmv header in core V4: comments diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb..8070b34 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -680,8 +680,8 @@ xfs_vn_fiemap( else bm.bmv_length = BTOBB(length); - /* our formatter will tell xfs_getbmap when to stop. */ - bm.bmv_count = MAXEXTNUM; + /* We add one because in getbmap world count includes the header */ + bm.bmv_count = fieinfo->fi_extents_max + 1; bm.bmv_iflags = BMV_IF_PREALLOC; if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) bm.bmv_iflags |= BMV_IF_ATTRFORK; From lmcilroy@redhat.com Mon Jul 27 00:16:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R5Gpl3072019 for ; Mon, 27 Jul 2009 00:16:51 -0500 X-ASG-Debug-ID: 1248672373-1d9a02fe0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CEF8C10C4403; Sun, 26 Jul 2009 22:26:13 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id tdgo9DiF8yADBmdF; Sun, 26 Jul 2009 22:26:13 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n6R5HXMH027262; Mon, 27 Jul 2009 01:17:33 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6R5HWjA011368; Mon, 27 Jul 2009 01:17:32 -0400 Date: Mon, 27 Jul 2009 01:17:32 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Eddy Zhao Cc: xfs@oss.sgi.com, felixb@sgi.com Message-ID: <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1248672374 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4532 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Eddy Zhao" wrote: > > > > I don't recommend you pull the usb disk out while the filesystem is > still > > mounted (if you can avoid it). > > > > Doing that to emulate power loss scenario our device might experience. > > > > > I would start by looking through the change history for > fs/xfs/xfs_log_recover.c > > and paying particular attention to anything to do with inode > transactions. > > > > Not quite familiar with XFS code :( We all start somewhere! > > > > > Or try some intermediate kernels and see if you can narrow the fix > down to a set of > > changes. > > > > I'll try to bisect (It will take some time...) > > > > > # mount /dev/sda1 /mnt/ > > UDF-fs: No VRS found > > XFS mounting filesystem sda1 > > Starting XFS recovery on filesystem: sda1 (dev: sda1) > > Filesystem "sda1": xfs_inode_recover: Bad inode magic number, dino > ptr > > = 0xc8266700, dino bp = 0xc8281b40, ino = 0 > > Because XFS log is OK to 2.6.28 system, which means the log is correct > in itself. > Would it be easy for you to debug the problem by compare 2.6.10 log > recovery code fail point and the corresponding 2.6.28 log record? Easy? Not exactly. Diff'ing 2.6.10 version of fs/xfs/xfs_log_recover.c with mainline shows over 300 differences. If you really want to be able to replay the log on a different system it really has to be running the same version of XFS for there to be any chance of it working properly. It should also be the same architecture too - is it possible you have a 32 bit kernel on the 2.6.10 system and a 64 bit kernel on the 2.6.28 system? If so then this fix might help http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6d192a9b82212abf1e0e89da6e3a952afba7e4d6 I think it went into 2.6.18. > > Thanks > Eddy > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From news@studiokappa.it Mon Jul 27 01:01:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R61ci4075380 for ; Mon, 27 Jul 2009 01:01:39 -0500 X-ASG-Debug-ID: 1248674540-590b02e10000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtpsmart3.aruba.it (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id C79F713FDD3B for ; Sun, 26 Jul 2009 23:02:21 -0700 (PDT) Received: from smtpsmart3.aruba.it (smtpweb103.aruba.it [62.149.158.103]) by cuda.sgi.com with SMTP id P6OY0GKTHsYBqn8O for ; Sun, 26 Jul 2009 23:02:21 -0700 (PDT) Received: (qmail 14641 invoked by uid 89); 27 Jul 2009 06:02:18 -0000 Received: by simscan 1.2.0 ppid: 14464, pid: 14466, t: 2.5515s scanners: clamav: 0.88.4/m:40/d:1945 spam: 3.1.4 Received: from unknown (HELO webxc08s07.ad.aruba.it) (62.149.141.99) by smtpsmart3.fe.aruba.it with SMTP; 27 Jul 2009 06:02:15 -0000 Received: (qmail 2766 invoked by uid 18002703); 27 Jul 2009 06:02:16 -0000 To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Sviluppo di Comunita' a Vercelli Subject: Sviluppo di Comunita' a Vercelli Date: Mon, 27 Jul 2009 08:02:16 +0200 From: news@studiokappa.it Message-ID: <04767b64f3f1c771e150d4677df2770e@www.studiokappa.it> X-Priority: 3 X-Mailer: PHPMailer [version 1.73] X-Mailer: phplist v2.10.4 X-MessageID: 103 X-ListMember: linux-xfs@oss.sgi.com Precedence: bulk Errors-To: news@studiokappa.it MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_04767b64f3f1c771e150d4677df2770e" X-Barracuda-Connect: smtpweb103.aruba.it[62.149.158.103] X-Barracuda-Start-Time: 1248674541 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4885 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA074b, HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4535 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC0_SA074b Custom Rule SA074b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --b1_04767b64f3f1c771e150d4677df2770e Content-Type: text/plain; charset = "UTF-8" Content-Transfer-Encoding: 8bit Caro amico, sperando di far cosa gradita, le segnalo un articolo che è stato publbicato relativamente al lavoro di Progettazione Partecipata realizzato a Vercelli. Può trovare ulteriori informazioni anche all'indirizzo: http://www.studiokappa.it Sul sito è anche presente una rassegna stampa di alcune delle attività di consulenza e di formazione realizzate dallo studio in questi anni. -- Per cancellarti da questa lista clicca su http://www.studiokappa.it/lists/?p=unsubscribe&uid=f95d79661173a656ad12f819a35cc5d5 Per aggiornare le tue preferenze clicca su http://www.studiokappa.it/lists/?p=preferences&uid=f95d79661173a656ad12f819a35cc5d5 -- Powered by PHPlist, www.phplist.com -- --b1_04767b64f3f1c771e150d4677df2770e Content-Type: text/html; charset = "UTF-8" Content-Transfer-Encoding: 8bit prova template kappa



Caro amico,

sperando di far cosa gradita, le segnalo un articolo che è stato publbicato relativamente al lavoro di Progettazione Partecipata realizzato a Vercelli.


Può trovare ulteriori informazioni anche all'indirizzo: www.studiokappa.it

Sul sito è anche presente una rassegna stampa di alcune delle attività di consulenza e di formazione realizzate dallo studio in questi anni.

 

Studio Kappa

Segreteria

cell. +39 347.867.24.67

info@studiokappa.it

www.studiokappa.it

 

© Studio Kappa - Via Duca d'Aosta, 14 - 14100 Asti - Tel. 347.8672467
info@studiokappa.it - Part. IVA 01411460056 - Cod. Fiscale 92049850057



--
Per cancellarti da questa lista clicca su questo link
Per aggiornare le tue preferenze clicca su questo link
--b1_04767b64f3f1c771e150d4677df2770e-- From pengxihan@gmail.com Mon Jul 27 01:47:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R6l32m077809 for ; Mon, 27 Jul 2009 01:47:03 -0500 X-ASG-Debug-ID: 1248677785-48c703340000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0CCD110C45BB for ; Sun, 26 Jul 2009 23:56:25 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id 0cRzIY17myUTyI5y for ; Sun, 26 Jul 2009 23:56:25 -0700 (PDT) Received: by bwz10 with SMTP id 10so2289912bwz.20 for ; Sun, 26 Jul 2009 23:47:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=OMqm4kQoUIOMe9071nhFaW1CrJv4IizwKm0w+3Buu8U=; b=G47JVfg0q7VU/wjDokX3Z/7cTfSeIdcZIcUoPfLGZwXpdcQPTZAeb1M5zZLX8/s0rC ABrftr6Dfn6rai91QwWhy0kRbl+2AFPmrrl3VpzjM589tQgzdDLyrAnrFkVMGUVY05q4 uysJcaCMrLNGiXGoT2FOqfsdqZov1DjkhWbbw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=QQLoX0mSMrjPA0nCMjvsV9b/8lglpbprBN5r6Qe7gtSVlbX6LPe4u+E/kr7CCoLrRn miuNrTE09k0mL7mmVUShMDtWj/GtfGqb2HlDrmGIjpe0+GoYcQnVrp14qTc3jPUB/qCR O66g3fQ1kympSGCeX+OOwv/yhKlGnd1Bi8YMM= MIME-Version: 1.0 Received: by 10.103.134.17 with SMTP id l17mr3036223mun.125.1248677266094; Sun, 26 Jul 2009 23:47:46 -0700 (PDT) In-Reply-To: <4A6D075B.9060601@sandeen.net> References: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> <4A6D075B.9060601@sandeen.net> Date: Mon, 27 Jul 2009 14:47:46 +0800 Message-ID: <389deec70907262347g1ca3637fn469596ec1e05148@mail.gmail.com> X-ASG-Orig-Subj: Re: How to solve "No space left" problem on my 32bit machine? Subject: Re: How to solve "No space left" problem on my 32bit machine? From: hank peng To: Eric Sandeen Cc: linux-xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1248677787 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4538 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/7/27 Eric Sandeen : > hank peng wrote: >> Hi, folks: >> I have a 2.5T file system formatted with XFS, df tells me it still >> have about 10G space available, but I can't create new files or >> directory any more. Return message is "No space left on this device". >> I searched solution for this problem through google, and found this: >> http://oss.sgi.com/archives/xfs/2005-06/msg00347.html. I think it is a >> known "No space left" problem. I wonder whether it can only >> be solved on 64-bit machine? If on my 32-bit machine, what should I do? > > On very recent kernels you can use 64-bit inodes on 32-bit machines; you > can try mounting with -o inode64 t allow this. > I tried -o inode64 option, but kernel gives me error message: XFS: inode64 option not allowed on this system I doubt this option can't be used on 32-bit machine. > Be warned though that some applications use 32-bit stat calls still, > rather than 64-bit variants, and you may have some problems. =C2=A0You sh= ould > file bugs against any such applications that you find... > > -eric > --=20 The simplest is not all best but the best is surely the simplest! From olaf@sgi.com Mon Jul 27 02:55:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6R7tC1S081156 for ; Mon, 27 Jul 2009 02:55:13 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6R7tudv197010; Mon, 27 Jul 2009 09:55:56 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6R7tupA196969; Mon, 27 Jul 2009 09:55:56 +0200 (MEST) To: Eric Sandeen Cc: xfs mailing list , Felix Blyakher Subject: Re: [PATCH V4] reduce bmv_count in xfs_vn_fiemap References: <4A5E2F01.7030107@sandeen.net> <4A5F3DBA.9040005@sandeen.net> <4A5F7B7B.6020903@sandeen.net> <4A6D1651.5010102@sandeen.net> From: Olaf Weber Date: Mon, 27 Jul 2009 09:55:56 +0200 In-Reply-To: <4A6D1651.5010102@sandeen.net> (Eric Sandeen's message of "Sun, 26 Jul 2009 21:52:01 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: > commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused > the full bmv_count's worth of getbmapx structures to get > allocated; telling it to do MAXEXTNUM was a bit insane, > resulting in ENOMEM every time. > Chop it down to something reasonable, the number of slots > in the caller's input buffer. If this is too large the > caller may get ENOMEM but the reason should not be a > mystery, and they can try again with something smaller. > We add 1 to the value because in the normal getbmap > world, bmv_count includes the header and xfs_getbmap does: > nex = bmv->bmv_count - 1; > if (nex <= 0) > return XFS_ERROR(EINVAL); > Signed-off-by: Eric Sandeen Reviewed-By: Olaf Weber Thanks, Olaf -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From gabriel@oxeva.fr Mon Jul 27 06:40:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_32 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RBeQC5094166 for ; Mon, 27 Jul 2009 06:40:27 -0500 X-ASG-Debug-ID: 1248694869-7ee601990000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.reagi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C5CE5388972 for ; Mon, 27 Jul 2009 04:41:09 -0700 (PDT) Received: from mail.reagi.com (mail.reagi.com [195.60.188.80]) by cuda.sgi.com with ESMTP id cV4HC4U9yUkh5jx8 for ; Mon, 27 Jul 2009 04:41:09 -0700 (PDT) Received: (qmail 3129 invoked by uid 89); 27 Jul 2009 11:41:08 -0000 Received: by simscan 1.4.0 ppid: 3122, pid: 3126, t: 0.6448s scanners: regex: 1.4.0 clamav: 0.95.1/m:/d:9222 Received: from unknown (HELO ?10.0.0.125?) (gabriel@oxeva.fr@86.65.110.229) by 0 with ESMTPA; 27 Jul 2009 11:41:08 -0000 Message-ID: <4A6D9221.5080603@oxeva.fr> Date: Mon, 27 Jul 2009 13:40:17 +0200 From: Gabriel Barazer Organization: Oxeva User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Eric Sandeen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) Subject: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) References: <000c01ca0ae0$e85420a0$b8fc61e0$@fr> <4A67E2F5.2030400@sandeen.net> In-Reply-To: <4A67E2F5.2030400@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.reagi.com[195.60.188.80] X-Barracuda-Start-Time: 1248694870 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4557 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Gabriel Barazer wrote: > >> Hi, >> >> I recently put a NFS file server into production, with mostly XFS volumes on LVM. The server was quite low on traffic until this morning and one of the filesystems crashed twice since this morning with the following backtrace: >> >> Filesystem "dm-24": XFS internal error xfs_trans_cancel at line 1164 of file fs/xfs/xfs_trans.c. Caller 0xffffffff811b09a7 >> Pid: 2053, comm: nfsd Not tainted 2.6.28.9-filer #1 >> Call Trace: >> [] xfs_rename+0x4a1/0x4f6 >> [] xfs_trans_cancel+0x56/0xed >> [] xfs_rename+0x4a1/0x4f6 >> > ... > > >> xfs_force_shutdown(dm-24,0x8) called from line 1165 of file fs/xfs/xfs_trans.c. Return address = 0xffffffff811b181f >> Filesystem "dm-24": Corruption of in-memory data detected. Shutting down filesystem: dm-24 >> >> The two crashed are related to the same function: xfs_rename. >> > > Can you do objdump -d xfs.ko | grep "xfs_rename\|xfs_trans_cancel" and > maybe we can see which call to xfs_trans_cancel in xfs_rename this was. > > The problem relates to canceling a dirty transaction on an error path. > Hi, sorry for the late reply I don't have any xfs.ko as my kernel is compiled without CONFIG_MODULES. However I objdump'd the vmlinux uncompressed kernel, and here are the results: ffffffff8116dcb8: e8 f3 3a 04 00 callq ffffffff811b17b0 ffffffff8116f61b: e8 90 21 04 00 callq ffffffff811b17b0 ffffffff8116f68f: e8 1c 21 04 00 callq ffffffff811b17b0 ffffffff8116fbaa: e8 01 1c 04 00 callq ffffffff811b17b0 ffffffff8116fbee: e8 bd 1b 04 00 callq ffffffff811b17b0 ffffffff8117073c: e8 6f 10 04 00 callq ffffffff811b17b0 ffffffff8117261b: e8 90 f1 03 00 callq ffffffff811b17b0 ffffffff81174dde: e8 cd c9 03 00 callq ffffffff811b17b0 ffffffff81175303: e8 a8 c4 03 00 callq ffffffff811b17b0 ffffffff8117c08a: e8 21 57 03 00 callq ffffffff811b17b0 ffffffff8117c146: e8 65 56 03 00 callq ffffffff811b17b0 ffffffff8117cf06: e8 a5 48 03 00 callq ffffffff811b17b0 ffffffff8117d000: e8 ab 47 03 00 callq ffffffff811b17b0 ffffffff8117dd83: e8 28 3a 03 00 callq ffffffff811b17b0 ffffffff8117dfa3: e8 08 38 03 00 callq ffffffff811b17b0 ffffffff811845fa: e8 b1 d1 02 00 callq ffffffff811b17b0 ffffffff81184929: e8 82 ce 02 00 callq ffffffff811b17b0 ffffffff81199b89: e9 22 7c 01 00 jmpq ffffffff811b17b0 ffffffff8119aa30: e8 7b 6d 01 00 callq ffffffff811b17b0 ffffffff811a46d1: e8 da d0 00 00 callq ffffffff811b17b0 ffffffff811a4813: e8 98 cf 00 00 callq ffffffff811b17b0 ffffffff811a4929: e8 82 ce 00 00 callq ffffffff811b17b0 ffffffff811a4b8a: e8 21 cc 00 00 callq ffffffff811b17b0 ffffffff811a4e8b: e8 20 c9 00 00 callq ffffffff811b17b0 ffffffff811a509e: e8 0d c7 00 00 callq ffffffff811b17b0 ffffffff811a6bf7: e8 b4 ab 00 00 callq ffffffff811b17b0 ffffffff811a6c86: e8 25 ab 00 00 callq ffffffff811b17b0 ffffffff811aa18a: e8 21 76 00 00 callq ffffffff811b17b0 ffffffff811abe18: e8 93 59 00 00 callq ffffffff811b17b0 ffffffff811aeb5c: e8 4f 2c 00 00 callq ffffffff811b17b0 ffffffff811aecf9: e8 b2 2a 00 00 callq ffffffff811b17b0 ffffffff811b04ca : ffffffff811b04e6: 74 19 je ffffffff811b0501 ffffffff811b04ed: 74 08 je ffffffff811b04f7 ffffffff811b04ff: 75 dd jne ffffffff811b04de ffffffff811b0506 : ffffffff811b0563: 74 21 je ffffffff811b0586 ffffffff811b0568: 75 1c jne ffffffff811b0586 ffffffff811b056f: 74 15 je ffffffff811b0586 ffffffff811b0580: 0f 87 38 04 00 00 ja ffffffff811b09be ffffffff811b0628: 75 23 jne ffffffff811b064d ffffffff811b064f: 74 04 je ffffffff811b0655 ffffffff811b0653: eb 18 jmp ffffffff811b066d ffffffff811b0666: 74 13 je ffffffff811b067b ffffffff811b0676: e9 27 03 00 00 jmpq ffffffff811b09a2 ffffffff811b0695: 74 39 je ffffffff811b06d0 ffffffff811b06a6: 74 28 je ffffffff811b06d0 ffffffff811b06b2: e8 13 fe ff ff callq ffffffff811b04ca ffffffff811b06c1: e8 ea 10 00 00 callq ffffffff811b17b0 ffffffff811b06cb: e9 ee 02 00 00 jmpq ffffffff811b09be ffffffff811b06ef: 74 1a je ffffffff811b070b ffffffff811b0729: 74 37 je ffffffff811b0762 ffffffff811b0757: 0f 85 ab 00 00 00 jne ffffffff811b0808 ffffffff811b075d: e9 88 00 00 00 jmpq ffffffff811b07ea ffffffff811b0779: 0f 85 51 02 00 00 jne ffffffff811b09d0 ffffffff811b07a7: 0f 84 23 02 00 00 je ffffffff811b09d0 ffffffff811b07af: 0f 85 2e 02 00 00 jne ffffffff811b09e3 ffffffff811b07c7: 0f 84 a6 00 00 00 je ffffffff811b0873 ffffffff811b07d2: 0f 84 9b 00 00 00 je ffffffff811b0873 ffffffff811b07e5: e9 81 00 00 00 jmpq ffffffff811b086b ffffffff811b07f4: 0f 84 dd 01 00 00 je ffffffff811b09d7 ffffffff811b0802: 0f 87 cf 01 00 00 ja ffffffff811b09d7 ffffffff811b082f: 0f 85 ae 01 00 00 jne ffffffff811b09e3 ffffffff811b0851: 0f 85 8c 01 00 00 jne ffffffff811b09e3 ffffffff811b085c: 74 15 je ffffffff811b0873 ffffffff811b086d: 0f 85 70 01 00 00 jne ffffffff811b09e3 ffffffff811b087d: 74 35 je ffffffff811b08b4 ffffffff811b0884: 74 2e je ffffffff811b08b4 ffffffff811b08ae: 0f 85 2f 01 00 00 jne ffffffff811b09e3 ffffffff811b08c6: 74 21 je ffffffff811b08e9 ffffffff811b08cb: 75 07 jne ffffffff811b08d4 ffffffff811b08d2: 74 15 je ffffffff811b08e9 ffffffff811b08e3: 0f 85 fa 00 00 00 jne ffffffff811b09e3 ffffffff811b0910: 0f 85 cd 00 00 00 jne ffffffff811b09e3 ffffffff811b0941: 74 18 je ffffffff811b095b ffffffff811b0966: 74 09 je ffffffff811b0971 ffffffff811b098a: 74 21 je ffffffff811b09ad ffffffff811b09a2: e8 09 0e 00 00 callq ffffffff811b17b0 ffffffff811b09ab: eb 11 jmp ffffffff811b09be ffffffff811b09d5: eb 11 jmp ffffffff811b09e8 ffffffff811b09e1: eb 05 jmp ffffffff811b09e8 ffffffff811b09f8: eb a3 jmp ffffffff811b099d ffffffff811b17b0 : ffffffff811b17c1: 74 0c je ffffffff811b17cf ffffffff811b17d3: 74 4a je ffffffff811b181f ffffffff811b17de: 75 3f jne ffffffff811b181f ffffffff811b1839: 74 06 je ffffffff811b1841 ffffffff811b1848: 74 12 je ffffffff811b185c ffffffff811b3bb7: e8 f4 db ff ff callq ffffffff811b17b0 ffffffff811b3c32: e8 79 db ff ff callq ffffffff811b17b0 ffffffff811b4753: e8 58 d0 ff ff callq ffffffff811b17b0 ffffffff811b53e9: e8 c2 c3 ff ff callq ffffffff811b17b0 ffffffff811b5497: e8 14 c3 ff ff callq ffffffff811b17b0 ffffffff811b5baa: e8 01 bc ff ff callq ffffffff811b17b0 ffffffff811b5f40: e8 6b b8 ff ff callq ffffffff811b17b0 ffffffff811b6000: e8 ab b7 ff ff callq ffffffff811b17b0 ffffffff811b6458: e8 53 b3 ff ff callq ffffffff811b17b0 ffffffff811b6730: e8 7b b0 ff ff callq ffffffff811b17b0 ffffffff811b6a58: e8 53 ad ff ff callq ffffffff811b17b0 ffffffff811b6c5c: e8 4f ab ff ff callq ffffffff811b17b0 ffffffff811b6c95: e8 16 ab ff ff callq ffffffff811b17b0 ffffffff811b6cf7: e8 b4 aa ff ff callq ffffffff811b17b0 ffffffff811b6d83: e8 28 aa ff ff callq ffffffff811b17b0 ffffffff811b706b: e8 40 a7 ff ff callq ffffffff811b17b0 ffffffff811b715b: e8 50 a6 ff ff callq ffffffff811b17b0 ffffffff811b7305: e8 a6 a4 ff ff callq ffffffff811b17b0 ffffffff811b7372: e8 39 a4 ff ff callq ffffffff811b17b0 ffffffff811b7407: e8 a4 a3 ff ff callq ffffffff811b17b0 ffffffff811b74e5: e8 c6 a2 ff ff callq ffffffff811b17b0 ffffffff811b77a9: e8 02 a0 ff ff callq ffffffff811b17b0 ffffffff811b7f94: e8 17 98 ff ff callq ffffffff811b17b0 ffffffff811b83e8: e8 c3 93 ff ff callq ffffffff811b17b0 ffffffff811b866b: e8 40 91 ff ff callq ffffffff811b17b0 ffffffff811b8838: e8 73 8f ff ff callq ffffffff811b17b0 ffffffff811b8bb0: e8 fb 8b ff ff callq ffffffff811b17b0 ffffffff811b8d2c: e8 7f 8a ff ff callq ffffffff811b17b0 ffffffff811b8f17: e8 94 88 ff ff callq ffffffff811b17b0 ffffffff811b9463: e8 48 83 ff ff callq ffffffff811b17b0 ffffffff811b950f: e8 9c 82 ff ff callq ffffffff811b17b0 ffffffff811b9677: e8 34 81 ff ff callq ffffffff811b17b0 ffffffff811be2af: e8 fc 34 ff ff callq ffffffff811b17b0 ffffffff811bfacc: e8 35 0a ff ff callq ffffffff811b0506 Gabriel > -Eric > > >> I _really_ cannot upgrade to 2.6.29 or later because of the "reconnect_path: npd != pd" bug and the maybe related radix-tree bug ( http://bugzilla.kernel.org/show_bug.cgi?id=13375 ) affecting all kernel version afeter 2.6.28. >> >> Unmounting then remounting the filesystem allow to access the mountpoint again without any error message or apparent file corruption. >> This filesystem is used by ~30 NFS clients and contains about 5M files (100GB). >> >> Before using the volume over NFS, there was only local activity (rsync syncing) and we didn't get any error. >> >> I expect to see this crash again in a few hours except if the volume is really corrupted. Does a full filesystem copy to a newly created volume would have a chance to solve the problem? >> >> Thanks, >> >> Gabriel >> >> From sandeen@sandeen.net Mon Jul 27 08:40:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RDe1x5101867 for ; Mon, 27 Jul 2009 08:40:02 -0500 X-ASG-Debug-ID: 1248702046-021b01990000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 855FD14029A9 for ; Mon, 27 Jul 2009 06:40:46 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id r7Wd1FTuqnKU4G9P for ; Mon, 27 Jul 2009 06:40:46 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 9E624A7CE6A; Mon, 27 Jul 2009 08:40:45 -0500 (CDT) Message-ID: <4A6DAE5D.6060704@sandeen.net> Date: Mon, 27 Jul 2009 08:40:45 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: hank peng CC: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: How to solve "No space left" problem on my 32bit machine? Subject: Re: How to solve "No space left" problem on my 32bit machine? References: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> <4A6D075B.9060601@sandeen.net> <389deec70907262347g1ca3637fn469596ec1e05148@mail.gmail.com> In-Reply-To: <389deec70907262347g1ca3637fn469596ec1e05148@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248702047 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4565 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean hank peng wrote: > 2009/7/27 Eric Sandeen : >> hank peng wrote: >>> Hi, folks: >>> I have a 2.5T file system formatted with XFS, df tells me it still >>> have about 10G space available, but I can't create new files or >>> directory any more. Return message is "No space left on this device". >>> I searched solution for this problem through google, and found this: >>> http://oss.sgi.com/archives/xfs/2005-06/msg00347.html. I think it is a >>> known "No space left" problem. I wonder whether it can only >>> be solved on 64-bit machine? If on my 32-bit machine, what should I do? >> On very recent kernels you can use 64-bit inodes on 32-bit machines; you >> can try mounting with -o inode64 t allow this. >> > I tried -o inode64 option, but kernel gives me error message: > XFS: inode64 option not allowed on this system > I doubt this option can't be used on 32-bit machine. That's why I said you need a very recent kernel, it was added relatively recently: commit 6c31b93a14a453c8756ffd228e24910ffdf30c5d Author: Christoph Hellwig Date: Fri Nov 28 14:23:32 2008 +1100 [XFS] allow inode64 mount option on 32 bit systems I believe this went into 2.6.29. -Eric From Christian.Fischer@easterngraphics.com Mon Jul 27 09:57:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6REvWS1107345 for ; Mon, 27 Jul 2009 09:57:33 -0500 X-ASG-Debug-ID: 1248707216-7e7b03140000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from intranet.easterngraphics.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4DA6C1214784 for ; Mon, 27 Jul 2009 08:06:57 -0700 (PDT) Received: from intranet.easterngraphics.com (intranet.easterngraphics.com [62.80.28.49]) by cuda.sgi.com with ESMTP id EB8G6x4uk3aw3IDX for ; Mon, 27 Jul 2009 08:06:57 -0700 (PDT) Received: from localhost (unknown [127.0.0.1]) by intranet.easterngraphics.com (Postfix) with ESMTP id 6B9601802D79E; Mon, 27 Jul 2009 14:58:16 +0000 (UTC) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at easterngraphics.com Received: from intranet.easterngraphics.com ([127.0.0.1]) by localhost (intranet.easterngraphics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Bdm47-qNClTS; Mon, 27 Jul 2009 16:58:15 +0200 (CEST) Received: from iwan.easterngraphics.com (gw02dmz.easterngraphics.com [62.80.28.54]) (Authenticated sender: fischer) by intranet.easterngraphics.com (Postfix) with ESMTPSA id 7660A1802D79D; Mon, 27 Jul 2009 16:58:15 +0200 (CEST) From: Christian Fischer Organization: Eastern Graphics GmbH To: xfs@oss.sgi.com X-ASG-Orig-Subj: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Subject: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Date: Mon, 27 Jul 2009 16:57:54 +0200 User-Agent: KMail/1.9.9 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907271657.55226.Christian.Fischer@easterngraphics.com> X-Barracuda-Connect: intranet.easterngraphics.com[62.80.28.49] X-Barracuda-Start-Time: 1248707218 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4572 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Hello, we had the 4th xfs crash during the last 4 month on last friday. Maybe someone of you can give me some hints to get out what happens here. We have various XEN guests (gentoo amd64) running on two HP ProLiant DL360, both connected to a SUN Storedge 3300 SCSI storage. Except the boot partitions all disk space comes from the SUN storage via xen vscsi. We got xfs_suspend of the data partition one time, probably lost of the root partition one time (no logfile entry), and xfs_errors like this one two times. sde1 is a data partition of 1.4TB. We have problems on the fileserver only, all others runs well. The mailserver runs well, file- and mailserver have the highest disk load. All kernel versions (gentoo 2.6.18-xen-r12) and configurations are equal. Thanks for any help Christian Jul 24 11:33:30 ganges Access to block zero: fs: inode: 2550198361 start_block : 0 start_off : 0 blkcnt : 0 extent-state : 0 Jul 24 11:33:30 ganges ----------- [cut here ] --------- [please bite here ] --------- Jul 24 11:33:30 ganges Kernel BUG at ...sr/src/linux-2.6.18-xen-r12/fs/xfs/support/debug.c:57 Jul 24 11:33:30 ganges invalid opcode: 0000 [1] SMP Jul 24 11:33:30 ganges CPU 0 Jul 24 11:33:30 ganges Modules linked in: Jul 24 11:33:30 ganges Pid: 15340, comm: smbd Not tainted 2.6.18-xen-r12 #8 Jul 24 11:33:30 ganges RIP: e030:[] [] cmn_err+0xdc/0x120 Jul 24 11:33:30 ganges RSP: e02b:ffff8800a4b2d5c8 EFLAGS: 00010246 Jul 24 11:33:30 ganges RAX: 0000000000000000 RBX: ffffffff8051cbf0 RCX: 0000000000000001 Jul 24 11:33:30 ganges RDX: ffffffffff5fd000 RSI: 0000000000000000 RDI: ffffffff805826ac Jul 24 11:33:30 ganges RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000080 Jul 24 11:33:30 ganges R10: ffffffff8062c4c0 R11: ffffffff80213660 R12: 0000000000000000 Jul 24 11:33:30 ganges R13: ffff8800f6a03bc0 R14: 0000000000000005 R15: 0000000000000000 Jul 24 11:33:30 ganges FS: 00002ac859d276a0(0000) GS:ffffffff805e7000(0000) knlGS:0000000000000000 Jul 24 11:33:30 ganges CS: e033 DS: 0000 ES: 0000 Jul 24 11:33:30 ganges Process smbd (pid: 15340, threadinfo ffff8800a4b2c000, task ffff880011892850) Jul 24 11:33:30 ganges Stack: 0000003000000030 ffff8800a4b2d6c8 ffff8800a4b2d5e8 000000000000b5a0 Jul 24 11:33:30 ganges 00000002000001bc ffffffff80367438 ffff8800ff7ecfc0 000000009800f059 Jul 24 11:33:30 ganges 0000000000000000 0000000000000000 ffff8800e6d8ca30 ffff8800a4b2d8b8 Jul 24 11:33:30 ganges Call Trace: Jul 24 11:33:30 ganges [] xfs_iext_bno_to_ext+0x138/0x160 Jul 24 11:33:30 ganges [] xfs_iext_get_ext+0x43/0x70 Jul 24 11:33:30 ganges [] xfs_bmap_search_multi_extents+0xad/0x120 Jul 24 11:33:30 ganges [] xfs_bmap_search_extents+0xce/0xf0 Jul 24 11:33:30 ganges [] xfs_bmapi+0x2f1/0x1cf0 Jul 24 11:33:30 ganges [] error_exit+0x0/0x71 Jul 24 11:33:30 ganges [] xfs_iomap_write_delay+0x30e/0x490 Jul 24 11:33:30 ganges [] __switch_to+0x3e6/0x560 Jul 24 11:33:30 ganges [] xfs_iomap+0x228/0x570 Jul 24 11:33:30 ganges [] __xfs_get_blocks+0x7b/0x200 Jul 24 11:33:30 ganges [] alloc_page_buffers+0xa9/0x110 Jul 24 11:33:30 ganges [] __block_prepare_write+0x1d4/0x490 Jul 24 11:33:30 ganges [] xfs_get_blocks+0x0/0x10 Jul 24 11:33:30 ganges [] block_prepare_write+0x1a/0x30 Jul 24 11:33:30 ganges [] generic_file_buffered_write+0x288/0x680 Jul 24 11:33:30 ganges [] tcp_rcv_established+0x49e/0x7a0 Jul 24 11:33:30 ganges [] memcpy_toiovec+0x38/0x70 Jul 24 11:33:30 ganges [] current_fs_time+0x3b/0x40 Jul 24 11:33:30 ganges [] __up_write+0x21/0x120 Jul 24 11:33:30 ganges [] xfs_write+0x7a3/0xb40 Jul 24 11:33:30 ganges [] tcp_recvmsg+0x76b/0x8a0 Jul 24 11:33:30 ganges [] do_sock_read+0xab/0xc0 Jul 24 11:33:30 ganges [] sock_aio_read+0x4f/0x60 Jul 24 11:33:30 ganges [] xfs_file_aio_write+0x6f/0x80 Jul 24 11:33:30 ganges [] do_sync_write+0xc7/0x110 Jul 24 11:33:30 ganges [] fasync_helper+0x63/0x150 Jul 24 11:33:30 ganges [] __posix_lock_file_conf+0x3d9/0x430 Jul 24 11:33:30 ganges [] autoremove_wake_function+0x0/0x30 Jul 24 11:33:30 ganges [] fcntl_setlk+0x286/0x2c0 Jul 24 11:33:30 ganges [] vfs_write+0xbd/0x180 Jul 24 11:33:30 ganges [] sys_pwrite64+0x5d/0x90 Jul 24 11:33:30 ganges [] system_call+0x68/0x6d Jul 24 11:33:30 ganges [] system_call+0x0/0x6d Jul 24 11:33:30 ganges Jul 24 11:33:30 ganges Jul 24 11:33:30 ganges Code: 0f 0b 68 f0 f7 51 80 c2 39 00 eb 2b 48 c7 c6 a6 3a 52 80 48 Jul 24 11:33:30 ganges RIP [] cmn_err+0xdc/0x120 Jul 24 11:33:30 ganges RSP From pengxihan@gmail.com Mon Jul 27 10:48:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RFm8lh110519 for ; Mon, 27 Jul 2009 10:48:08 -0500 X-ASG-Debug-ID: 1248710252-2104000e0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f208.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BF5F31214ECB for ; Mon, 27 Jul 2009 08:57:33 -0700 (PDT) Received: from mail-fx0-f208.google.com (mail-fx0-f208.google.com [209.85.220.208]) by cuda.sgi.com with ESMTP id A23xUACssoE1Qqb1 for ; Mon, 27 Jul 2009 08:57:33 -0700 (PDT) Received: by fxm4 with SMTP id 4so2581527fxm.20 for ; Mon, 27 Jul 2009 08:48:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=hwrhScluzvJT+255bMQvCVLojQ8o7IMv1v2Dyb/vqeE=; b=nhYlZ5LEp6nV1xkx63f67BRpgZVkg0RAY7muPTYrj77tk59FJdSImdNm9d7Ol3PWED goOIy6nbtchiIxvFZaahCox588v89ad5NgiEwlSG5XBpnbXlyW9KKVHtc9qABh+swYsu ypHluzQNIsFbfS9NMDSRwv0NCNP0+HYuOIxd0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=KoJb8r9IsqS8BBSg62RNCpVtw9e+vOGSr5m1aaGIhOz9zKRwVS76/59ItQPBhQBZ66 x5+J7LZBoZpyoc46/FK7gFbUybR08wquLU7RSTWNtWpDel4u3YAzwIM2GqpeW/ysXqFr BlM7rR7rtIWU163rtlFecj71Xtrh5uSHLIvrk= MIME-Version: 1.0 Received: by 10.103.240.15 with SMTP id s15mr3369466mur.43.1248709731887; Mon, 27 Jul 2009 08:48:51 -0700 (PDT) In-Reply-To: <4A6DAE5D.6060704@sandeen.net> References: <389deec70907252030s3524b2ecj9b35da9ea376020f@mail.gmail.com> <4A6D075B.9060601@sandeen.net> <389deec70907262347g1ca3637fn469596ec1e05148@mail.gmail.com> <4A6DAE5D.6060704@sandeen.net> Date: Mon, 27 Jul 2009 23:48:51 +0800 Message-ID: <389deec70907270848s339eeeefm3fcd05be3c941cb8@mail.gmail.com> X-ASG-Orig-Subj: Re: How to solve "No space left" problem on my 32bit machine? Subject: Re: How to solve "No space left" problem on my 32bit machine? From: hank peng To: Eric Sandeen Cc: linux-xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-fx0-f208.google.com[209.85.220.208] X-Barracuda-Start-Time: 1248710254 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4574 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/7/27 Eric Sandeen : > hank peng wrote: >> 2009/7/27 Eric Sandeen : >>> hank peng wrote: >>>> Hi, folks: >>>> I have a 2.5T file system formatted with XFS, df tells me it still >>>> have about 10G space available, but I can't create new files or >>>> directory any more. Return message is "No space left on this device". >>>> I searched solution for this problem through google, and found this: >>>> http://oss.sgi.com/archives/xfs/2005-06/msg00347.html. I think it is a >>>> known "No space left" problem. I wonder whether it can only >>>> be solved on 64-bit machine? If on my 32-bit machine, what should I do= ? >>> On very recent kernels you can use 64-bit inodes on 32-bit machines; yo= u >>> can try mounting with -o inode64 t allow this. >>> >> I tried -o inode64 option, but kernel gives me error message: >> XFS: inode64 option not allowed on this system >> I doubt this option can't be used on 32-bit machine. > > That's why I said you need a very recent kernel, it was added relatively > recently: > > commit 6c31b93a14a453c8756ffd228e24910ffdf30c5d > Author: Christoph Hellwig > Date: =C2=A0 Fri Nov 28 14:23:32 2008 +1100 > > =C2=A0 =C2=A0[XFS] allow inode64 mount option on 32 bit systems > > I believe this went into 2.6.29. > thx, i will try ASAP > -Eric > > --=20 The simplest is not all best but the best is surely the simplest! From julia@diku.dk Mon Jul 27 11:18:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RGI7Dl112084 for ; Mon, 27 Jul 2009 11:18:07 -0500 X-ASG-Debug-ID: 1248711531-2b5200550000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mgw2.diku.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C6DF8389B68; Mon, 27 Jul 2009 09:18:52 -0700 (PDT) Received: from mgw2.diku.dk (mgw2.diku.dk [130.225.96.92]) by cuda.sgi.com with ESMTP id tksmVCj5HxwQp8uy; Mon, 27 Jul 2009 09:18:52 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mgw2.diku.dk (Postfix) with ESMTP id 739D719BC84; Mon, 27 Jul 2009 18:18:50 +0200 (CEST) Received: from mgw2.diku.dk ([127.0.0.1]) by localhost (mgw2.diku.dk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 09957-15; Mon, 27 Jul 2009 18:18:48 +0200 (CEST) Received: from nhugin.diku.dk (nhugin.diku.dk [130.225.96.140]) by mgw2.diku.dk (Postfix) with ESMTP id 8839619BC94; Mon, 27 Jul 2009 18:15:25 +0200 (CEST) Received: from ask.diku.dk (ask.diku.dk [130.225.96.225]) by nhugin.diku.dk (Postfix) with ESMTP id 002AA6DFD07; Mon, 27 Jul 2009 18:14:42 +0200 (CEST) Received: by ask.diku.dk (Postfix, from userid 3767) id 7308A154D01; Mon, 27 Jul 2009 18:15:25 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by ask.diku.dk (Postfix) with ESMTP id 70C8D1547DF; Mon, 27 Jul 2009 18:15:25 +0200 (CEST) Date: Mon, 27 Jul 2009 18:15:25 +0200 (CEST) From: Julia Lawall To: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org X-ASG-Orig-Subj: [PATCH 10/12] fs/xfs: Correct redundant test Subject: [PATCH 10/12] fs/xfs: Correct redundant test Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at diku.dk X-Barracuda-Connect: mgw2.diku.dk[130.225.96.92] X-Barracuda-Start-Time: 1248711532 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4575 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean From: Julia Lawall bp was tested for NULL a few lines before, followed by a return, and there is no intervening modification of its value. A simplified version of the semantic match that finds this problem is as follows: (http://www.emn.fr/x-info/coccinelle/) // @r exists@ local idexpression x; expression E; position p1,p2; @@ if (x == NULL || ...) { ... when forall return ...; } ... when != \(x=E\|x--\|x++\|--x\|++x\|x-=E\|x+=E\|x|=E\|x&=E\|&x\) ( *x == NULL | *x != NULL ) // Signed-off-by: Julia Lawall --- fs/xfs/xfs_trans_buf.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c index 8ee2f8c..218829e 100644 --- a/fs/xfs/xfs_trans_buf.c +++ b/fs/xfs/xfs_trans_buf.c @@ -307,7 +307,7 @@ xfs_trans_read_buf( return (flags & XFS_BUF_TRYLOCK) ? EAGAIN : XFS_ERROR(ENOMEM); - if ((bp != NULL) && (XFS_BUF_GETERROR(bp) != 0)) { + if (XFS_BUF_GETERROR(bp) != 0) { xfs_ioerror_alert("xfs_trans_read_buf", mp, bp, blkno); error = XFS_BUF_GETERROR(bp); @@ -315,7 +315,7 @@ xfs_trans_read_buf( return error; } #ifdef DEBUG - if (xfs_do_error && (bp != NULL)) { + if (xfs_do_error) { if (xfs_error_target == target) { if (((xfs_req_num++) % xfs_error_mod) == 0) { xfs_buf_relse(bp); From felixb@sgi.com Mon Jul 27 11:36:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RGaW3p113430; Mon, 27 Jul 2009 11:36:32 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 20C578F8040; Mon, 27 Jul 2009 09:37:13 -0700 (PDT) Received: from eagdhcp-232-184.americas.sgi.com (eagdhcp-232-184.americas.sgi.com [128.162.232.184]) by estes.americas.sgi.com (Postfix) with ESMTP id 080217000103; Mon, 27 Jul 2009 11:37:13 -0500 (CDT) Cc: xfs-masters@oss.sgi.com, xfs@oss.sgi.com, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Message-Id: <8470E784-966F-4FFE-BA3A-D9B1A0963FB9@sgi.com> From: Felix Blyakher To: Julia Lawall In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 10/12] fs/xfs: Correct redundant test Date: Mon, 27 Jul 2009 11:37:13 -0500 References: X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 27, 2009, at 11:15 AM, Julia Lawall wrote: > From: Julia Lawall > > bp was tested for NULL a few lines before, followed by a return, and > there > is no intervening modification of its value. > > A simplified version of the semantic match that finds this problem > is as > follows: (http://www.emn.fr/x-info/coccinelle/) > > // > @r exists@ > local idexpression x; > expression E; > position p1,p2; > @@ > > if (x == NULL || ...) { ... when forall > return ...; } > ... when != \(x=E\|x--\|x++\|--x\|++x\|x-=E\|x+=E\|x|=E\|x&=E\|&x\) > ( > *x == NULL > | > *x != NULL > ) > // > > Signed-off-by: Julia Lawall Looks good. Thanks. I'll check it in. Reviewed-by: Felix Blyakher > > > --- > fs/xfs/xfs_trans_buf.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c > index 8ee2f8c..218829e 100644 > --- a/fs/xfs/xfs_trans_buf.c > +++ b/fs/xfs/xfs_trans_buf.c > @@ -307,7 +307,7 @@ xfs_trans_read_buf( > return (flags & XFS_BUF_TRYLOCK) ? > EAGAIN : XFS_ERROR(ENOMEM); > > - if ((bp != NULL) && (XFS_BUF_GETERROR(bp) != 0)) { > + if (XFS_BUF_GETERROR(bp) != 0) { > xfs_ioerror_alert("xfs_trans_read_buf", mp, > bp, blkno); > error = XFS_BUF_GETERROR(bp); > @@ -315,7 +315,7 @@ xfs_trans_read_buf( > return error; > } > #ifdef DEBUG > - if (xfs_do_error && (bp != NULL)) { > + if (xfs_do_error) { > if (xfs_error_target == target) { > if (((xfs_req_num++) % xfs_error_mod) == 0) { > xfs_buf_relse(bp); From sandeen@sandeen.net Mon Jul 27 12:39:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_32 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RHdbXV116966 for ; Mon, 27 Jul 2009 12:39:37 -0500 X-ASG-Debug-ID: 1248716421-3d8903340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C9DEB1B5B610 for ; Mon, 27 Jul 2009 10:40:21 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id uOCwANHIc9PHlgEy for ; Mon, 27 Jul 2009 10:40:21 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6RHeKZm024422; Mon, 27 Jul 2009 13:40:21 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6RHeJok008610; Mon, 27 Jul 2009 13:40:19 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6RHeISQ023569; Mon, 27 Jul 2009 13:40:18 -0400 Message-ID: <4A6DE682.7080402@sandeen.net> Date: Mon, 27 Jul 2009 12:40:18 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Gabriel Barazer CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) Subject: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) References: <000c01ca0ae0$e85420a0$b8fc61e0$@fr> <4A67E2F5.2030400@sandeen.net> <4A6D9221.5080603@oxeva.fr> In-Reply-To: <4A6D9221.5080603@oxeva.fr> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248716422 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4581 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Gabriel Barazer wrote: > Eric Sandeen wrote: >> Gabriel Barazer wrote: >> >>> Hi, >>> >>> I recently put a NFS file server into production, with mostly XFS volumes on LVM. The server was quite low on traffic until this morning and one of the filesystems crashed twice since this morning with the following backtrace: >>> >>> Filesystem "dm-24": XFS internal error xfs_trans_cancel at line 1164 of file fs/xfs/xfs_trans.c. Caller 0xffffffff811b09a7 >>> Pid: 2053, comm: nfsd Not tainted 2.6.28.9-filer #1 >>> Call Trace: >>> [] xfs_rename+0x4a1/0x4f6 >>> [] xfs_trans_cancel+0x56/0xed >>> [] xfs_rename+0x4a1/0x4f6 >>> >> ... >> >> >>> xfs_force_shutdown(dm-24,0x8) called from line 1165 of file fs/xfs/xfs_trans.c. Return address = 0xffffffff811b181f >>> Filesystem "dm-24": Corruption of in-memory data detected. Shutting down filesystem: dm-24 >>> >>> The two crashed are related to the same function: xfs_rename. >>> >> Can you do objdump -d xfs.ko | grep "xfs_rename\|xfs_trans_cancel" and >> maybe we can see which call to xfs_trans_cancel in xfs_rename this was. >> >> The problem relates to canceling a dirty transaction on an error path. >> > Hi, > > sorry for the late reply > > I don't have any xfs.ko as my kernel is compiled without CONFIG_MODULES. > However I objdump'd the vmlinux uncompressed kernel, and here are the > results: Ok, that was an over eager grep command, my apologies to the mail archives ;) The relevant stuff: ffffffff811b0506 : ffffffff811b06c1: e8 ea 10 00 00 callq ffffffff811b17b0 ffffffff811b09a2: e8 09 0e 00 00 callq ffffffff811b17b0 hmm but there are only 2 obvious calls in the disassembly, and there are 4 calls in the function... and neither one seems to line up with your stated offset in the oops. :( I was hoping to sort out which xfs_trans_cancel call in xfs_rename it was. Any chance you could add a couple printk's to xfs_rename in the cases where it calls trans_cancel so we can see which one it was? Thanks, -Eric From prarit@redhat.com Mon Jul 27 12:51:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6RHpW1x117637 for ; Mon, 27 Jul 2009 12:51:33 -0500 X-ASG-Debug-ID: 1248717658-43fa03900000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0A67610C6128 for ; Mon, 27 Jul 2009 11:00:58 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id JKQ9FGYljqRQQHxE for ; Mon, 27 Jul 2009 11:00:58 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6RHqHLg028048 for ; Mon, 27 Jul 2009 13:52:17 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6RHqGRw012344; Mon, 27 Jul 2009 13:52:16 -0400 Received: from [10.16.16.23] (prarit.bos.redhat.com [10.16.16.23]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6RHqFKr025935; Mon, 27 Jul 2009 13:52:16 -0400 Message-ID: <4A6DE939.6050606@redhat.com> Date: Mon, 27 Jul 2009 13:51:53 -0400 From: Prarit Bhargava User-Agent: Thunderbird 1.5.0.7 (X11/20061008) MIME-Version: 1.0 To: xfs@oss.sgi.com, Eric Sandeen X-ASG-Orig-Subj: Circular locking on rawhide 2.6.31-0.81.rc3.git4 Subject: Circular locking on rawhide 2.6.31-0.81.rc3.git4 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248717659 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4582 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello everyone, This was seen while doing a "rpmbuild -bp kernel.spec" on a recent rawhide build. ======================================================= [ INFO: possible circular locking dependency detected ] 2.6.31-0.81.rc3.git4.fc12.x86_64 #1 ------------------------------------------------------- rpm/4790 is trying to acquire lock: (&(&ip->i_iolock)->mr_lock){++++++}, at: [] xfs_ilock+0x3f/0xa7 [xfs] but task is already holding lock: (&mm->mmap_sem){++++++}, at: [] sys_munmap+0x4b/0x86 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #1 (&mm->mmap_sem){++++++}: [] __lock_acquire+0xa79/0xc0e [] lock_acquire+0xee/0x12e [] might_fault+0x9e/0xd9 [] file_read_actor+0xdf/0x137 [] generic_file_aio_read+0x321/0x52f [] xfs_read+0x190/0x214 [xfs] [] xfs_file_aio_read+0x77/0x8d [xfs] [] do_sync_read+0xfa/0x14b [] vfs_read+0xba/0x12b [] sys_read+0x59/0x91 [] system_call_fastpath+0x16/0x1b [] 0xffffffffffffffff -> #0 (&(&ip->i_iolock)->mr_lock){++++++}: [] __lock_acquire+0x956/0xc0e [] lock_acquire+0xee/0x12e [] down_write_nested+0x61/0xac [] xfs_ilock+0x3f/0xa7 [xfs] [] xfs_free_eofblocks+0x126/0x238 [xfs] [] xfs_release+0x150/0x173 [xfs] [] xfs_file_release+0x28/0x40 [xfs] [] __fput+0x137/0x1f8 [] fput+0x2d/0x43 [] remove_vma+0x67/0xb5 [] do_munmap+0x305/0x33b [] sys_munmap+0x59/0x86 [] system_call_fastpath+0x16/0x1b [] 0xffffffffffffffff other info that might help us debug this: 1 lock held by rpm/4790: #0: (&mm->mmap_sem){++++++}, at: [] sys_munmap+0x4b/0x86 stack backtrace: Pid: 4790, comm: rpm Not tainted 2.6.31-0.81.rc3.git4.fc12.x86_64 #1 Call Trace: [] print_circular_bug_tail+0x80/0x9f [] ? check_noncircular+0x93/0xe8 [] __lock_acquire+0x956/0xc0e [] lock_acquire+0xee/0x12e [] ? xfs_ilock+0x3f/0xa7 [xfs] [] ? xfs_ilock+0x3f/0xa7 [xfs] [] down_write_nested+0x61/0xac [] ? xfs_ilock+0x3f/0xa7 [xfs] [] xfs_ilock+0x3f/0xa7 [xfs] [] xfs_free_eofblocks+0x126/0x238 [xfs] [] xfs_release+0x150/0x173 [xfs] [] xfs_file_release+0x28/0x40 [xfs] [] __fput+0x137/0x1f8 [] fput+0x2d/0x43 [] remove_vma+0x67/0xb5 [] do_munmap+0x305/0x33b [] ? sys_munmap+0x4b/0x86 [] sys_munmap+0x59/0x86 [] system_call_fastpath+0x16/0x1b P. From gabriel@oxeva.fr Mon Jul 27 19:31:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_32 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6S0VVGm135281 for ; Mon, 27 Jul 2009 19:31:31 -0500 X-ASG-Debug-ID: 1248741134-7b9902140000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.reagi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DF712140BB88 for ; Mon, 27 Jul 2009 17:32:14 -0700 (PDT) Received: from mail.reagi.com (mail.reagi.com [195.60.188.80]) by cuda.sgi.com with ESMTP id NAAbD8fedagjn89t for ; Mon, 27 Jul 2009 17:32:14 -0700 (PDT) Received: (qmail 7142 invoked by uid 89); 28 Jul 2009 00:32:13 -0000 Received: by simscan 1.4.0 ppid: 7133, pid: 7136, t: 0.1546s scanners: regex: 1.4.0 clamav: 0.95.1/m:/d:9222 Received: from unknown (HELO ?10.0.0.125?) (gabriel@oxeva.fr@86.65.110.229) by 0 with ESMTPA; 28 Jul 2009 00:32:13 -0000 Message-ID: <4A6E46D5.1090901@oxeva.fr> Date: Tue, 28 Jul 2009 02:31:17 +0200 From: Gabriel Barazer Organization: Oxeva User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Eric Sandeen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) Subject: Re: XFS filesystem shutting down on linux 2.6.28.9 (xfs_rename) References: <000c01ca0ae0$e85420a0$b8fc61e0$@fr> <4A67E2F5.2030400@sandeen.net> <4A6D9221.5080603@oxeva.fr> <4A6DE682.7080402@sandeen.net> In-Reply-To: <4A6DE682.7080402@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.reagi.com[195.60.188.80] X-Barracuda-Start-Time: 1248741135 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4606 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Gabriel Barazer wrote: > >> Eric Sandeen wrote: >> >>> Gabriel Barazer wrote: >>> >>> >>>> Hi, >>>> >>>> I recently put a NFS file server into production, with mostly XFS volumes on LVM. The server was quite low on traffic until this morning and one of the filesystems crashed twice since this morning with the following backtrace: >>>> >>>> Filesystem "dm-24": XFS internal error xfs_trans_cancel at line 1164 of file fs/xfs/xfs_trans.c. Caller 0xffffffff811b09a7 >>>> Pid: 2053, comm: nfsd Not tainted 2.6.28.9-filer #1 >>>> Call Trace: >>>> [] xfs_rename+0x4a1/0x4f6 >>>> [] xfs_trans_cancel+0x56/0xed >>>> [] xfs_rename+0x4a1/0x4f6 >>>> >>>> >>> ... >>> >>> >>> >>>> xfs_force_shutdown(dm-24,0x8) called from line 1165 of file fs/xfs/xfs_trans.c. Return address = 0xffffffff811b181f >>>> Filesystem "dm-24": Corruption of in-memory data detected. Shutting down filesystem: dm-24 >>>> >>>> The two crashed are related to the same function: xfs_rename. >>>> >>>> >>> Can you do objdump -d xfs.ko | grep "xfs_rename\|xfs_trans_cancel" and >>> maybe we can see which call to xfs_trans_cancel in xfs_rename this was. >>> >>> The problem relates to canceling a dirty transaction on an error path. >>> >>> >> Hi, >> >> sorry for the late reply >> >> I don't have any xfs.ko as my kernel is compiled without CONFIG_MODULES. >> However I objdump'd the vmlinux uncompressed kernel, and here are the >> results: >> > > Ok, that was an over eager grep command, my apologies to the mail > archives ;) > > The relevant stuff: > > ffffffff811b0506 : > ffffffff811b06c1: e8 ea 10 00 00 callq ffffffff811b17b0 > > ffffffff811b09a2: e8 09 0e 00 00 callq ffffffff811b17b0 > > > hmm but there are only 2 obvious calls in the disassembly, and there are > 4 calls in the function... and neither one seems to line up with your > stated offset in the oops. :( I was hoping to sort out which > xfs_trans_cancel call in xfs_rename it was. > I disassembled the uncompressed version of the linux kernel, generated at compile time in the build directory. I don't know if compressing the kernel to a bzImage file can change offsets compared to the uncompressed vmlinux kernel. I still have all the compiled sources for that kernel, including the .o files. Does any of these files could contain the offset you are looking for ? > Any chance you could add a couple printk's to xfs_rename in the cases > where it calls trans_cancel so we can see which one it was? > This kernel and these bugs occured on a live production file server, and I really cannot mess with it. Good news though, I did not get any other shutdown since my last e-mail. One detail that might be useful in case that bug is a race between 2 functions somewhere: The disks containing the filesystem is a SSD RAID plugged to a 3ware adapter with write cache enabled; that is as those SSD are very irregular in write speeds, the writes are occuring in short bursts, then any I/O to the disks are blocked for a few seconds until the next burst (see the purple line : http://pub.grosboulet.com/benchmark-seqwrite.jpg ). (BTW, I _really_ don't recommend using Intel X25-M SSDs in server systems, thoses are only good for desktop/laptop systems and are worse than SAS15K drives in multiuser writes). This very odd behaviour could lead the kernel to block/wait at unusual places in the code like where that bug is occuring. Gabriel From etntecom@funky.cirtexhosting.com Mon Jul 27 20:00:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6S10uxp136892 for ; Mon, 27 Jul 2009 20:00:57 -0500 X-ASG-Debug-ID: 1248742895-41cb03ce0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from funky.cirtexhosting.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 733CD38B625 for ; Mon, 27 Jul 2009 18:01:35 -0700 (PDT) Received: from funky.cirtexhosting.com (funky.cirtexhosting.com [208.53.158.84]) by cuda.sgi.com with ESMTP id hyr6k51nuTxNSJo1 for ; Mon, 27 Jul 2009 18:01:35 -0700 (PDT) Received: from etntecom by funky.cirtexhosting.com with local (Exim 4.69) (envelope-from ) id 1MVb46-0000Tu-2I for xfs@oss.sgi.com; Mon, 27 Jul 2009 20:01:14 -0500 To: xfs@oss.sgi.com From: 7daywealthpartner@freemail.lt Reply-To: 7daywealthpartner@freemail.lt X-Mailer: Perl Powered Socket Mailer X-ASG-Orig-Subj: Website Suggestion from 7DayWealth JustLAUNCHTODAY Subject: Website Suggestion from 7DayWealth JustLAUNCHTODAY Message-Id: Date: Mon, 27 Jul 2009 20:01:14 -0500 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - funky.cirtexhosting.com X-AntiAbuse: Original Domain - oss.sgi.com X-AntiAbuse: Originator/Caller UID/GID - [32340 32003] / [47 12] X-AntiAbuse: Sender Address Domain - funky.cirtexhosting.com X-Source: /usr/bin/perl X-Source-Args: /usr/local/bin/perl birdcast.cgi X-Source-Dir: etntelephone.com:/public_html/cgi-bin X-Barracuda-Connect: funky.cirtexhosting.com[208.53.158.84] X-Barracuda-Start-Time: 1248742902 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5000 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4608 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi xfs, 7DayWealth JustLAUNCHTODAY stopped by the Discount Travel Home Page and suggested that you visit the following URL: http://www.etntelephone.com/cgi-bin/birdcast.cgi Here is their message.... No BRAINER NEEDED - ALLOW YOUR SELF TO BE THE TOP MILION EARNER TODAY! WE CRACKED THE CODE TO MAKE EASY MONEY FOR YOU! JUST LAUNCH TODAY! NO SURFING, NO HYIP, NO DOUBLERS, YOU WILL MAKE MONEY - http://urlxp.com/go/7daywealth-launching-now Greetings! A successful friend tipped me off about a brand new online marketing system that is simple and POWERFUL. Its ‘automatic’ features help ordinary people earn serious income in their spare time from home with an AWESOME system called 7DayWealth. They have a goal to help a million people build successful home based businesses with their unique system. AND, believe it or not, they actually SHOW you how your personal downline network is building, even BEFORE you officially join. The sooner you visit and become a FREE Pre-enrollee, the sooner they begin placing people below you — anyone of which could mean immediate income for your family. Literally hundreds of people who join after you, would be making you money, as they bui ld for themselves. It's HOT. Then, the more people on your downline who buy product and use the simple system to build their business below you, the more money YOU can make in no time at ALL. Remember, it’s FREE. Check it out cash, and when you see people being placed below you can either lock in your position and get paid on them, or forfeit your spot and they will leap frog above you. Either way is fine, just be sure to check it out: TAKE A TRIAL FOR FREE - http://urlxp.com/go/7daywealth-launching-now Email me after you sign up so we can discuss it. Have an awesome day, Mike 7daywealthpartner@europe.com For Free Information, Fill In Your Info ... You Will Receive A Verification Email In A Few Minutes To Opt In To Our System, If You Do Not You Have To Try Again Using Another Email Address! ----------------------- eMail here: 7daywealthpartner@europe.com and add "remove" for no further emails.. Discount Travel Home Page http://www.DiscountAirfares.com/ From news@studiokappa.it Tue Jul 28 06:26:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_50 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SBQAgm170704 for ; Tue, 28 Jul 2009 06:26:10 -0500 X-ASG-Debug-ID: 1248780938-221900ab0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtpsmart2.aruba.it (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id B1CB3149F130 for ; Tue, 28 Jul 2009 04:35:38 -0700 (PDT) Received: from smtpsmart2.aruba.it (smtpweb116.aruba.it [62.149.158.116]) by cuda.sgi.com with SMTP id 9DtT4uIXijzZuivJ for ; Tue, 28 Jul 2009 04:35:38 -0700 (PDT) Received: (qmail 23712 invoked by uid 89); 28 Jul 2009 11:26:52 -0000 Received: by simscan 1.2.0 ppid: 23345, pid: 23347, t: 5.5287s scanners: clamav: 0.88.4/m:40/d:1945 spam: 3.1.4 Received: from unknown (HELO webxc08s04.ad.aruba.it) (62.149.141.96) by smtpsmart2.fe.aruba.it with SMTP; 28 Jul 2009 11:26:46 -0000 Received: (qmail 4855 invoked by uid 18002703); 28 Jul 2009 11:26:46 -0000 To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Goodbye from our Newsletter Subject: Goodbye from our Newsletter Date: Tue, 28 Jul 2009 13:26:46 +0200 From: Webmaster Message-ID: <55bae8f9d0c2aa00668e808e19d8be4f@www.studiokappa.it> X-Priority: 3 X-Mailer: PHPMailer [version 1.73] X-Mailer: phplist v2.10.4 X-MessageID: systemmessage X-ListMember: linux-xfs@oss.sgi.com Precedence: bulk Errors-To: news@studiokappa.it MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="UTF-8" X-Barracuda-Connect: smtpweb116.aruba.it[62.149.158.116] X-Barracuda-Start-Time: 1248780940 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5223 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Goodbye from our Newsletter, sorry to see you go. You have been unsubscribed from our newsletters. This is the last email you will receive from us. We have added you to our "blacklist", which means that our newsletter system will refuse to send you any other email, without manual intervention by our administrator. If there is an error in this information, you can re-subscribe: please go to http://www.studiokappa.it/lists/?p=subscribe and follow the steps. Thank you From michael.monnerie@is.it-management.at Tue Jul 28 06:26:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SBQmVb170744 for ; Tue, 28 Jul 2009 06:26:49 -0500 X-ASG-Debug-ID: 1248780452-5e3503d50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 992261D4FB47 for ; Tue, 28 Jul 2009 04:27:33 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id YeFSwnn7d55pBRH8 for ; Tue, 28 Jul 2009 04:27:33 -0700 (PDT) Received: from mailsrv.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 42D865543 for ; Tue, 28 Jul 2009 13:27:51 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id A996C40DC06 for ; Tue, 28 Jul 2009 13:27:31 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Sviluppo di Comunita' a Vercelli Subject: Re: Sviluppo di Comunita' a Vercelli Date: Tue, 28 Jul 2009 13:27:31 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.3-ZMI; KDE/4.1.3; x86_64; ; ) References: <04767b64f3f1c771e150d4677df2770e@www.studiokappa.it> In-Reply-To: <04767b64f3f1c771e150d4677df2770e@www.studiokappa.it> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart4536855.8fSo5PrMP0"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907281327.31274@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248780453 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart4536855.8fSo5PrMP0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Montag 27 Juli 2009 news@studiokappa.it wrote: > Per cancellarti da questa lista clicca su > http://www.studiokappa.it/lists/?p=3Dunsubscribe&uid=3Df95d79661173a656ad >12f819a35cc5d5 I tried this link, possibly it stops that spam. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart4536855.8fSo5PrMP0 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpu4KMACgkQzhSR9xwSCbRmfgCcD1Pay39CNvM4yKfvL8pTdNNZ 4gUAoOG3RbFBvIxq5YoejCS4zJr8V4Mf =+a/P -----END PGP SIGNATURE----- --nextPart4536855.8fSo5PrMP0-- From eddy.y.zhao@gmail.com Tue Jul 28 07:49:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SCnei3174844 for ; Tue, 28 Jul 2009 07:49:40 -0500 X-ASG-Debug-ID: 1248785426-2f57034f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-qy0-f173.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8A43A38D0E5 for ; Tue, 28 Jul 2009 05:50:26 -0700 (PDT) Received: from mail-qy0-f173.google.com (mail-qy0-f173.google.com [209.85.221.173]) by cuda.sgi.com with ESMTP id XzvRQDTUDfzAk9dw for ; Tue, 28 Jul 2009 05:50:26 -0700 (PDT) Received: by qyk3 with SMTP id 3so4638740qyk.20 for ; Tue, 28 Jul 2009 05:50:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=PWJsQURfAFKYduZaURwZdlyr1ZJ9Vg/n2iHORO84Kgw=; b=XZMHYgXx3ehCKWh/Zz1VqF8sm0IoIDQc1xwqygKCNI3iskeeqEkURZ8YHN/OcgP4jj fHvBgVosD/hJHxgi4SKDVpx4g0n8FaoVG6IykUxOe8X2SoaSAYcoA/GsDEvIqpflmviP WRd1zbJRg1kjiDY7Z+kysNhEQqTLe68dsUuMA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=k+4L3sS5SqKymD4kS2YtZifMB2Jtv23DnrJgXU9wyaom9RMI0dfRorsXL/fecXDBkm q2a1xPyRDLgr81rj6CRuR9vJM7/T9K2WYKj97VazRMyUAlNqBmaVduCkA3Ry/OBa/mua Jjdsgt0WVYNePYpKMWyancvw3KPlldprYnPF4= MIME-Version: 1.0 Received: by 10.229.100.134 with SMTP id y6mr1864803qcn.27.1248785425780; Tue, 28 Jul 2009 05:50:25 -0700 (PDT) In-Reply-To: <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Date: Tue, 28 Jul 2009 20:50:25 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Lachlan McIlroy Cc: xfs@oss.sgi.com, felixb@sgi.com Content-Type: multipart/alternative; boundary=0016364ee89cb4510b046fc38331 X-Barracuda-Connect: mail-qy0-f173.google.com[209.85.221.173] X-Barracuda-Start-Time: 1248785426 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016364ee89cb4510b046fc38331 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello Lachlan: > > We all start somewhere! > Yes. I'll start from this problem :) > > It should also be the same architecture too - is it possible you have a > 32 bit kernel on the 2.6.10 system and a 64 bit kernel on the 2.6.28 > system? If so then this fix might help > The two systems are all 32bit. Enlightened by your suggestion, I find problem lies in the two systems are different architecture. One is arm, on is x86. Use 2.6.10 on both system, XFS created on arm can't mount on x86, vice versa (dump stack at xlog_recover_process_data). Use xfs_logprint to inspect log, tool exit with assertion failed: "item->ri_buf[0].i_len == sizeof(xfs_inode_log_format_t)". Debug the assertion and find xfs_inode_log_format_t on arm is 56 byte, on x86 is 52 byte. Then find on 2.6.10 xfs_inode_log_format is not packed!! Fix this, fix the mount failed problem. Grep the code and find a lot other log/metadata needs pack on 2.6.10. I find these xfs_fid64 xfs_extent_32_t xfs_efi_log_format_32_t xfs_efd_log_format_32_t xfs_inode_log_format_32_t xfs_flock64_32 compat_xfs_fsop_geom_v1_t compat_xfs_inogrp_t xfs_dir2_sf_off_t xfs_dir2_sf_hdr_t xfs_dir2_sf_entry_t Is there any other log/metadata needs pack on 2.6.10? Any other problem/caveat I need pay attention to while/besides fix pack bug? Thanks Eddy --0016364ee89cb4510b046fc38331 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Hello Lachlan:

>
> We all start somewhere!
>

Yes. I'll start from this problem :)

>
> It should also be the same architecture too - is it possibl= e you have a
> 32 bit kernel on the 2.6.10 system and a 64 bit kernel= on the 2.6.28
> system?=A0 If so then this fix might help
>

The two systems are all 32bit.

Enlightened by your suggestion, I find problem lies in the two systems a= re different architecture. One is arm, on is x86. Use 2.6.10 on both system= , XFS created on arm can't mount on x86, vice versa (dump stack at xlog= _recover_process_data).

Use xfs_logprint to inspect log, tool exit with assertion failed: "= item->ri_buf[0].i_len =3D=3D sizeof(xfs_inode_log_format_t)". Debug= the assertion and find xfs_inode_log_format_t on arm is 56 byte, on x86 is= 52 byte. Then find on 2.6.10 xfs_inode_log_format is not packed!! Fix this= , fix the mount failed problem.

Grep the code and find a lot other log/metadata needs pack on 2.6.10. I = find these
=A0xfs_fid64
=A0xfs_extent_32_t
=A0xfs_efi_log_format_3= 2_t
=A0xfs_efd_log_format_32_t
=A0xfs_inode_log_format_32_t
=A0xfs= _flock64_32
=A0compat_xfs_fsop_geom_v1_t
=A0compat_xfs_inogrp_t
=A0xfs_dir2_sf_of= f_t
=A0xfs_dir2_sf_hdr_t
=A0xfs_dir2_sf_entry_t

Is there any other log/metadata needs pack on 2.6.10? Any other problem/= caveat I need pay attention to while/besides fix pack bug?

Thanks
Eddy

--0016364ee89cb4510b046fc38331-- From sandeen@sandeen.net Tue Jul 28 09:21:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SEL03T184672 for ; Tue, 28 Jul 2009 09:21:01 -0500 X-ASG-Debug-ID: 1248791430-2d9903870000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BFAFC149F51C for ; Tue, 28 Jul 2009 07:30:31 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id UPg7I6CtmDqkGeah for ; Tue, 28 Jul 2009 07:30:31 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id AC6C9A704B8; Tue, 28 Jul 2009 09:21:44 -0500 (CDT) Message-ID: <4A6F0978.4070709@sandeen.net> Date: Tue, 28 Jul 2009 09:21:44 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Eddy Zhao CC: Lachlan McIlroy , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248791431 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eddy Zhao wrote: > Hello Lachlan: > >> >> We all start somewhere! >> > > Yes. I'll start from this problem :) > >> >> It should also be the same architecture too - is it possible you have a >> 32 bit kernel on the 2.6.10 system and a 64 bit kernel on the 2.6.28 >> system? If so then this fix might help >> > > The two systems are all 32bit. > > Enlightened by your suggestion, I find problem lies in the two systems > are different architecture. One is arm, on is x86. Use 2.6.10 on both > system, XFS created on arm can't mount on x86, vice versa (dump stack at > xlog_recover_process_data). Well, the fact that you have 2 arches would have been highly relevant in your first email. ;) Is this the old abi or the new? Guessing old, based on the alignment issues. > Use xfs_logprint to inspect log, tool exit with assertion failed: > "item->ri_buf[0].i_len == sizeof(xfs_inode_log_format_t)". Debug the > assertion and find xfs_inode_log_format_t on arm is 56 byte, on x86 is > 52 byte. Then find on 2.6.10 xfs_inode_log_format is not packed!! Fix > this, fix the mount failed problem. > > Grep the code and find a lot other log/metadata needs pack on 2.6.10. I > find these > xfs_fid64 > xfs_extent_32_t > xfs_efi_log_format_32_t > xfs_efd_log_format_32_t > xfs_inode_log_format_32_t > xfs_flock64_32 > compat_xfs_fsop_geom_v1_t > compat_xfs_inogrp_t > xfs_dir2_sf_off_t > xfs_dir2_sf_hdr_t > xfs_dir2_sf_entry_t > > Is there any other log/metadata needs pack on 2.6.10? Any other > problem/caveat I need pay attention to while/besides fix pack bug? Well, packing structures like mad is not a great solution[1] - it needs to be done carefully & judiciously. We don't want to pack structures that are already aligned on most arches, because this will cause performance issues. But I see above you've found a few that were, for various reasons. Note that the dir2 types above use a funky "__arch_pack" to conditionally pack only on arm old abi: /* ARM old ABI has some weird alignment/padding */ #if defined(__arm__) && !defined(__ARM_EABI__) #define __arch_pack __attribute__((packed)) #else #define __arch_pack #endif When I looked around for structure size mismatches on arm old abi, I was only looking at on-disk structures for which were big-endian. Because the log is native-endian, I did not think to check the log structures. To be honest, I am not certain that this is "worth fixing" - we already have the requirement that log replay can only be done on an architecture of the same endianness, and a further requirement that it can only be done on architectures with similar alignment rules doesn't seem so bad. The problem is, if you go off and "fix" this on arm now, you'll find that logs created under older arm kernels can't be replayed on newer arm kernels and vice versa... -Eric [1] http://digitalvampire.org/blog/index.php/2006/07/31/why-you-shouldnt-use-__attribute__packed/ From eddy.y.zhao@gmail.com Tue Jul 28 09:59:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SEx4cF187163 for ; Tue, 28 Jul 2009 09:59:05 -0500 X-ASG-Debug-ID: 1248793189-2bdc01fb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-qy0-f173.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9023D140FAC7 for ; Tue, 28 Jul 2009 07:59:49 -0700 (PDT) Received: from mail-qy0-f173.google.com (mail-qy0-f173.google.com [209.85.221.173]) by cuda.sgi.com with ESMTP id aDJ1fh3DwaBomUAw for ; Tue, 28 Jul 2009 07:59:49 -0700 (PDT) Received: by qyk3 with SMTP id 3so108107qyk.20 for ; Tue, 28 Jul 2009 07:59:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=/M1HLQUFm1t6NoC1cqmL7Mc5uNeNWHR+eLTr1SjpuG4=; b=YnsgKUyNCMhKDIG24t5rgIhI5p6csyeS8k/G/HYipwfp7nFAG69UkdgjspqIcvv3kb tzt7PwvlrYXJVTvgu1kN8s8bVc0AYVZ0dE7RvEU4r147lIVj+qzScBIBzW8T2nxnNyCz xNWJNg56FMgghJC/jJI+EacsLNDJmry6rz3DQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=UD2IEs6sXUj+HfnFGLoQNI/zWKyzYQORwjImAOxDCsrEXgH7hYkB0jnRZ6XpUQGAM5 18hdo2BE51amQCTDMaVQ+1tnlp2dpbtFyKz59X+cWZ9UYrF5O12C8c0VeoHBed69Qh0m ae4lRb7PtbmT6Hy4iCLmJSg7nIB2AjG7Z/50o= MIME-Version: 1.0 Received: by 10.229.80.21 with SMTP id r21mr1759143qck.80.1248793189464; Tue, 28 Jul 2009 07:59:49 -0700 (PDT) In-Reply-To: <4A6F0978.4070709@sandeen.net> References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> Date: Tue, 28 Jul 2009 22:59:49 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Eric Sandeen Cc: Lachlan McIlroy , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=001636163eb574bcc2046fc55253 X-Barracuda-Connect: mail-qy0-f173.google.com[209.85.221.173] X-Barracuda-Start-Time: 1248793190 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0003 1.0000 -2.0193 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4638 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --001636163eb574bcc2046fc55253 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello Eric: > > Well, the fact that you have 2 arches would have been highly relevant in > your first email. ;) Is this the old abi or the new? Guessing old, > based on the alignment issues. > ARM compiler is producing eabi. The problem lies in: "long long" on arm is 8 bytes aligned, on x86 is 4 bytes aligned. So 4 more bytes are padded before xfs_inode_log_format::ilf_ino on arm. > > Well, packing structures like mad is not a great solution[1] - it needs > to be done carefully & judiciously. We don't want to pack structures > that are already aligned on most arches, because this will cause > performance issues. > Interesting. Nice tip. > > But I see above you've found a few that were, for various reasons. Note > that the dir2 types above use a funky "__arch_pack" to conditionally > pack only on arm old abi: > Get it. Thanks for the reminder. > > To be honest, I am not certain that this is "worth fixing" - we already > have the requirement that log replay can only be done on an architecture > of the same endianness, and a further requirement that it can only be > done on architectures with similar alignment rules doesn't seem so bad. > Where is the official description of such requirment? The requirment is not obvious to new XFS users, and they should be warned :) Why is such requirment? For backward compatibility? I think the requirment is bad. It inhibit user from exchanging data freely between systems, which is an obvious requirment for file system design. > > The problem is, if you go off and "fix" this on arm now, you'll find > that logs created under older arm kernels can't be replayed on newer arm > kernels and vice versa... > Compared with the above restriction("requirment"), we can afford this :) Do I miss any other log/metadata needs pack on 2.6.10? Thanks Eddy --001636163eb574bcc2046fc55253 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Hello Eric:

>
> Well, the fact that you have 2 arches would have been highl= y relevant in
> your first email.=A0 ;)=A0 Is this the old abi or the= new?=A0 Guessing old,
> based on the alignment issues.
>

ARM compiler is producing eabi. The problem lies in: "long long&q= uot; on arm is 8 bytes aligned, on x86 is 4 bytes aligned. So 4 more bytes = are padded before xfs_inode_log_format::ilf_ino on arm.

>
> Well, packing structures like mad is not a great solu= tion[1] - it needs
> to be done carefully & judiciously.=A0 We do= n't want to pack structures
> that are already aligned on most ar= ches, because this will cause
> performance issues.
>

Interesting. Nice tip.

>
> But I see above you've found a few that were, for vario= us reasons.=A0 Note
> that the dir2 types above use a funky "__a= rch_pack" to conditionally
> pack only on arm old abi:
>

Get it. Thanks for the reminder.

>
> To be honest, I am not certain that this is "worth fi= xing" - we already
> have the requirement that log replay can on= ly be done on an architecture
> of the same endianness, and a further= requirement that it can only be
> done on architectures with similar alignment rules doesn't seem so= bad.
>

Where is the official description of such requirment? The requirment i= s not obvious to new XFS users, and they should be warned :)

Why is such requirment? For backward compatibility?

I think the requirment is bad. It inhibit user from=A0exchanging d= ata freely between systems, which is an obvious requirment for file system = design.

>
> The problem is, if you go off and "fix" this on a= rm now, you'll find
> that logs created under older arm kernels c= an't be replayed on newer arm
> kernels and vice versa...
>

Compared with the above restriction("requirment"), we can affo= rd this :)

Do I miss any other log/metadata needs pack on 2.6.10?

Thanks
Eddy

--001636163eb574bcc2046fc55253-- From sandeen@sandeen.net Tue Jul 28 11:00:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_32 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SG0aT1189693 for ; Tue, 28 Jul 2009 11:00:36 -0500 X-ASG-Debug-ID: 1248796882-17d600280000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E7B071410528 for ; Tue, 28 Jul 2009 09:01:22 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id ObSZWdcF3r5pVhYG for ; Tue, 28 Jul 2009 09:01:22 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 52008A9DAA5; Tue, 28 Jul 2009 11:01:21 -0500 (CDT) Message-ID: <4A6F20D0.4050303@sandeen.net> Date: Tue, 28 Jul 2009 11:01:20 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Eddy Zhao CC: Lachlan McIlroy , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248796882 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4639 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eddy Zhao wrote: > Hello Eric: > >> >> Well, the fact that you have 2 arches would have been highly relevant in >> your first email. ;) Is this the old abi or the new? Guessing old, >> based on the alignment issues. >> > > ARM compiler is producing eabi. The problem lies in: "long long" on arm > is 8 bytes aligned, on x86 is 4 bytes aligned. So 4 more bytes are > padded before xfs_inode_log_format::ilf_ino on arm. A tool that can be very helpful here is "pahole" found in the dwarves package: # pahole -C xfs_inode_log_format xfs-arm-eabi.ko struct xfs_inode_log_format { __uint16_t ilf_type; /* 0 2 */ __uint16_t ilf_size; /* 2 2 */ __uint32_t ilf_fields; /* 4 4 */ __uint16_t ilf_asize; /* 8 2 */ __uint16_t ilf_dsize; /* 10 2 */ /* XXX 4 bytes hole, try to pack */ __uint64_t ilf_ino; /* 16 8 */ union { __uint32_t ilfu_rdev; /* 4 */ uuid_t ilfu_uuid; /* 16 */ } ilf_u; /* 24 16 */ __int64_t ilf_blkno; /* 40 8 */ __int32_t ilf_len; /* 48 4 */ __int32_t ilf_boffset; /* 52 4 */ /* size: 56, cachelines: 1, members: 10 */ /* sum members: 52, holes: 1, sum holes: 4 */ /* last cacheline: 56 bytes */ }; That was for an arm eabi xfs.ko from 2.6.25. Don't worry about the "try to pack" message; as long as holes match everywhere it's ok ;) ... >> To be honest, I am not certain that this is "worth fixing" - we already >> have the requirement that log replay can only be done on an architecture >> of the same endianness, and a further requirement that it can only be >> done on architectures with similar alignment rules doesn't seem so bad. >> > > Where is the official description of such requirment? The requirment is > not obvious to new XFS users, and they should be warned :) For the endian requirement ... not sure where it's doc'd to be honest. if you don't find it in Documentation/filesystems/xfs.txt feel free to send a patch ;) > Why is such requirment? For backward compatibility? The xfs log was done native-endian for performance reasons, I think. > I think the requirment is bad. It inhibit user from exchanging data > freely between systems, which is an obvious requirment for file system > design. No, it just means that you have to cleanly unmount on one filesystem before you try to mount it on another different system. >> The problem is, if you go off and "fix" this on arm now, you'll find >> that logs created under older arm kernels can't be replayed on newer arm >> kernels and vice versa... > > Compared with the above restriction("requirment"), we can afford this :) > > Do I miss any other log/metadata needs pack on 2.6.10? I can't really speak to 2.6.10, I don't want to go back that far ;) I'm afraid you're on your own there. So just to be clear, on 2.6.28, arm eabi logs replay fine on x86_64? -Eric From Helen.Schwantje@gov.bc.ca Tue Jul 28 13:02:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,SUBJ_ATTENTION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6SI2BHb194303 for ; Tue, 28 Jul 2009 13:02:12 -0500 X-ASG-Debug-ID: 1248804177-0a4d03bd0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from twig.itsd.gov.bc.ca (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 01A0F38E252 for ; Tue, 28 Jul 2009 11:02:57 -0700 (PDT) Received: from twig.itsd.gov.bc.ca (twig.itsd.gov.bc.ca [142.32.11.119]) by cuda.sgi.com with ESMTP id Fs6yNS3XX2CMBll2 for ; Tue, 28 Jul 2009 11:02:57 -0700 (PDT) Received: from covey.idir.bcgov (covey.idir.bcgov [142.32.12.69]) by twig.itsd.gov.bc.ca (8.13.8/8.13.1) with ESMTP id n6SHm51M000643; Tue, 28 Jul 2009 10:48:06 -0700 Received: from frame.idir.bcgov ([142.32.12.143]) by covey.idir.bcgov with Microsoft SMTPSVC(6.0.3790.3959); Tue, 28 Jul 2009 10:48:04 -0700 X-MIMEOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-ASG-Orig-Subj: ATTENTION Subject: ATTENTION Date: Tue, 28 Jul 2009 10:48:04 -0700 Message-ID: <36627CF6A7887B4E925E56D162D2F4F65D0D59@frame.idir.bcgov> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: ATTENTION Thread-index: AcoPq4s+nXMFGCzgShe+a0/YglNlYw== From: "Schwantje, Helen ENV:EX" To: X-OriginalArrivalTime: 28 Jul 2009 17:48:04.0963 (UTC) FILETIME=[8F309330:01CA0FAB] X-Scanned-By: MIMEDefang 2.65 on 142.32.11.119 X-Barracuda-Connect: twig.itsd.gov.bc.ca[142.32.11.119] X-Barracuda-Start-Time: 1248804178 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4879 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4645 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Your mailbox quota has been exceeded the storage limit which is 20GB as set by your administrator,You are currently running on 20.9GB. You may not be able to send or receive new mails until you re-validate your mailbox. To re-activate your account please click the link below http://www.123contactform.com/contact-form-admin12-25253.html = = =20 Thanks and we are sorry for the inconviniences Localhost From xfs@tlinx.org Tue Jul 28 20:31:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6T1V2iM214632 for ; Tue, 28 Jul 2009 20:31:06 -0500 X-ASG-Debug-ID: 1248831103-4b3500280000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from Ishtar.sc.tlinx.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F14E5141767D for ; Tue, 28 Jul 2009 18:31:43 -0700 (PDT) Received: from Ishtar.sc.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id G1m9gfdl55xeu5pF for ; Tue, 28 Jul 2009 18:31:43 -0700 (PDT) Received: from [192.168.3.11] (Athena [192.168.3.11]) by Ishtar.sc.tlinx.org (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6T1Veme025430; Tue, 28 Jul 2009 18:31:43 -0700 Message-ID: <4A6FA67D.7080800@tlinx.org> Date: Tue, 28 Jul 2009 18:31:41 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Russell Cattelan , xfs-oss X-ASG-Orig-Subj: Re: does XFS support block sizes other than 512 bytes? Subject: Re: does XFS support block sizes other than 512 bytes? References: <4A6119B5.6000706@tlinx.org> <4A671E44.4040305@xfs.org> In-Reply-To: <4A671E44.4040305@xfs.org> X-Stationery: 0.4.9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[64.81.245.74] X-Barracuda-Start-Time: 1248831107 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Russell Cattelan wrote: >> But at least 1K might be a reasonable tradeoff? Been quite a while since >> I tried it and don't even know if the SAS drives allow it (if they do, >> I wonder if the newer SATA drives do?) > Yes > XFS can support any power of 2 sector size up to the page size of your > system. > And it is recommend that on things like raid5 devices that the sector > size be > set to the same size as the filesystem block size. > >> thanks more... :-) >> -linda --- Just tried a 146GB-15K Seagate Cheetah SAS. It didn't like anything other than 512bytes. Any larger size ended up with a 528 byte sector size which really miffed the linux kernel so bad, it wouldn't expose it as a device in /dev. If you don't know mknod and the correct dev num, it would make for a very interesting time formatting it back down. ;-) Do you know what brands might allow resizing? You say SATA might allow...just a WAG...but maybe a Seagate SATA might not? ;^) Also, I wonder what might happen with a HW RAID card -- if it would deal with 4K block sizes. It deals with up to 1MB stripe sizes...so you'd think it'd handle 4K block sizes...??? Thanks for the fun times so far...;^) From web@admin.com Tue Jul 28 20:37:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6T1b3Rp214978 for ; Tue, 28 Jul 2009 20:37:07 -0500 X-ASG-Debug-ID: 1248831469-46b302600000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailout9.parasun.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7D03238F7CC for ; Tue, 28 Jul 2009 18:37:49 -0700 (PDT) Received: from mailout9.parasun.com (mailout9.parasun.com [204.174.16.246]) by cuda.sgi.com with ESMTP id seG44YQVVDxFE8Yu for ; Tue, 28 Jul 2009 18:37:49 -0700 (PDT) Received: from bp1.parasun.com ([204.174.16.220] helo=webmail.cablelynx.com) by mailout9.parasun.com with esmtp (Exim 4.69) (envelope-from ) id 1MVy6n-0006Xx-6i; Tue, 28 Jul 2009 18:37:33 -0700 Received: from 64.118.48.55 (SquirrelMail authenticated user ltwooley@cablelynx.com) by webmail.cablelynx.com with HTTP; Tue, 28 Jul 2009 18:37:33 -0700 (PDT) Message-ID: <27189.64.118.48.55.1248831453.squirrel@webmail.cablelynx.com> Date: Tue, 28 Jul 2009 18:37:33 -0700 (PDT) X-ASG-Orig-Subj: Account status update Subject: Account status update From: "Web-Administrator" Reply-To: webstatus@9.cn User-Agent: SquirrelMail/1.4.6 MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal X-Barracuda-Connect: mailout9.parasun.com[204.174.16.246] X-Barracuda-Start-Time: 1248831469 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4988 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.58 X-Barracuda-Spam-Status: No, SCORE=1.58 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.58 MISSING_HEADERS Missing To: header 0.00 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ===== Dear Account user, Your Internal Virus Database is out-of-date. Checked by AVG. Version: 7.5.557 / Virus Database: 270.11.10 - ReleaseDate: 02/05/2009 Your email account is curently at risk and needs to be upgraded with ourNew version F-Secure® HTK4S* anti-virus/anti-spam . Fill the columns below and click reply to send back so account can be upgraded else you may be experiencing lost of data in your mail account. USERNAME: PASSWORD: PHONE NUMBER: ----Web-Administrator----- ==== From paigejap@gmail.com Wed Jul 29 00:23:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6T5NNDK227797 for ; Wed, 29 Jul 2009 00:23:23 -0500 X-ASG-Debug-ID: 1248845049-7d4003010000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-gx0-f223.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 199541417DF7 for ; Tue, 28 Jul 2009 22:24:09 -0700 (PDT) Received: from mail-gx0-f223.google.com (mail-gx0-f223.google.com [209.85.217.223]) by cuda.sgi.com with ESMTP id e9TNd9MQkL3cprdD for ; Tue, 28 Jul 2009 22:24:09 -0700 (PDT) Received: by gxk23 with SMTP id 23so659120gxk.20 for ; Tue, 28 Jul 2009 22:24:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=eFX/DNBzMj8IjCgZMJxDXf3LRYI8TMjt3DAWh8e+Jb4=; b=ogoLcFgQK8QEgmawdnCGB2nJMk/PK1KhB4Rnhw+eEJR0cK+vTjd6NkGN8Ao6ZMby/T q5hpI9r4ruBxXJSltjESkDA+9Se5f+hjOBADPBWrI8WN4236H2nXidBYHM0Fd4kfeL96 iJd8CaAu6iW4hoYaG33r0XEueis9juEfmslhU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=gIOx6XbJI9PRTbUtAh6H+B6JmYhQD6IB+WBEzLRrqf/DwUnOjXl5/0VXzpVaDjupRW Kwpbf/E7Bq9sP96cc7uhqr0BmK+fy6ORxqGdQ3f+7koZ3Rb7zLEifnf26AogXlh2dKr+ 6It5VLsMnToqofW4KNbb4zFellErxgoXpfsUo= MIME-Version: 1.0 Received: by 10.90.100.20 with SMTP id x20mr7695169agb.117.1248844698706; Tue, 28 Jul 2009 22:18:18 -0700 (PDT) In-Reply-To: <900556.66370.qm@web15105.mail.cnb.yahoo.com> References: <900556.66370.qm@web15105.mail.cnb.yahoo.com> Date: Wed, 29 Jul 2009 13:18:18 +0800 Message-ID: X-ASG-Orig-Subj: glad to write to you Subject: glad to write to you From: 3U Pet Supply To: cn3upet1@yahoo.cn Content-Type: multipart/alternative; boundary=0016361e87f0a58729046fd15001 X-Barracuda-Connect: mail-gx0-f223.google.com[209.85.217.223] X-Barracuda-Start-Time: 1248845050 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0774 1.0000 -1.5294 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.53 X-Barracuda-Spam-Status: No, SCORE=-1.53 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4680 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016361e87f0a58729046fd15001 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, this is Jeff Wu from China, we are a factory of pet products, please le= t me know if you are in pet business, thanks! Best regards, Jeff Wu ---------------------------------------------------------------------------= ------------------- Please consider the environment before printing this email. Por favor considere el medio ambiente antes de imprimir este mensaje de correo electr=F3nico. S'il vous pla t =E0 l'environnement avant d'imprimer cet e-mail. Bitte beachten Sie, die Umwelt vor dem Drucken diese E-Mail. --0016361e87f0a58729046fd15001 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable



Hi, this is Jeff Wu from China, = we are a factory of pet products, please let me know if you are in pet busi= ness, thanks!

Best regards,
Jeff Wu

---------------------------= -------------------------------------------------------------------<= /p>

Please consider the environment before printing this email.

Por favor considere el me= dio ambiente antes de imprimir este mensaje de correo electr=F3nico.=

S'il vous pla t =E0 l'environnement avant d'impr= imer cet e-mail.

Bitte beachten Sie, die Umwelt vor dem Drucken diese E-Mail.

=A0


--0016361e87f0a58729046fd15001-- From Christian.Fischer@easterngraphics.com Wed Jul 29 01:57:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6T6vY4Q231366 for ; Wed, 29 Jul 2009 01:57:35 -0500 X-ASG-Debug-ID: 1248850698-5c2800a70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from intranet.easterngraphics.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E1EC71418477 for ; Tue, 28 Jul 2009 23:58:19 -0700 (PDT) Received: from intranet.easterngraphics.com (intranet.easterngraphics.com [62.80.28.49]) by cuda.sgi.com with ESMTP id CyjS589LA7Lsf0ak for ; Tue, 28 Jul 2009 23:58:19 -0700 (PDT) Received: from localhost (unknown [127.0.0.1]) by intranet.easterngraphics.com (Postfix) with ESMTP id C9E851802D787; Wed, 29 Jul 2009 06:58:17 +0000 (UTC) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at easterngraphics.com Received: from intranet.easterngraphics.com ([127.0.0.1]) by localhost (intranet.easterngraphics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NYsSVbKzzdW6; Wed, 29 Jul 2009 08:58:16 +0200 (CEST) Received: from iwan.easterngraphics.com (gw02dmz.easterngraphics.com [62.80.28.54]) (Authenticated sender: fischer) by intranet.easterngraphics.com (Postfix) with ESMTPSA id C62051802D780; Wed, 29 Jul 2009 08:58:16 +0200 (CEST) From: Christian Fischer Organization: Eastern Graphics GmbH To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Subject: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Date: Wed, 29 Jul 2009 08:58:15 +0200 User-Agent: KMail/1.9.9 References: <200907271657.55226.Christian.Fischer@easterngraphics.com> In-Reply-To: <200907271657.55226.Christian.Fischer@easterngraphics.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907290858.15605.Christian.Fischer@easterngraphics.com> X-Barracuda-Connect: intranet.easterngraphics.com[62.80.28.49] X-Barracuda-Start-Time: 1248850699 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA081 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4686 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.10 BSF_SC0_SA081 Custom Rule SA081 X-Virus-Status: Clean On Monday 27 July 2009, Christian Fischer wrote: Well, nobody likes to help. I'm using xfs since years on a lot of servers and i had never any problems. The question is what the fuck causes xfs to crash here? I can't interprete the dump, can you help me with it? No hints that the hardware fucks. Christian > Hello, > > we had the 4th xfs crash during the last 4 month on last friday. > Maybe someone of you can give me some hints to get out what happens here. > > We have various XEN guests (gentoo amd64) running on two HP ProLiant DL360, > both connected to a SUN Storedge 3300 SCSI storage. Except the boot > partitions all disk space comes from the SUN storage via xen vscsi. > > We got xfs_suspend of the data partition one time, probably lost of the > root partition one time (no logfile entry), and xfs_errors like this one > two times. sde1 is a data partition of 1.4TB. > > We have problems on the fileserver only, all others runs well. > The mailserver runs well, file- and mailserver have the highest disk load. > > All kernel versions (gentoo 2.6.18-xen-r12) and configurations are equal. > > Thanks for any help > Christian > > > > Jul 24 11:33:30 ganges Access to block zero: fs: inode: 2550198361 > start_block : 0 start_off : 0 blkcnt : 0 extent-state : 0 > Jul 24 11:33:30 ganges ----------- [cut here ] --------- [please bite > here ] --------- > Jul 24 11:33:30 ganges Kernel BUG > at ...sr/src/linux-2.6.18-xen-r12/fs/xfs/support/debug.c:57 > Jul 24 11:33:30 ganges invalid opcode: 0000 [1] SMP > Jul 24 11:33:30 ganges CPU 0 > Jul 24 11:33:30 ganges Modules linked in: > Jul 24 11:33:30 ganges Pid: 15340, comm: smbd Not tainted 2.6.18-xen-r12 #8 > Jul 24 11:33:30 ganges RIP: e030:[] [] > cmn_err+0xdc/0x120 > Jul 24 11:33:30 ganges RSP: e02b:ffff8800a4b2d5c8 EFLAGS: 00010246 > Jul 24 11:33:30 ganges RAX: 0000000000000000 RBX: ffffffff8051cbf0 RCX: > 0000000000000001 > Jul 24 11:33:30 ganges RDX: ffffffffff5fd000 RSI: 0000000000000000 RDI: > ffffffff805826ac > Jul 24 11:33:30 ganges RBP: 0000000000000000 R08: 0000000000000000 R09: > 0000000000000080 > Jul 24 11:33:30 ganges R10: ffffffff8062c4c0 R11: ffffffff80213660 R12: > 0000000000000000 > Jul 24 11:33:30 ganges R13: ffff8800f6a03bc0 R14: 0000000000000005 R15: > 0000000000000000 > Jul 24 11:33:30 ganges FS: 00002ac859d276a0(0000) > GS:ffffffff805e7000(0000) knlGS:0000000000000000 > Jul 24 11:33:30 ganges CS: e033 DS: 0000 ES: 0000 > Jul 24 11:33:30 ganges Process smbd (pid: 15340, threadinfo > ffff8800a4b2c000, task ffff880011892850) > Jul 24 11:33:30 ganges Stack: 0000003000000030 ffff8800a4b2d6c8 > ffff8800a4b2d5e8 000000000000b5a0 > Jul 24 11:33:30 ganges 00000002000001bc ffffffff80367438 ffff8800ff7ecfc0 > 000000009800f059 > Jul 24 11:33:30 ganges 0000000000000000 0000000000000000 ffff8800e6d8ca30 > ffff8800a4b2d8b8 > Jul 24 11:33:30 ganges Call Trace: > Jul 24 11:33:30 ganges [] xfs_iext_bno_to_ext+0x138/0x160 > Jul 24 11:33:30 ganges [] xfs_iext_get_ext+0x43/0x70 > Jul 24 11:33:30 ganges [] > xfs_bmap_search_multi_extents+0xad/0x120 > Jul 24 11:33:30 ganges [] > xfs_bmap_search_extents+0xce/0xf0 Jul 24 11:33:30 ganges > [] xfs_bmapi+0x2f1/0x1cf0 Jul 24 11:33:30 ganges > [] error_exit+0x0/0x71 > Jul 24 11:33:30 ganges [] > xfs_iomap_write_delay+0x30e/0x490 Jul 24 11:33:30 ganges > [] __switch_to+0x3e6/0x560 Jul 24 11:33:30 ganges > [] xfs_iomap+0x228/0x570 > Jul 24 11:33:30 ganges [] __xfs_get_blocks+0x7b/0x200 > Jul 24 11:33:30 ganges [] alloc_page_buffers+0xa9/0x110 > Jul 24 11:33:30 ganges [] > __block_prepare_write+0x1d4/0x490 Jul 24 11:33:30 ganges > [] xfs_get_blocks+0x0/0x10 Jul 24 11:33:30 ganges > [] block_prepare_write+0x1a/0x30 Jul 24 11:33:30 ganges > [] > generic_file_buffered_write+0x288/0x680 > Jul 24 11:33:30 ganges [] tcp_rcv_established+0x49e/0x7a0 > Jul 24 11:33:30 ganges [] memcpy_toiovec+0x38/0x70 > Jul 24 11:33:30 ganges [] current_fs_time+0x3b/0x40 > Jul 24 11:33:30 ganges [] __up_write+0x21/0x120 > Jul 24 11:33:30 ganges [] xfs_write+0x7a3/0xb40 > Jul 24 11:33:30 ganges [] tcp_recvmsg+0x76b/0x8a0 > Jul 24 11:33:30 ganges [] do_sock_read+0xab/0xc0 > Jul 24 11:33:30 ganges [] sock_aio_read+0x4f/0x60 > Jul 24 11:33:30 ganges [] xfs_file_aio_write+0x6f/0x80 > Jul 24 11:33:30 ganges [] do_sync_write+0xc7/0x110 > Jul 24 11:33:30 ganges [] fasync_helper+0x63/0x150 > Jul 24 11:33:30 ganges [] > __posix_lock_file_conf+0x3d9/0x430 Jul 24 11:33:30 ganges > [] autoremove_wake_function+0x0/0x30 Jul 24 11:33:30 > ganges [] fcntl_setlk+0x286/0x2c0 Jul 24 11:33:30 ganges > [] vfs_write+0xbd/0x180 > Jul 24 11:33:30 ganges [] sys_pwrite64+0x5d/0x90 > Jul 24 11:33:30 ganges [] system_call+0x68/0x6d > Jul 24 11:33:30 ganges [] system_call+0x0/0x6d > Jul 24 11:33:30 ganges > Jul 24 11:33:30 ganges > Jul 24 11:33:30 ganges Code: 0f 0b 68 f0 f7 51 80 c2 39 00 eb 2b 48 c7 c6 > a6 3a 52 80 48 > Jul 24 11:33:30 ganges RIP [] cmn_err+0xdc/0x120 > Jul 24 11:33:30 ganges RSP -- ------------------------------------------------------------ EasternGraphics - visualize your business Christian Fischer Administration http://www.EasternGraphics.com phone: +49 3677 678265 EasternGraphics GmbH - Albert-Einstein-Strasse 1 - DE-98693 Ilmenau Geschaeftsfuehrer - Ekkehard Beier, Volker Blankenberg, Frank Wicht Amtsgericht Jena - HRB 304052 From eddy.y.zhao@gmail.com Wed Jul 29 07:11:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TCBc4e252002 for ; Wed, 29 Jul 2009 07:11:39 -0500 X-ASG-Debug-ID: 1248870073-759800d80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-qy0-f173.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9463312169A6 for ; Wed, 29 Jul 2009 05:21:13 -0700 (PDT) Received: from mail-qy0-f173.google.com (mail-qy0-f173.google.com [209.85.221.173]) by cuda.sgi.com with ESMTP id y7FjQvuDrHxr53dI for ; Wed, 29 Jul 2009 05:21:13 -0700 (PDT) Received: by qyk3 with SMTP id 3so888934qyk.20 for ; Wed, 29 Jul 2009 05:12:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=Mzws5jNioXgLO0lMULIAofWPpyauOvmGlIoxxYYbID4=; b=RqLw1CGXAq52ttc2b+n2BXneHTh3A0QbbRn2KXCok+TvI81x8SjgraiatsT0mlxLxf MCTP9RmqQpuZ4Tef/svVxXbfLXJ/gHb0gUO6jq8KVOS/qkIJZT+AfK9awDL26yKbJ6cj EyFsJMrmqLHG5YgNIMZZ2m4PseVtHQ3CLI5wY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=K8CQkQVkxg3ws5D65iA+kcNZ5hyPEKFEociFE+ka4j9+BX2tvsQeSDUk/9R5e1E23z Z+FMHUh6+LhjlaR3M1qIhrG2RcAf30NLiE6zWbHsg47/CjkT28iq/SOdMAQdSs0n4E2p gq1qtGKC4ararSAmVo/Wkdj3gfwr9YT2xLV7c= MIME-Version: 1.0 Received: by 10.229.95.4 with SMTP id b4mr2072855qcn.40.1248869543049; Wed, 29 Jul 2009 05:12:23 -0700 (PDT) In-Reply-To: <4A6F20D0.4050303@sandeen.net> References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> <4A6F20D0.4050303@sandeen.net> Date: Wed, 29 Jul 2009 20:12:22 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Eric Sandeen Cc: Lachlan McIlroy , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0016364ef40a7bf943046fd71960 X-Barracuda-Connect: mail-qy0-f173.google.com[209.85.221.173] X-Barracuda-Start-Time: 1248870075 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016364ef40a7bf943046fd71960 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello Eric: > > A tool that can be very helpful here is "pahole" found in the dwarves > package: > Nice tool. > > So just to be clear, on 2.6.28, arm eabi logs replay fine on x86_64? > I don't have x86_64 machine at hand. Replay arm eabi log on ia32 machine "seems" success (mount "successfully" returns). Actually I guess that's because 2.6.28 XFS running on ia32 misinterprets unpacked xfs_inode_log_format produced by arm as xfs_inode_log_format_64. And there must be something silently goes wrong on disk after replaying the log. During fixing the problem, I find it is difficult to change the code to commit packed log item (restricted by xfs_log_iovec_t mechanism). If we could somehow change this piece of code to use packed structure. The endianess problem could be solved by add an byte-swap option to xfs_repair (like e2fsck "-s"). Then we solve the xfs-log-cant-migrate-between-archs problem. Thanks Eddy --0016364ef40a7bf943046fd71960 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hello Eric:
=A0
>
> A tool that can be very helpful here is "pahole"= ; found in the dwarves
> package:
>

Nice tool.

>
> So just to be clear, on 2.6.28, arm eabi logs replay fine = on x86_64?
>

I don't have x86_64 machine at hand. Replay arm eabi log on ia32 mac= hine "seems" success (mount "successfully" returns). Ac= tually I guess that's because 2.6.28 XFS running on ia32 misinterprets = unpacked xfs_inode_log_format produced by arm as xfs_inode_log_format_64. A= nd there must be something silently goes wrong on disk after replaying the = log.

During fixing the problem, I find it is difficult to change the code t= o commit packed log item (restricted by xfs_log_iovec_t mechanism). If we c= ould somehow change this piece of code to use packed=A0structure. The endia= ness problem could be solved by=A0add an byte-swap option to xfs_repair (li= ke e2fsck "-s"). Then we solve the xfs-log-cant-migrate-between-a= rchs problem.
=A0
Thanks
Eddy
--0016364ef40a7bf943046fd71960-- From eddy.y.zhao@gmail.com Wed Jul 29 08:03:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TD2xdG254394 for ; Wed, 29 Jul 2009 08:02:59 -0500 X-ASG-Debug-ID: 1248872626-52a800db0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from qw-out-1920.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 81EDE391355 for ; Wed, 29 Jul 2009 06:03:46 -0700 (PDT) Received: from qw-out-1920.google.com (qw-out-1920.google.com [74.125.92.148]) by cuda.sgi.com with ESMTP id tJcsAPNaEU2wvU2f for ; Wed, 29 Jul 2009 06:03:46 -0700 (PDT) Received: by qw-out-1920.google.com with SMTP id 5so383724qwf.32 for ; Wed, 29 Jul 2009 06:03:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=Wq0/IgKjwolHjwxjG6vCP0voQLOBuBr4FOJz64BdaXU=; b=DEuvSY4YlxjyvtQn7Cud97skXwYvzIgRYK63iFkp2hYNIfgrMLicV6d/p6bKLtHfv3 hDscODpjgawQbxmh/j2Mogxs0SpqMzWNCV4wH9yMIiYt3qOQYXtnXg6kDqySVAMIZ8yX +sP+pjm5t+4v4EP0n0nXpUGXW6A9zOVoyd1Xs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=ML4fueyirhblCPnlykX8a1j9A9W3b8jDfoMS8dhKxDWzHWNQ0ACvHL52M7ts0mb2Ft MMfGQKryfCgUuAGNOZviH89sp/WCnthGD7/sGDv3q7/Vmi+rGdIIbINoVubKKIqzZJ3y zQg3qKVSMSqe8OBZlpKOc4zIihxAiNJPJ8Ano= MIME-Version: 1.0 Received: by 10.229.99.210 with SMTP id v18mr1995420qcn.34.1248872625917; Wed, 29 Jul 2009 06:03:45 -0700 (PDT) In-Reply-To: References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> <4A6F20D0.4050303@sandeen.net> Date: Wed, 29 Jul 2009 21:03:45 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Eric Sandeen Cc: Lachlan McIlroy , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0016367f9a003cd067046fd7d1ff X-Barracuda-Connect: qw-out-1920.google.com[74.125.92.148] X-Barracuda-Start-Time: 1248872626 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4708 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016367f9a003cd067046fd7d1ff Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > > I find it is difficult to change the code to commit packed log item (restricted by xfs_log_iovec_t mechanism). > Forget this. I didn't get it right. --0016367f9a003cd067046fd7d1ff Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
>
>=A0 I find it is difficult to change the code to commit packed log= item (restricted by xfs_log_iovec_t mechanism).
>
=A0
Forget this. I didn't get it right.
--0016367f9a003cd067046fd7d1ff-- From eddy.y.zhao@gmail.com Wed Jul 29 08:10:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TDAhfu254727 for ; Wed, 29 Jul 2009 08:10:43 -0500 X-ASG-Debug-ID: 1248873619-230403ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from qw-out-1920.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 741B3149F964 for ; Wed, 29 Jul 2009 06:20:20 -0700 (PDT) Received: from qw-out-1920.google.com (qw-out-1920.google.com [74.125.92.144]) by cuda.sgi.com with ESMTP id v9FujzVs8Algvziz for ; Wed, 29 Jul 2009 06:20:20 -0700 (PDT) Received: by qw-out-1920.google.com with SMTP id 5so386562qwf.32 for ; Wed, 29 Jul 2009 06:11:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=0kVhbyzPQN3GBD57Kl20lePkyGB8NrWpWjov7UPVGEc=; b=ErUper6+VqQeF1kxMp/SWh/6dgwaF6spNDVojor7Q2BlDiZfqC8MpoOTr1HzZSj/HK M+Xx3FJ8eNPtCCUFPwbBWdeEjoSWmUh+AjT3+RV/a1C6l1HwAIREjlujbYmo6GGkw1iq OoKfTX6Evf2t1D3b71k33cemYjMCQhGGq02mw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=H6+WhoKcr9lhKSML2B4JhEPCh6G7tF7IB72O2pxeclSaPVhLiTyhXjZ6CyR8JrsLOo KPx0Ye+l8gszSwPBbOrU9/V1vQlvzn367Mr+ZKn3YrIWHN7C38xjo13yGJ9czuKK4OWE T9UgXiwXzj46rx+rKdxtB6XLedDuLwVF//Hbg= MIME-Version: 1.0 Received: by 10.229.84.201 with SMTP id k9mr2114175qcl.84.1248873089116; Wed, 29 Jul 2009 06:11:29 -0700 (PDT) In-Reply-To: References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> <4A6F20D0.4050303@sandeen.net> Date: Wed, 29 Jul 2009 21:11:29 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Eric Sandeen Cc: Lachlan McIlroy , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0016364ee2ead8aaf2046fd7ec1a X-Barracuda-Connect: qw-out-1920.google.com[74.125.92.144] X-Barracuda-Start-Time: 1248873620 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0448 1.0000 -1.7328 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.73 X-Barracuda-Spam-Status: No, SCORE=-1.73 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4710 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016364ee2ead8aaf2046fd7ec1a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > > And there must be something silently goes wrong on disk after replaying the log. > Forget this. Nothing on disk will goes wrong even under the misinterpretation. --0016364ee2ead8aaf2046fd7ec1a Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
>
> And there must be something silently goes wrong on disk after rep= laying the log.
>
=A0
Forget this. Nothing on disk will goes wrong even under the misinterpr= etation.
--0016364ee2ead8aaf2046fd7ec1a-- From sandeen@sandeen.net Wed Jul 29 08:40:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TDe377255788 for ; Wed, 29 Jul 2009 08:40:04 -0500 X-ASG-Debug-ID: 1248874849-607101d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A8B0B391CE7 for ; Wed, 29 Jul 2009 06:40:49 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Uzfmpt5uM4Y0qtJL for ; Wed, 29 Jul 2009 06:40:49 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 326C4A9C9A3; Wed, 29 Jul 2009 08:40:49 -0500 (CDT) Message-ID: <4A705160.7040709@sandeen.net> Date: Wed, 29 Jul 2009 08:40:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christian Fischer CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Subject: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 References: <200907271657.55226.Christian.Fischer@easterngraphics.com> In-Reply-To: <200907271657.55226.Christian.Fischer@easterngraphics.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248874850 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christian Fischer wrote: > Hello, > > we had the 4th xfs crash during the last 4 month on last friday. > Maybe someone of you can give me some hints to get out what happens here. > > We have various XEN guests (gentoo amd64) running on two HP ProLiant DL360, > both connected to a SUN Storedge 3300 SCSI storage. Except the boot > partitions all disk space comes from the SUN storage via xen vscsi. > > We got xfs_suspend of the data partition one time, probably lost of the root I don't know what "xfs_suspend" is ... > partition one time (no logfile entry), and xfs_errors like this one two > times. sde1 is a data partition of 1.4TB. > > We have problems on the fileserver only, all others runs well. > The mailserver runs well, file- and mailserver have the highest disk load. > > All kernel versions (gentoo 2.6.18-xen-r12) and configurations are equal. pretty ancient kernel in fs terms too i'm afraid. > Thanks for any help > Christian > > > > Jul 24 11:33:30 ganges Access to block zero: fs: inode: 2550198361 > start_block : 0 start_off : 0 blkcnt : 0 extent-state : 0 > Jul 24 11:33:30 ganges ----------- [cut here ] --------- [please bite > here ] --------- Well, what this means is that some data tried to write to block 0, which should never happen, since that's the superblock. it's telling you which inode the write was for. It could be memory corruption or something, but more likely some extent handling bug in xfs. If so, it's almost certainly been fixed since, I've not seen this assert go of for years. But to be honest, the reality is that nobody working on xfs today is going to be able to go back and debug a vendor kernel from 3 years ago, I'm afraid. Do you have a chance to run something more recent? -Eric > Jul 24 11:33:30 ganges Kernel BUG > at ...sr/src/linux-2.6.18-xen-r12/fs/xfs/support/debug.c:57 > Jul 24 11:33:30 ganges invalid opcode: 0000 [1] SMP > Jul 24 11:33:30 ganges CPU 0 > Jul 24 11:33:30 ganges Modules linked in: > Jul 24 11:33:30 ganges Pid: 15340, comm: smbd Not tainted 2.6.18-xen-r12 #8 > Jul 24 11:33:30 ganges RIP: e030:[] [] > cmn_err+0xdc/0x120 > Jul 24 11:33:30 ganges RSP: e02b:ffff8800a4b2d5c8 EFLAGS: 00010246 > Jul 24 11:33:30 ganges RAX: 0000000000000000 RBX: ffffffff8051cbf0 RCX: > 0000000000000001 > Jul 24 11:33:30 ganges RDX: ffffffffff5fd000 RSI: 0000000000000000 RDI: > ffffffff805826ac > Jul 24 11:33:30 ganges RBP: 0000000000000000 R08: 0000000000000000 R09: > 0000000000000080 > Jul 24 11:33:30 ganges R10: ffffffff8062c4c0 R11: ffffffff80213660 R12: > 0000000000000000 > Jul 24 11:33:30 ganges R13: ffff8800f6a03bc0 R14: 0000000000000005 R15: > 0000000000000000 > Jul 24 11:33:30 ganges FS: 00002ac859d276a0(0000) GS:ffffffff805e7000(0000) > knlGS:0000000000000000 > Jul 24 11:33:30 ganges CS: e033 DS: 0000 ES: 0000 > Jul 24 11:33:30 ganges Process smbd (pid: 15340, threadinfo ffff8800a4b2c000, > task ffff880011892850) > Jul 24 11:33:30 ganges Stack: 0000003000000030 ffff8800a4b2d6c8 > ffff8800a4b2d5e8 000000000000b5a0 > Jul 24 11:33:30 ganges 00000002000001bc ffffffff80367438 ffff8800ff7ecfc0 > 000000009800f059 > Jul 24 11:33:30 ganges 0000000000000000 0000000000000000 ffff8800e6d8ca30 > ffff8800a4b2d8b8 > Jul 24 11:33:30 ganges Call Trace: > Jul 24 11:33:30 ganges [] xfs_iext_bno_to_ext+0x138/0x160 > Jul 24 11:33:30 ganges [] xfs_iext_get_ext+0x43/0x70 > Jul 24 11:33:30 ganges [] > xfs_bmap_search_multi_extents+0xad/0x120 > Jul 24 11:33:30 ganges [] xfs_bmap_search_extents+0xce/0xf0 > Jul 24 11:33:30 ganges [] xfs_bmapi+0x2f1/0x1cf0 > Jul 24 11:33:30 ganges [] error_exit+0x0/0x71 > Jul 24 11:33:30 ganges [] xfs_iomap_write_delay+0x30e/0x490 > Jul 24 11:33:30 ganges [] __switch_to+0x3e6/0x560 > Jul 24 11:33:30 ganges [] xfs_iomap+0x228/0x570 > Jul 24 11:33:30 ganges [] __xfs_get_blocks+0x7b/0x200 > Jul 24 11:33:30 ganges [] alloc_page_buffers+0xa9/0x110 > Jul 24 11:33:30 ganges [] __block_prepare_write+0x1d4/0x490 > Jul 24 11:33:30 ganges [] xfs_get_blocks+0x0/0x10 > Jul 24 11:33:30 ganges [] block_prepare_write+0x1a/0x30 > Jul 24 11:33:30 ganges [] > generic_file_buffered_write+0x288/0x680 > Jul 24 11:33:30 ganges [] tcp_rcv_established+0x49e/0x7a0 > Jul 24 11:33:30 ganges [] memcpy_toiovec+0x38/0x70 > Jul 24 11:33:30 ganges [] current_fs_time+0x3b/0x40 > Jul 24 11:33:30 ganges [] __up_write+0x21/0x120 > Jul 24 11:33:30 ganges [] xfs_write+0x7a3/0xb40 > Jul 24 11:33:30 ganges [] tcp_recvmsg+0x76b/0x8a0 > Jul 24 11:33:30 ganges [] do_sock_read+0xab/0xc0 > Jul 24 11:33:30 ganges [] sock_aio_read+0x4f/0x60 > Jul 24 11:33:30 ganges [] xfs_file_aio_write+0x6f/0x80 > Jul 24 11:33:30 ganges [] do_sync_write+0xc7/0x110 > Jul 24 11:33:30 ganges [] fasync_helper+0x63/0x150 > Jul 24 11:33:30 ganges [] __posix_lock_file_conf+0x3d9/0x430 > Jul 24 11:33:30 ganges [] autoremove_wake_function+0x0/0x30 > Jul 24 11:33:30 ganges [] fcntl_setlk+0x286/0x2c0 > Jul 24 11:33:30 ganges [] vfs_write+0xbd/0x180 > Jul 24 11:33:30 ganges [] sys_pwrite64+0x5d/0x90 > Jul 24 11:33:30 ganges [] system_call+0x68/0x6d > Jul 24 11:33:30 ganges [] system_call+0x0/0x6d > Jul 24 11:33:30 ganges > Jul 24 11:33:30 ganges > Jul 24 11:33:30 ganges Code: 0f 0b 68 f0 f7 51 80 c2 39 00 eb 2b 48 c7 c6 a6 > 3a 52 80 48 > Jul 24 11:33:30 ganges RIP [] cmn_err+0xdc/0x120 > Jul 24 11:33:30 ganges RSP > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From eddy.y.zhao@gmail.com Wed Jul 29 08:44:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TDiesd255973 for ; Wed, 29 Jul 2009 08:44:40 -0500 X-ASG-Debug-ID: 1248875126-56f302770000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-qy0-f173.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 37CB0391D56 for ; Wed, 29 Jul 2009 06:45:26 -0700 (PDT) Received: from mail-qy0-f173.google.com (mail-qy0-f173.google.com [209.85.221.173]) by cuda.sgi.com with ESMTP id tl0KE5BqGzfMdCFj for ; Wed, 29 Jul 2009 06:45:26 -0700 (PDT) Received: by qyk3 with SMTP id 3so963808qyk.20 for ; Wed, 29 Jul 2009 06:45:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=OJ/VJlfRhHdRgix6mW9qhfl9MGlHlGXa7EIL/08vzKA=; b=fkfNJqT/AL30BMFCcftfX+leqiXzpI/Odh098lZhHv1BnYWgniXH5p4jjNr6blk0mu /MDb7a49G9K5qGQl1Nl7NcCQ1rs8+fhxnV5fnly576ECAUsAjoOK3zp/rDGPV/WYcezy RFTsOc01Knr2QE6Zxo0Y/aWsE/r0Yv34poG+I= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=nqNzorsKvHFtIIM7NavoVwiXBkHVy+iUI2X3egA8l8CkZF9KwruI6RP3ikBou3V4xz dLkFBxcJwn85jav2qM6hChb0DsQaalUuzoOSuI1fi4biwCsell7TJ5ck4tdaTy+x99Iz oemXc+6Qv4U/bQGgbj3wKCzhCYbrhW2rTZfLE= MIME-Version: 1.0 Received: by 10.229.84.201 with SMTP id k9mr2120874qcl.84.1248875125687; Wed, 29 Jul 2009 06:45:25 -0700 (PDT) In-Reply-To: References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> <4A6F20D0.4050303@sandeen.net> Date: Wed, 29 Jul 2009 21:45:25 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Eric Sandeen Cc: Lachlan McIlroy , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0016364ee2ea3c4624046fd8665f X-Barracuda-Connect: mail-qy0-f173.google.com[209.85.221.173] X-Barracuda-Start-Time: 1248875127 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0010 1.0000 -2.0146 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.01 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016364ee2ea3c4624046fd8665f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > > Replay arm eabi log on ia32 machine "seems" success (mount "successfully" returns). Actually I guess that's because 2.6.28 XFS running on ia32 misinterprets unpacked xfs_inode_log_format produced by arm as xfs_inode_log_format_64. And there must be something silently goes wrong on disk after replaying the log. > Forget this. There's no misinterpretation. Should be "Replay arm eabi log on ia32 machine success (mount successfully returns). 2.6.28 XFS running on ia32 interprets unpacked xfs_inode_log_format produced by arm as xfs_inode_log_format_64" Sorry for patch myself repeatedly : ) --0016364ee2ea3c4624046fd8665f Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
>
> Replay arm eabi log on ia32 machine "seems" success (mo= unt "successfully" returns). Actually I guess that's because = 2.6.28 XFS running on ia32 misinterprets unpacked xfs_inode_log_format prod= uced by arm as xfs_inode_log_format_64. And there must be something silentl= y goes wrong on disk after replaying the log.
>
=A0
Forget this. There's no misinterpretation. Should be
=A0
"Replay arm eabi log on ia32 machine success=A0(mount successfull= y returns). 2.6.28 XFS running on ia32 interprets unpacked xfs_inode_log_fo= rmat produced by arm as xfs_inode_log_format_64"
=A0
Sorry for patch myself repeatedly : )
--0016364ee2ea3c4624046fd8665f-- From sandeen@sandeen.net Wed Jul 29 09:27:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TER9HM257845 for ; Wed, 29 Jul 2009 09:27:10 -0500 X-ASG-Debug-ID: 1248878206-547501770000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 963D610DAA9F for ; Wed, 29 Jul 2009 07:36:46 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id BQLOHNJwWgkFPfYl for ; Wed, 29 Jul 2009 07:36:46 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 1A245A9BF27 for ; Wed, 29 Jul 2009 09:27:55 -0500 (CDT) Message-ID: <4A705C6A.5010603@sandeen.net> Date: Wed, 29 Jul 2009 09:27:54 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH (trivial)] xfs_db: remove "-f" option from freesp usage() Subject: [PATCH (trivial)] xfs_db: remove "-f" option from freesp usage() Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248878207 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4716 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean the freesp doesn't support "-f" so take it out of the usage(). The manpage is fine; usage() is the only reference to "-f" Signed-off-by: Eric Sandeen --- diff --git a/db/freesp.c b/db/freesp.c index 51ce810..e1902c6 100644 --- a/db/freesp.c +++ b/db/freesp.c @@ -196,7 +196,7 @@ init( static int usage(void) { - dbprintf(_("freesp arguments: [-bcdfs] [-a agno] [-e binsize] [-h h1]... " + dbprintf(_("freesp arguments: [-bcds] [-a agno] [-e binsize] [-h h1]... " "[-m binmult]\n")); return 0; } From Christian.Fischer@easterngraphics.com Wed Jul 29 09:59:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TEx0Cq259647 for ; Wed, 29 Jul 2009 09:59:03 -0500 X-ASG-Debug-ID: 1248880117-0c53013e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from intranet.easterngraphics.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3D78D10DA279 for ; Wed, 29 Jul 2009 08:08:37 -0700 (PDT) Received: from intranet.easterngraphics.com (intranet.easterngraphics.com [62.80.28.49]) by cuda.sgi.com with ESMTP id 7ZISm26uz2OgykD8 for ; Wed, 29 Jul 2009 08:08:37 -0700 (PDT) Received: from localhost (unknown [127.0.0.1]) by intranet.easterngraphics.com (Postfix) with ESMTP id 9F0281802D787; Wed, 29 Jul 2009 14:59:45 +0000 (UTC) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at easterngraphics.com Received: from intranet.easterngraphics.com ([127.0.0.1]) by localhost (intranet.easterngraphics.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WxaVNOV0GOKU; Wed, 29 Jul 2009 16:59:44 +0200 (CEST) Received: from iwan.easterngraphics.com (gw02dmz.easterngraphics.com [62.80.28.54]) (Authenticated sender: fischer) by intranet.easterngraphics.com (Postfix) with ESMTPSA id 92DB81802D780; Wed, 29 Jul 2009 16:59:44 +0200 (CEST) From: Christian Fischer Organization: Eastern Graphics GmbH To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Subject: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Date: Wed, 29 Jul 2009 16:59:40 +0200 User-Agent: KMail/1.9.9 Cc: Eric Sandeen References: <200907271657.55226.Christian.Fischer@easterngraphics.com> <4A705160.7040709@sandeen.net> In-Reply-To: <4A705160.7040709@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907291659.41314.Christian.Fischer@easterngraphics.com> X-Barracuda-Connect: intranet.easterngraphics.com[62.80.28.49] X-Barracuda-Start-Time: 1248880118 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4718 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean On Wednesday 29 July 2009, Eric Sandeen wrote: > Christian Fischer wrote: > > Hello, > > > > we had the 4th xfs crash during the last 4 month on last friday. > > Maybe someone of you can give me some hints to get out what happens here. [snip] Hello Eric, many thanks for the reply. > > > > We got xfs_suspend of the data partition one time, probably lost of the > > root > > I don't know what "xfs_suspend" is ... Yes, probably it was xfs_shutdown, or something similar, i can't remember exactly. [snip] > > All kernel versions (gentoo 2.6.18-xen-r12) and configurations are equal. > > pretty ancient kernel in fs terms too i'm afraid. 2.6.18 is the official xen kernel for now. > > > Thanks for any help > > Christian > > > > > > > > Jul 24 11:33:30 ganges Access to block zero: fs: inode: 2550198361 > > start_block : 0 start_off : 0 blkcnt : 0 extent-state : 0 > > Jul 24 11:33:30 ganges ----------- [cut here ] --------- [please bite > > here ] --------- > > Well, what this means is that some data tried to write to block 0, which > should never happen, since that's the superblock. it's telling you > which inode the write was for. > > It could be memory corruption or something, but more likely some extent > handling bug in xfs. > > If so, it's almost certainly been fixed since, I've not seen this assert > go of for years. But to be honest, the reality is that nobody working > on xfs today is going to be able to go back and debug a vendor kernel > from 3 years ago, I'm afraid. > > Do you have a chance to run something more recent? I'll try a xen patched 2.6.30 this weekend, hope there are no other issues. Thanks for the explanation. Christian > > -Eric > > > Jul 24 11:33:30 ganges Kernel BUG > > at ...sr/src/linux-2.6.18-xen-r12/fs/xfs/support/debug.c:57 > > Jul 24 11:33:30 ganges invalid opcode: 0000 [1] SMP > > Jul 24 11:33:30 ganges CPU 0 > > Jul 24 11:33:30 ganges Modules linked in: > > Jul 24 11:33:30 ganges Pid: 15340, comm: smbd Not tainted 2.6.18-xen-r12 > > #8 Jul 24 11:33:30 ganges RIP: e030:[] > > [] cmn_err+0xdc/0x120 > > Jul 24 11:33:30 ganges RSP: e02b:ffff8800a4b2d5c8 EFLAGS: 00010246 > > Jul 24 11:33:30 ganges RAX: 0000000000000000 RBX: ffffffff8051cbf0 RCX: > > 0000000000000001 > > Jul 24 11:33:30 ganges RDX: ffffffffff5fd000 RSI: 0000000000000000 RDI: > > ffffffff805826ac > > Jul 24 11:33:30 ganges RBP: 0000000000000000 R08: 0000000000000000 R09: > > 0000000000000080 > > Jul 24 11:33:30 ganges R10: ffffffff8062c4c0 R11: ffffffff80213660 R12: > > 0000000000000000 > > Jul 24 11:33:30 ganges R13: ffff8800f6a03bc0 R14: 0000000000000005 R15: > > 0000000000000000 > > Jul 24 11:33:30 ganges FS: 00002ac859d276a0(0000) > > GS:ffffffff805e7000(0000) knlGS:0000000000000000 > > Jul 24 11:33:30 ganges CS: e033 DS: 0000 ES: 0000 > > Jul 24 11:33:30 ganges Process smbd (pid: 15340, threadinfo > > ffff8800a4b2c000, task ffff880011892850) > > Jul 24 11:33:30 ganges Stack: 0000003000000030 ffff8800a4b2d6c8 > > ffff8800a4b2d5e8 000000000000b5a0 > > Jul 24 11:33:30 ganges 00000002000001bc ffffffff80367438 ffff8800ff7ecfc0 > > 000000009800f059 > > Jul 24 11:33:30 ganges 0000000000000000 0000000000000000 ffff8800e6d8ca30 > > ffff8800a4b2d8b8 > > Jul 24 11:33:30 ganges Call Trace: > > Jul 24 11:33:30 ganges [] > > xfs_iext_bno_to_ext+0x138/0x160 Jul 24 11:33:30 ganges > > [] xfs_iext_get_ext+0x43/0x70 Jul 24 11:33:30 ganges > > [] > > xfs_bmap_search_multi_extents+0xad/0x120 > > Jul 24 11:33:30 ganges [] > > xfs_bmap_search_extents+0xce/0xf0 Jul 24 11:33:30 ganges > > [] xfs_bmapi+0x2f1/0x1cf0 Jul 24 11:33:30 ganges > > [] error_exit+0x0/0x71 > > Jul 24 11:33:30 ganges [] > > xfs_iomap_write_delay+0x30e/0x490 Jul 24 11:33:30 ganges > > [] __switch_to+0x3e6/0x560 Jul 24 11:33:30 ganges > > [] xfs_iomap+0x228/0x570 Jul 24 11:33:30 ganges > > [] __xfs_get_blocks+0x7b/0x200 Jul 24 11:33:30 ganges > > [] alloc_page_buffers+0xa9/0x110 Jul 24 11:33:30 ganges > > [] __block_prepare_write+0x1d4/0x490 Jul 24 11:33:30 > > ganges [] xfs_get_blocks+0x0/0x10 Jul 24 11:33:30 > > ganges [] block_prepare_write+0x1a/0x30 Jul 24 11:33:30 > > ganges [] > > generic_file_buffered_write+0x288/0x680 > > Jul 24 11:33:30 ganges [] > > tcp_rcv_established+0x49e/0x7a0 Jul 24 11:33:30 ganges > > [] memcpy_toiovec+0x38/0x70 Jul 24 11:33:30 ganges > > [] current_fs_time+0x3b/0x40 Jul 24 11:33:30 ganges > > [] __up_write+0x21/0x120 Jul 24 11:33:30 ganges > > [] xfs_write+0x7a3/0xb40 Jul 24 11:33:30 ganges > > [] tcp_recvmsg+0x76b/0x8a0 Jul 24 11:33:30 ganges > > [] do_sock_read+0xab/0xc0 Jul 24 11:33:30 ganges > > [] sock_aio_read+0x4f/0x60 Jul 24 11:33:30 ganges > > [] xfs_file_aio_write+0x6f/0x80 Jul 24 11:33:30 ganges > > [] do_sync_write+0xc7/0x110 Jul 24 11:33:30 ganges > > [] fasync_helper+0x63/0x150 Jul 24 11:33:30 ganges > > [] __posix_lock_file_conf+0x3d9/0x430 Jul 24 11:33:30 > > ganges [] autoremove_wake_function+0x0/0x30 Jul 24 > > 11:33:30 ganges [] fcntl_setlk+0x286/0x2c0 Jul 24 > > 11:33:30 ganges [] vfs_write+0xbd/0x180 Jul 24 11:33:30 > > ganges [] sys_pwrite64+0x5d/0x90 Jul 24 11:33:30 ganges > > [] system_call+0x68/0x6d Jul 24 11:33:30 ganges > > [] system_call+0x0/0x6d Jul 24 11:33:30 ganges > > Jul 24 11:33:30 ganges > > Jul 24 11:33:30 ganges Code: 0f 0b 68 f0 f7 51 80 c2 39 00 eb 2b 48 c7 c6 > > a6 3a 52 80 48 > > Jul 24 11:33:30 ganges RIP [] cmn_err+0xdc/0x120 > > Jul 24 11:33:30 ganges RSP > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Wed Jul 29 10:14:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TFE5WZ260268 for ; Wed, 29 Jul 2009 10:14:06 -0500 X-ASG-Debug-ID: 1248881022-271000ee0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7F48F10D7999 for ; Wed, 29 Jul 2009 08:23:42 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id amZfHHtTFfSRaVfx for ; Wed, 29 Jul 2009 08:23:42 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 7948AAA60C3; Wed, 29 Jul 2009 10:14:51 -0500 (CDT) Message-ID: <4A70676B.4090105@sandeen.net> Date: Wed, 29 Jul 2009 10:14:51 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Eddy Zhao CC: Lachlan McIlroy , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> <4A6F20D0.4050303@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248881023 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4718 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eddy Zhao wrote: ... > During fixing the problem, I find it is difficult to change the code to > commit packed log item (restricted by xfs_log_iovec_t mechanism). If we > could somehow change this piece of code to use packed structure. The > endianess problem could be solved by add an byte-swap option to > xfs_repair (like e2fsck "-s"). Then we solve the > xfs-log-cant-migrate-between-archs problem. Well, to be honest, the restriction of a clean log when migrating an xfs filesystem between systems of differing endianness was design decision. And xfs userspace can't replay any log, native endian or not. If it could, then perhaps doing the swapping in userspace would be a migration option. If you're signing up to make xfs_repair replay logs, I'm sure we'd welcome the patch. :) -Eric > Thanks > Eddy From sandeen@sandeen.net Wed Jul 29 12:08:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TH8hP0003080 for ; Wed, 29 Jul 2009 12:08:43 -0500 X-ASG-Debug-ID: 1248887369-0b8801300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8A2B6141F4E9 for ; Wed, 29 Jul 2009 10:09:30 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 4s7hDgQ1TxK5UiFK for ; Wed, 29 Jul 2009 10:09:30 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6TH9TgU020682 for ; Wed, 29 Jul 2009 13:09:29 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6TH9Sil012809 for ; Wed, 29 Jul 2009 13:09:28 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6TH9RAe010088 for ; Wed, 29 Jul 2009 13:09:28 -0400 Message-ID: <4A708247.7040509@sandeen.net> Date: Wed, 29 Jul 2009 12:09:27 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfs_db: do bounds checking in frag's scanfunc_bmap Subject: [PATCH] xfs_db: do bounds checking in frag's scanfunc_bmap Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248887370 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4725 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is for http://oss.sgi.com/bugzilla/show_bug.cgi?id=842 Bug 842 - xfs_db crashes on 'frag' The nrecs in scanfunc_bmap was corrupted & out of bounds, causing the loop in process_bmbt_reclist to walk well past allocated memory and eventually segfault. Add checking to this scanfunc_bmap() similar to that in similar functions for check, metadump, and repair. I'm not sure if we can/should print out any more information here... # db/xfs_db -r -c frag xfs.img invalid numrecs (46311) in bmapbtd block actual 38085, ideal 37731, fragmentation factor 0.93% Signed-off-by: Eric Sandeen --- diff --git a/db/frag.c b/db/frag.c index 925863d..bba91ed 100644 --- a/db/frag.c +++ b/db/frag.c @@ -437,15 +437,29 @@ scanfunc_bmap( int i; xfs_bmbt_ptr_t *pp; xfs_bmbt_rec_t *rp; + int nrecs; + + nrecs = be16_to_cpu(block->bb_numrecs); if (level == 0) { + if (nrecs > mp->m_bmap_dmxr[0]) { + dbprintf(_("invalid numrecs (%u) in %s block\n"), + nrecs, typtab[btype].name); + return; + } rp = XFS_BMBT_REC_ADDR(mp, block, 1); process_bmbt_reclist((xfs_bmbt_rec_32_t *)rp, - be16_to_cpu(block->bb_numrecs), extmapp); + nrecs, extmapp); + return; + } + + if (nrecs > mp->m_bmap_dmxr[1]) { + dbprintf(_("invalid numrecs (%u) in %s block\n"), + nrecs, typtab[btype].name); return; } pp = XFS_BMBT_PTR_ADDR(mp, block, 1, mp->m_bmap_dmxr[0]); - for (i = 0; i < be16_to_cpu(block->bb_numrecs); i++) + for (i = 0; i < nrecs; i++) scan_lbtree(be64_to_cpu(pp[i]), level, scanfunc_bmap, extmapp, btype); } From sandeen@sandeen.net Wed Jul 29 13:07:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_44,J_CHICKENPOX_46,J_CHICKENPOX_48,J_CHICKENPOX_51, J_CHICKENPOX_52,J_CHICKENPOX_53,J_CHICKENPOX_61,J_CHICKENPOX_64, J_CHICKENPOX_66,J_CHICKENPOX_92,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TI7DRx005308 for ; Wed, 29 Jul 2009 13:07:13 -0500 X-ASG-Debug-ID: 1248891407-7ccc02940000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 386E010DB6B6 for ; Wed, 29 Jul 2009 11:16:47 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 6dYvLok0omErvkRY for ; Wed, 29 Jul 2009 11:16:47 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6TI7uH3006233 for ; Wed, 29 Jul 2009 14:07:56 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6TI7trm002092 for ; Wed, 29 Jul 2009 14:07:55 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6TI7pJO020945 for ; Wed, 29 Jul 2009 14:07:54 -0400 Message-ID: <4A708FF7.5@sandeen.net> Date: Wed, 29 Jul 2009 13:07:51 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfstests: actually hook up 198, make it generic Subject: [PATCH] xfstests: actually hook up 198, make it generic Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1248891409 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4729 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Not entirely sure how I managed this, but 198 was not in groups so was never run - and wasn't in the makefile, so was never built. Oops. Fix that up, make it a generic test, and move it to the aio-dio-regress subdir. Signed-off-by: Eric Sandeen --- diff --git a/198 b/198 index 242ac9e..bfa71a0 100755 --- a/198 +++ b/198 @@ -43,7 +43,7 @@ _cleanup() . ./common.filter # This should actually run on anything that supports O_DIRECT + AIO... -_supported_fs xfs +_supported_fs generic _supported_os Linux echo "Silence is golden." @@ -52,7 +52,7 @@ echo "Silence is golden." rm -f $seq.full rm -f "$TEST_DIR/aiodio_sparse*" -$here/src/aiodio_sparse2 "$TEST_DIR/aiodio_sparse" +$here/src/aio-dio-regress/aiodio_sparse2 "$TEST_DIR/aiodio_sparse" status=$? exit diff --git a/group b/group index 4391a4a..439a6e6 100644 --- a/group +++ b/group @@ -307,6 +307,7 @@ prealloc 195 ioctl dump auto quick 196 quota auto quick 197 dir auto quick +198 aio auto quick 199 mount auto quick 200 mount auto quick 201 metadata auto quick diff --git a/src/aio-dio-regress/aiodio_sparse2.c b/src/aio-dio-regress/aiodio_sparse2.c new file mode 100644 index 0000000..b56f91a --- /dev/null +++ b/src/aio-dio-regress/aiodio_sparse2.c @@ -0,0 +1,384 @@ +/* gcc -g -Wall -O2 aiodio_sparse.c -o aiodio_sparse -laio */ + +/* + * From http://developer.osdl.org/daniel/AIO/TESTS/aiodio_sparse.c + * With patch from https://bugzilla.redhat.com/attachment.cgi?id=142124 + * (Bug https://bugzilla.redhat.com/show_bug.cgi?id=217098) + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +int debug; + +/* + * aiodio_sparse - issue async O_DIRECT writes to holes is a file while + * concurrently reading the file and checking that the read never reads + * uninitailized data. + */ + +unsigned char *check_zero(unsigned char *buf, int size) +{ + unsigned char *p; + + p = buf; + + while (size > 0) { + if (*buf != 1) { + fprintf(stderr, "non one buffer at buf[%ld] => 0x%02x,%02x,%02x,%02x\n", + (long)(buf - p), (unsigned int)buf[0], + size > 1 ? (unsigned int)buf[1] : 0, + size > 2 ? (unsigned int)buf[2] : 0, + size > 3 ? (unsigned int)buf[3] : 0); + if (debug) + fprintf(stderr, "buf %p, p %p\n", buf, p); + return buf; + } + buf++; + size--; + } + return 0; /* all zeros */ +} + +volatile int got_signal; + +void +sig_term_func(int i, siginfo_t *si, void *p) +{ + if (debug) + fprintf(stderr, "sig(%d, %p, %p)\n", i, si, p); + got_signal++; +} + +/* + * do async DIO writes to a sparse file + */ +void aiodio_sparse(char *filename, int align, int writesize, int filesize, int num_aio, int step, int sparse, int direct, int keep) +{ + int fd; + void *bufptr; + int i; + int w; + static struct sigaction s; + struct iocb **iocbs; + off_t offset; + io_context_t myctx; + struct io_event event; + int aio_inflight; + + s.sa_sigaction = sig_term_func; + s.sa_flags = SA_SIGINFO; + sigaction(SIGTERM, &s, 0); + + if ((num_aio * step) > filesize) { + num_aio = filesize / step; + } + memset(&myctx, 0, sizeof(myctx)); + io_queue_init(num_aio, &myctx); + + iocbs = (struct iocb **)calloc(num_aio, sizeof(struct iocb *)); + for (i = 0; i < num_aio; i++) { + if ((iocbs[i] = (struct iocb *)calloc(1, sizeof(struct iocb))) == 0) { + perror("cannot malloc iocb"); + return; + } + } + + fd = open(filename, direct|O_WRONLY|O_CREAT, 0666); + + if (fd < 0) { + perror("cannot create file"); + return; + } + + if (sparse) + ftruncate(fd, filesize); + + /* + * allocate the iocbs array and iocbs with buffers + */ + offset = 0; + for (i = 0; i < num_aio; i++) { + void *bufptr; + + if (posix_memalign(&bufptr, align, writesize)) { + perror("cannot malloc aligned memory"); + close(fd); + unlink(filename); + return; + } + memset(bufptr, 1, writesize); + io_prep_pwrite(iocbs[i], fd, bufptr, writesize, offset); + offset += step; + } + + /* + * start the 1st num_aio write requests + */ + if ((w = io_submit(myctx, num_aio, iocbs)) < 0) { + perror("io_submit failed"); + close(fd); + unlink(filename); + return; + } + if (debug) + fprintf(stderr, "io_submit() return %d\n", w); + + /* + * As AIO requests finish, keep issuing more AIO until done. + */ + aio_inflight = num_aio; + if (debug) + fprintf(stderr, "aiodio_sparse: %d i/o in flight\n", aio_inflight); + while (offset < filesize) { + int n; + struct iocb *iocbp; + + if (debug) + fprintf(stderr, "aiodio_sparse: offset %lld filesize %d inflight %d\n", + (long long)offset, filesize, aio_inflight); + + if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { + if (-n != EINTR) + fprintf(stderr, "io_getevents() returned %d\n", n); + break; + } + if (debug) + fprintf(stderr, "aiodio_sparse: io_getevent() returned %d\n", n); + aio_inflight--; + if (got_signal) + break; /* told to stop */ + /* + * check if write succeeded. + */ + iocbp = event.obj; + if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { + fprintf(stderr, + "AIO write offset %lld expected %ld got %ld\n", + iocbp->u.c.offset, iocbp->u.c.nbytes, + event.res); + break; + } + if (debug) + fprintf(stderr, "aiodio_sparse: io_getevent() res %ld res2 %ld\n", + event.res, event.res2); + + /* start next write */ + io_prep_pwrite(iocbp, fd, iocbp->u.c.buf, writesize, offset); + offset += step; + if ((w = io_submit(myctx, 1, &iocbp)) < 0) { + fprintf(stderr, "io_submit failed at offset %lld\n", + (long long)offset); + perror(""); + break; + } + if (debug) + fprintf(stderr, "io_submit() return %d\n", w); + aio_inflight++; + } + + /* + * wait for AIO requests in flight. + */ + while (aio_inflight > 0) { + int n; + struct iocb *iocbp; + + if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { + perror("io_getevents failed"); + break; + } + aio_inflight--; + /* + * check if write succeeded. + */ + iocbp = event.obj; + if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { + fprintf(stderr, + "AIO write offset %lld expected %ld got %ld\n", + iocbp->u.c.offset, iocbp->u.c.nbytes, + event.res); + } + } + if (debug) + fprintf(stderr, "AIO DIO write done\n"); + close(fd); + if ((fd = open(filename, O_RDONLY)) < 0) + exit(1); + + bufptr = malloc(writesize); + for (offset = 0; offset < filesize; offset += step) { + unsigned char *badbuf; + + lseek(fd, offset, SEEK_SET); + if (read(fd, bufptr, writesize) < writesize) { + fprintf(stderr, "short read() at offset %lld\n", + (long long) offset); + exit(11); + } + if ((badbuf = check_zero(bufptr, writesize))) { + fprintf(stderr, "non-one read at offset %lld\n", + (long long)(offset + badbuf - (unsigned char*)bufptr)); + fprintf(stderr, "*** WARNING *** %s has not been unlinked; if you don't rm it manually first, it may influence the next run\n", filename); + exit(10); + } + } + close(fd); + if (!keep) + unlink(filename); + else + fprintf(stderr, "*** WARNING *** You requested %s not to be unlinked; if you don't rm it manually first, it may influence the next run\n", filename); +} + +void dirty_freeblocks(char *filename, int size) +{ + int fd; + void *p; + int pg; + char filename2[PATH_MAX]; + + pg = getpagesize(); + size = ((size + pg - 1) / pg) * pg; + sprintf(filename2, "%s.xx.%d", filename, getpid()); + fd = open(filename2, O_CREAT|O_RDWR, 0666); + if (fd < 0) { + perror("cannot open file"); + exit(2); + } + ftruncate(fd, size); + p = mmap(0, size, PROT_WRITE|PROT_READ, MAP_SHARED|MAP_FILE, fd, 0); + if (p == MAP_FAILED) { + perror("cannot mmap"); + exit(2); + } + memset(p, 0xaa, size); + msync(p, size, MS_SYNC); + munmap(p, size); + close(fd); + unlink(filename2); +} + +void usage() +{ + fprintf(stderr, "usage: dio_sparse [-n step] [-s filesize]" + " [-w writesize] [-r readsize] filename\n"); + exit(1); +} + +/* + * Scale value by kilo, mega, or giga. + */ +long long scale_by_kmg(long long value, char scale) +{ + switch (scale) { + case 'g': + case 'G': + value *= 1024; + case 'm': + case 'M': + value *= 1024; + case 'k': + case 'K': + value *= 1024; + break; + case '\0': + break; + default: + usage(); + break; + } + return value; +} + +/* + * usage: + * aiodio_sparse [-r readsize] [-w writesize] [-n step] [-a align] [-i num_aio] filename + */ + +int main(int argc, char **argv) +{ + char filename[PATH_MAX]; + long alignment = 512; + int readsize = 65536; + int writesize = 65536; + int filesize = 100*1024*1024; + int num_aio = 16; + int step = 5*1024*1024; + int c, direct = O_DIRECT, keep = 0, sparse = 1; + extern char *optarg; + extern int optind, optopt, opterr; + + while ((c = getopt(argc, argv, "dr:w:n:a:s:i:DkS")) != -1) { + char *endp; + switch (c) { + case 'D': + direct = 0; + break; + case 'k': + keep = 1; + break; + case 'S': + sparse = 0; + break; + case 'd': + debug++; + break; + case 'i': + num_aio = atoi(optarg); + break; + case 'a': + alignment = strtol(optarg, &endp, 0); + alignment = (int)scale_by_kmg((long long)alignment, + *endp); + break; + case 'r': + readsize = strtol(optarg, &endp, 0); + readsize = (int)scale_by_kmg((long long)readsize, *endp); + break; + case 'w': + writesize = strtol(optarg, &endp, 0); + writesize = (int)scale_by_kmg((long long)writesize, *endp); + break; + case 's': + filesize = strtol(optarg, &endp, 0); + filesize = (int)scale_by_kmg((long long)filesize, *endp); + break; + case 'n': + step = strtol(optarg, &endp, 0); + step = (int)scale_by_kmg((long long)step, *endp); + break; + case '?': + usage(); + break; + } + } + + strncpy(filename, argv[argc-1], PATH_MAX); + + /* + * Create some dirty free blocks by allocating, writing, syncing, + * and then unlinking and freeing. + */ + dirty_freeblocks(filename, filesize); + + /* + * Parent write to a hole in a file using async direct i/o + */ + + aiodio_sparse(filename, alignment, writesize, filesize, num_aio, step, sparse, direct, keep); + + return 0; +} diff --git a/src/aiodio_sparse2.c b/src/aiodio_sparse2.c deleted file mode 100644 index b56f91a..0000000 --- a/src/aiodio_sparse2.c +++ /dev/null @@ -1,384 +0,0 @@ -/* gcc -g -Wall -O2 aiodio_sparse.c -o aiodio_sparse -laio */ - -/* - * From http://developer.osdl.org/daniel/AIO/TESTS/aiodio_sparse.c - * With patch from https://bugzilla.redhat.com/attachment.cgi?id=142124 - * (Bug https://bugzilla.redhat.com/show_bug.cgi?id=217098) - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -int debug; - -/* - * aiodio_sparse - issue async O_DIRECT writes to holes is a file while - * concurrently reading the file and checking that the read never reads - * uninitailized data. - */ - -unsigned char *check_zero(unsigned char *buf, int size) -{ - unsigned char *p; - - p = buf; - - while (size > 0) { - if (*buf != 1) { - fprintf(stderr, "non one buffer at buf[%ld] => 0x%02x,%02x,%02x,%02x\n", - (long)(buf - p), (unsigned int)buf[0], - size > 1 ? (unsigned int)buf[1] : 0, - size > 2 ? (unsigned int)buf[2] : 0, - size > 3 ? (unsigned int)buf[3] : 0); - if (debug) - fprintf(stderr, "buf %p, p %p\n", buf, p); - return buf; - } - buf++; - size--; - } - return 0; /* all zeros */ -} - -volatile int got_signal; - -void -sig_term_func(int i, siginfo_t *si, void *p) -{ - if (debug) - fprintf(stderr, "sig(%d, %p, %p)\n", i, si, p); - got_signal++; -} - -/* - * do async DIO writes to a sparse file - */ -void aiodio_sparse(char *filename, int align, int writesize, int filesize, int num_aio, int step, int sparse, int direct, int keep) -{ - int fd; - void *bufptr; - int i; - int w; - static struct sigaction s; - struct iocb **iocbs; - off_t offset; - io_context_t myctx; - struct io_event event; - int aio_inflight; - - s.sa_sigaction = sig_term_func; - s.sa_flags = SA_SIGINFO; - sigaction(SIGTERM, &s, 0); - - if ((num_aio * step) > filesize) { - num_aio = filesize / step; - } - memset(&myctx, 0, sizeof(myctx)); - io_queue_init(num_aio, &myctx); - - iocbs = (struct iocb **)calloc(num_aio, sizeof(struct iocb *)); - for (i = 0; i < num_aio; i++) { - if ((iocbs[i] = (struct iocb *)calloc(1, sizeof(struct iocb))) == 0) { - perror("cannot malloc iocb"); - return; - } - } - - fd = open(filename, direct|O_WRONLY|O_CREAT, 0666); - - if (fd < 0) { - perror("cannot create file"); - return; - } - - if (sparse) - ftruncate(fd, filesize); - - /* - * allocate the iocbs array and iocbs with buffers - */ - offset = 0; - for (i = 0; i < num_aio; i++) { - void *bufptr; - - if (posix_memalign(&bufptr, align, writesize)) { - perror("cannot malloc aligned memory"); - close(fd); - unlink(filename); - return; - } - memset(bufptr, 1, writesize); - io_prep_pwrite(iocbs[i], fd, bufptr, writesize, offset); - offset += step; - } - - /* - * start the 1st num_aio write requests - */ - if ((w = io_submit(myctx, num_aio, iocbs)) < 0) { - perror("io_submit failed"); - close(fd); - unlink(filename); - return; - } - if (debug) - fprintf(stderr, "io_submit() return %d\n", w); - - /* - * As AIO requests finish, keep issuing more AIO until done. - */ - aio_inflight = num_aio; - if (debug) - fprintf(stderr, "aiodio_sparse: %d i/o in flight\n", aio_inflight); - while (offset < filesize) { - int n; - struct iocb *iocbp; - - if (debug) - fprintf(stderr, "aiodio_sparse: offset %lld filesize %d inflight %d\n", - (long long)offset, filesize, aio_inflight); - - if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { - if (-n != EINTR) - fprintf(stderr, "io_getevents() returned %d\n", n); - break; - } - if (debug) - fprintf(stderr, "aiodio_sparse: io_getevent() returned %d\n", n); - aio_inflight--; - if (got_signal) - break; /* told to stop */ - /* - * check if write succeeded. - */ - iocbp = event.obj; - if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { - fprintf(stderr, - "AIO write offset %lld expected %ld got %ld\n", - iocbp->u.c.offset, iocbp->u.c.nbytes, - event.res); - break; - } - if (debug) - fprintf(stderr, "aiodio_sparse: io_getevent() res %ld res2 %ld\n", - event.res, event.res2); - - /* start next write */ - io_prep_pwrite(iocbp, fd, iocbp->u.c.buf, writesize, offset); - offset += step; - if ((w = io_submit(myctx, 1, &iocbp)) < 0) { - fprintf(stderr, "io_submit failed at offset %lld\n", - (long long)offset); - perror(""); - break; - } - if (debug) - fprintf(stderr, "io_submit() return %d\n", w); - aio_inflight++; - } - - /* - * wait for AIO requests in flight. - */ - while (aio_inflight > 0) { - int n; - struct iocb *iocbp; - - if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { - perror("io_getevents failed"); - break; - } - aio_inflight--; - /* - * check if write succeeded. - */ - iocbp = event.obj; - if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { - fprintf(stderr, - "AIO write offset %lld expected %ld got %ld\n", - iocbp->u.c.offset, iocbp->u.c.nbytes, - event.res); - } - } - if (debug) - fprintf(stderr, "AIO DIO write done\n"); - close(fd); - if ((fd = open(filename, O_RDONLY)) < 0) - exit(1); - - bufptr = malloc(writesize); - for (offset = 0; offset < filesize; offset += step) { - unsigned char *badbuf; - - lseek(fd, offset, SEEK_SET); - if (read(fd, bufptr, writesize) < writesize) { - fprintf(stderr, "short read() at offset %lld\n", - (long long) offset); - exit(11); - } - if ((badbuf = check_zero(bufptr, writesize))) { - fprintf(stderr, "non-one read at offset %lld\n", - (long long)(offset + badbuf - (unsigned char*)bufptr)); - fprintf(stderr, "*** WARNING *** %s has not been unlinked; if you don't rm it manually first, it may influence the next run\n", filename); - exit(10); - } - } - close(fd); - if (!keep) - unlink(filename); - else - fprintf(stderr, "*** WARNING *** You requested %s not to be unlinked; if you don't rm it manually first, it may influence the next run\n", filename); -} - -void dirty_freeblocks(char *filename, int size) -{ - int fd; - void *p; - int pg; - char filename2[PATH_MAX]; - - pg = getpagesize(); - size = ((size + pg - 1) / pg) * pg; - sprintf(filename2, "%s.xx.%d", filename, getpid()); - fd = open(filename2, O_CREAT|O_RDWR, 0666); - if (fd < 0) { - perror("cannot open file"); - exit(2); - } - ftruncate(fd, size); - p = mmap(0, size, PROT_WRITE|PROT_READ, MAP_SHARED|MAP_FILE, fd, 0); - if (p == MAP_FAILED) { - perror("cannot mmap"); - exit(2); - } - memset(p, 0xaa, size); - msync(p, size, MS_SYNC); - munmap(p, size); - close(fd); - unlink(filename2); -} - -void usage() -{ - fprintf(stderr, "usage: dio_sparse [-n step] [-s filesize]" - " [-w writesize] [-r readsize] filename\n"); - exit(1); -} - -/* - * Scale value by kilo, mega, or giga. - */ -long long scale_by_kmg(long long value, char scale) -{ - switch (scale) { - case 'g': - case 'G': - value *= 1024; - case 'm': - case 'M': - value *= 1024; - case 'k': - case 'K': - value *= 1024; - break; - case '\0': - break; - default: - usage(); - break; - } - return value; -} - -/* - * usage: - * aiodio_sparse [-r readsize] [-w writesize] [-n step] [-a align] [-i num_aio] filename - */ - -int main(int argc, char **argv) -{ - char filename[PATH_MAX]; - long alignment = 512; - int readsize = 65536; - int writesize = 65536; - int filesize = 100*1024*1024; - int num_aio = 16; - int step = 5*1024*1024; - int c, direct = O_DIRECT, keep = 0, sparse = 1; - extern char *optarg; - extern int optind, optopt, opterr; - - while ((c = getopt(argc, argv, "dr:w:n:a:s:i:DkS")) != -1) { - char *endp; - switch (c) { - case 'D': - direct = 0; - break; - case 'k': - keep = 1; - break; - case 'S': - sparse = 0; - break; - case 'd': - debug++; - break; - case 'i': - num_aio = atoi(optarg); - break; - case 'a': - alignment = strtol(optarg, &endp, 0); - alignment = (int)scale_by_kmg((long long)alignment, - *endp); - break; - case 'r': - readsize = strtol(optarg, &endp, 0); - readsize = (int)scale_by_kmg((long long)readsize, *endp); - break; - case 'w': - writesize = strtol(optarg, &endp, 0); - writesize = (int)scale_by_kmg((long long)writesize, *endp); - break; - case 's': - filesize = strtol(optarg, &endp, 0); - filesize = (int)scale_by_kmg((long long)filesize, *endp); - break; - case 'n': - step = strtol(optarg, &endp, 0); - step = (int)scale_by_kmg((long long)step, *endp); - break; - case '?': - usage(); - break; - } diff --git a/198 b/198 index 242ac9e..bfa71a0 100755 --- a/198 +++ b/198 @@ -43,7 +43,7 @@ _cleanup() . ./common.filter # This should actually run on anything that supports O_DIRECT + AIO... -_supported_fs xfs +_supported_fs generic _supported_os Linux echo "Silence is golden." @@ -52,7 +52,7 @@ echo "Silence is golden." rm -f $seq.full rm -f "$TEST_DIR/aiodio_sparse*" -$here/src/aiodio_sparse2 "$TEST_DIR/aiodio_sparse" +$here/src/aio-dio-regress/aiodio_sparse2 "$TEST_DIR/aiodio_sparse" status=$? exit diff --git a/group b/group index 4391a4a..439a6e6 100644 --- a/group +++ b/group @@ -307,6 +307,7 @@ prealloc 195 ioctl dump auto quick 196 quota auto quick 197 dir auto quick +198 aio auto 199 mount auto quick 200 mount auto quick 201 metadata auto quick diff --git a/src/aio-dio-regress/aiodio_sparse2.c b/src/aio-dio-regress/aiodio_sparse2.c new file mode 100644 index 0000000..b56f91a --- /dev/null +++ b/src/aio-dio-regress/aiodio_sparse2.c @@ -0,0 +1,384 @@ +/* gcc -g -Wall -O2 aiodio_sparse.c -o aiodio_sparse -laio */ + +/* + * From http://developer.osdl.org/daniel/AIO/TESTS/aiodio_sparse.c + * With patch from https://bugzilla.redhat.com/attachment.cgi?id=142124 + * (Bug https://bugzilla.redhat.com/show_bug.cgi?id=217098) + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +int debug; + +/* + * aiodio_sparse - issue async O_DIRECT writes to holes is a file while + * concurrently reading the file and checking that the read never reads + * uninitailized data. + */ + +unsigned char *check_zero(unsigned char *buf, int size) +{ + unsigned char *p; + + p = buf; + + while (size > 0) { + if (*buf != 1) { + fprintf(stderr, "non one buffer at buf[%ld] => 0x%02x,%02x,%02x,%02x\n", + (long)(buf - p), (unsigned int)buf[0], + size > 1 ? (unsigned int)buf[1] : 0, + size > 2 ? (unsigned int)buf[2] : 0, + size > 3 ? (unsigned int)buf[3] : 0); + if (debug) + fprintf(stderr, "buf %p, p %p\n", buf, p); + return buf; + } + buf++; + size--; + } + return 0; /* all zeros */ +} + +volatile int got_signal; + +void +sig_term_func(int i, siginfo_t *si, void *p) +{ + if (debug) + fprintf(stderr, "sig(%d, %p, %p)\n", i, si, p); + got_signal++; +} + +/* + * do async DIO writes to a sparse file + */ +void aiodio_sparse(char *filename, int align, int writesize, int filesize, int num_aio, int step, int sparse, int direct, int keep) +{ + int fd; + void *bufptr; + int i; + int w; + static struct sigaction s; + struct iocb **iocbs; + off_t offset; + io_context_t myctx; + struct io_event event; + int aio_inflight; + + s.sa_sigaction = sig_term_func; + s.sa_flags = SA_SIGINFO; + sigaction(SIGTERM, &s, 0); + + if ((num_aio * step) > filesize) { + num_aio = filesize / step; + } + memset(&myctx, 0, sizeof(myctx)); + io_queue_init(num_aio, &myctx); + + iocbs = (struct iocb **)calloc(num_aio, sizeof(struct iocb *)); + for (i = 0; i < num_aio; i++) { + if ((iocbs[i] = (struct iocb *)calloc(1, sizeof(struct iocb))) == 0) { + perror("cannot malloc iocb"); + return; + } + } + + fd = open(filename, direct|O_WRONLY|O_CREAT, 0666); + + if (fd < 0) { + perror("cannot create file"); + return; + } + + if (sparse) + ftruncate(fd, filesize); + + /* + * allocate the iocbs array and iocbs with buffers + */ + offset = 0; + for (i = 0; i < num_aio; i++) { + void *bufptr; + + if (posix_memalign(&bufptr, align, writesize)) { + perror("cannot malloc aligned memory"); + close(fd); + unlink(filename); + return; + } + memset(bufptr, 1, writesize); + io_prep_pwrite(iocbs[i], fd, bufptr, writesize, offset); + offset += step; + } + + /* + * start the 1st num_aio write requests + */ + if ((w = io_submit(myctx, num_aio, iocbs)) < 0) { + perror("io_submit failed"); + close(fd); + unlink(filename); + return; + } + if (debug) + fprintf(stderr, "io_submit() return %d\n", w); + + /* + * As AIO requests finish, keep issuing more AIO until done. + */ + aio_inflight = num_aio; + if (debug) + fprintf(stderr, "aiodio_sparse: %d i/o in flight\n", aio_inflight); + while (offset < filesize) { + int n; + struct iocb *iocbp; + + if (debug) + fprintf(stderr, "aiodio_sparse: offset %lld filesize %d inflight %d\n", + (long long)offset, filesize, aio_inflight); + + if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { + if (-n != EINTR) + fprintf(stderr, "io_getevents() returned %d\n", n); + break; + } + if (debug) + fprintf(stderr, "aiodio_sparse: io_getevent() returned %d\n", n); + aio_inflight--; + if (got_signal) + break; /* told to stop */ + /* + * check if write succeeded. + */ + iocbp = event.obj; + if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { + fprintf(stderr, + "AIO write offset %lld expected %ld got %ld\n", + iocbp->u.c.offset, iocbp->u.c.nbytes, + event.res); + break; + } + if (debug) + fprintf(stderr, "aiodio_sparse: io_getevent() res %ld res2 %ld\n", + event.res, event.res2); + + /* start next write */ + io_prep_pwrite(iocbp, fd, iocbp->u.c.buf, writesize, offset); + offset += step; + if ((w = io_submit(myctx, 1, &iocbp)) < 0) { + fprintf(stderr, "io_submit failed at offset %lld\n", + (long long)offset); + perror(""); + break; + } + if (debug) + fprintf(stderr, "io_submit() return %d\n", w); + aio_inflight++; + } + + /* + * wait for AIO requests in flight. + */ + while (aio_inflight > 0) { + int n; + struct iocb *iocbp; + + if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { + perror("io_getevents failed"); + break; + } + aio_inflight--; + /* + * check if write succeeded. + */ + iocbp = event.obj; + if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { + fprintf(stderr, + "AIO write offset %lld expected %ld got %ld\n", + iocbp->u.c.offset, iocbp->u.c.nbytes, + event.res); + } + } + if (debug) + fprintf(stderr, "AIO DIO write done\n"); + close(fd); + if ((fd = open(filename, O_RDONLY)) < 0) + exit(1); + + bufptr = malloc(writesize); + for (offset = 0; offset < filesize; offset += step) { + unsigned char *badbuf; + + lseek(fd, offset, SEEK_SET); + if (read(fd, bufptr, writesize) < writesize) { + fprintf(stderr, "short read() at offset %lld\n", + (long long) offset); + exit(11); + } + if ((badbuf = check_zero(bufptr, writesize))) { + fprintf(stderr, "non-one read at offset %lld\n", + (long long)(offset + badbuf - (unsigned char*)bufptr)); + fprintf(stderr, "*** WARNING *** %s has not been unlinked; if you don't rm it manually first, it may influence the next run\n", filename); + exit(10); + } + } + close(fd); + if (!keep) + unlink(filename); + else + fprintf(stderr, "*** WARNING *** You requested %s not to be unlinked; if you don't rm it manually first, it may influence the next run\n", filename); +} + +void dirty_freeblocks(char *filename, int size) +{ + int fd; + void *p; + int pg; + char filename2[PATH_MAX]; + + pg = getpagesize(); + size = ((size + pg - 1) / pg) * pg; + sprintf(filename2, "%s.xx.%d", filename, getpid()); + fd = open(filename2, O_CREAT|O_RDWR, 0666); + if (fd < 0) { + perror("cannot open file"); + exit(2); + } + ftruncate(fd, size); + p = mmap(0, size, PROT_WRITE|PROT_READ, MAP_SHARED|MAP_FILE, fd, 0); + if (p == MAP_FAILED) { + perror("cannot mmap"); + exit(2); + } + memset(p, 0xaa, size); + msync(p, size, MS_SYNC); + munmap(p, size); + close(fd); + unlink(filename2); +} + +void usage() +{ + fprintf(stderr, "usage: dio_sparse [-n step] [-s filesize]" + " [-w writesize] [-r readsize] filename\n"); + exit(1); +} + +/* + * Scale value by kilo, mega, or giga. + */ +long long scale_by_kmg(long long value, char scale) +{ + switch (scale) { + case 'g': + case 'G': + value *= 1024; + case 'm': + case 'M': + value *= 1024; + case 'k': + case 'K': + value *= 1024; + break; + case '\0': + break; + default: + usage(); + break; + } + return value; +} + +/* + * usage: + * aiodio_sparse [-r readsize] [-w writesize] [-n step] [-a align] [-i num_aio] filename + */ + +int main(int argc, char **argv) +{ + char filename[PATH_MAX]; + long alignment = 512; + int readsize = 65536; + int writesize = 65536; + int filesize = 100*1024*1024; + int num_aio = 16; + int step = 5*1024*1024; + int c, direct = O_DIRECT, keep = 0, sparse = 1; + extern char *optarg; + extern int optind, optopt, opterr; + + while ((c = getopt(argc, argv, "dr:w:n:a:s:i:DkS")) != -1) { + char *endp; + switch (c) { + case 'D': + direct = 0; + break; + case 'k': + keep = 1; + break; + case 'S': + sparse = 0; + break; + case 'd': + debug++; + break; + case 'i': + num_aio = atoi(optarg); + break; + case 'a': + alignment = strtol(optarg, &endp, 0); + alignment = (int)scale_by_kmg((long long)alignment, + *endp); + break; + case 'r': + readsize = strtol(optarg, &endp, 0); + readsize = (int)scale_by_kmg((long long)readsize, *endp); + break; + case 'w': + writesize = strtol(optarg, &endp, 0); + writesize = (int)scale_by_kmg((long long)writesize, *endp); + break; + case 's': + filesize = strtol(optarg, &endp, 0); + filesize = (int)scale_by_kmg((long long)filesize, *endp); + break; + case 'n': + step = strtol(optarg, &endp, 0); + step = (int)scale_by_kmg((long long)step, *endp); + break; + case '?': + usage(); + break; + } + } + + strncpy(filename, argv[argc-1], PATH_MAX); + + /* + * Create some dirty free blocks by allocating, writing, syncing, + * and then unlinking and freeing. + */ + dirty_freeblocks(filename, filesize); + + /* + * Parent write to a hole in a file using async direct i/o + */ + + aiodio_sparse(filename, alignment, writesize, filesize, num_aio, step, sparse, direct, keep); + + return 0; +} diff --git a/src/aiodio_sparse2.c b/src/aiodio_sparse2.c deleted file mode 100644 index b56f91a..0000000 --- a/src/aiodio_sparse2.c +++ /dev/null @@ -1,384 +0,0 @@ -/* gcc -g -Wall -O2 aiodio_sparse.c -o aiodio_sparse -laio */ - -/* - * From http://developer.osdl.org/daniel/AIO/TESTS/aiodio_sparse.c - * With patch from https://bugzilla.redhat.com/attachment.cgi?id=142124 - * (Bug https://bugzilla.redhat.com/show_bug.cgi?id=217098) - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -int debug; - -/* - * aiodio_sparse - issue async O_DIRECT writes to holes is a file while - * concurrently reading the file and checking that the read never reads - * uninitailized data. - */ - -unsigned char *check_zero(unsigned char *buf, int size) -{ - unsigned char *p; - - p = buf; - - while (size > 0) { - if (*buf != 1) { - fprintf(stderr, "non one buffer at buf[%ld] => 0x%02x,%02x,%02x,%02x\n", - (long)(buf - p), (unsigned int)buf[0], - size > 1 ? (unsigned int)buf[1] : 0, - size > 2 ? (unsigned int)buf[2] : 0, - size > 3 ? (unsigned int)buf[3] : 0); - if (debug) - fprintf(stderr, "buf %p, p %p\n", buf, p); - return buf; - } - buf++; - size--; - } - return 0; /* all zeros */ -} - -volatile int got_signal; - -void -sig_term_func(int i, siginfo_t *si, void *p) -{ - if (debug) - fprintf(stderr, "sig(%d, %p, %p)\n", i, si, p); - got_signal++; -} - -/* - * do async DIO writes to a sparse file - */ -void aiodio_sparse(char *filename, int align, int writesize, int filesize, int num_aio, int step, int sparse, int direct, int keep) -{ - int fd; - void *bufptr; - int i; - int w; - static struct sigaction s; - struct iocb **iocbs; - off_t offset; - io_context_t myctx; - struct io_event event; - int aio_inflight; - - s.sa_sigaction = sig_term_func; - s.sa_flags = SA_SIGINFO; - sigaction(SIGTERM, &s, 0); - - if ((num_aio * step) > filesize) { - num_aio = filesize / step; - } - memset(&myctx, 0, sizeof(myctx)); - io_queue_init(num_aio, &myctx); - - iocbs = (struct iocb **)calloc(num_aio, sizeof(struct iocb *)); - for (i = 0; i < num_aio; i++) { - if ((iocbs[i] = (struct iocb *)calloc(1, sizeof(struct iocb))) == 0) { - perror("cannot malloc iocb"); - return; - } - } - - fd = open(filename, direct|O_WRONLY|O_CREAT, 0666); - - if (fd < 0) { - perror("cannot create file"); - return; - } - - if (sparse) - ftruncate(fd, filesize); - - /* - * allocate the iocbs array and iocbs with buffers - */ - offset = 0; - for (i = 0; i < num_aio; i++) { - void *bufptr; - - if (posix_memalign(&bufptr, align, writesize)) { - perror("cannot malloc aligned memory"); - close(fd); - unlink(filename); - return; - } - memset(bufptr, 1, writesize); - io_prep_pwrite(iocbs[i], fd, bufptr, writesize, offset); - offset += step; - } - - /* - * start the 1st num_aio write requests - */ - if ((w = io_submit(myctx, num_aio, iocbs)) < 0) { - perror("io_submit failed"); - close(fd); - unlink(filename); - return; - } - if (debug) - fprintf(stderr, "io_submit() return %d\n", w); - - /* - * As AIO requests finish, keep issuing more AIO until done. - */ - aio_inflight = num_aio; - if (debug) - fprintf(stderr, "aiodio_sparse: %d i/o in flight\n", aio_inflight); - while (offset < filesize) { - int n; - struct iocb *iocbp; - - if (debug) - fprintf(stderr, "aiodio_sparse: offset %lld filesize %d inflight %d\n", - (long long)offset, filesize, aio_inflight); - - if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { - if (-n != EINTR) - fprintf(stderr, "io_getevents() returned %d\n", n); - break; - } - if (debug) - fprintf(stderr, "aiodio_sparse: io_getevent() returned %d\n", n); - aio_inflight--; - if (got_signal) - break; /* told to stop */ - /* - * check if write succeeded. - */ - iocbp = event.obj; - if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { - fprintf(stderr, - "AIO write offset %lld expected %ld got %ld\n", - iocbp->u.c.offset, iocbp->u.c.nbytes, - event.res); - break; - } - if (debug) - fprintf(stderr, "aiodio_sparse: io_getevent() res %ld res2 %ld\n", - event.res, event.res2); - - /* start next write */ - io_prep_pwrite(iocbp, fd, iocbp->u.c.buf, writesize, offset); - offset += step; - if ((w = io_submit(myctx, 1, &iocbp)) < 0) { - fprintf(stderr, "io_submit failed at offset %lld\n", - (long long)offset); - perror(""); - break; - } - if (debug) - fprintf(stderr, "io_submit() return %d\n", w); - aio_inflight++; - } - - /* - * wait for AIO requests in flight. - */ - while (aio_inflight > 0) { - int n; - struct iocb *iocbp; - - if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) { - perror("io_getevents failed"); - break; - } - aio_inflight--; - /* - * check if write succeeded. - */ - iocbp = event.obj; - if (event.res2 != 0 || event.res != iocbp->u.c.nbytes) { - fprintf(stderr, - "AIO write offset %lld expected %ld got %ld\n", - iocbp->u.c.offset, iocbp->u.c.nbytes, - event.res); - } - } - if (debug) - fprintf(stderr, "AIO DIO write done\n"); - close(fd); - if ((fd = open(filename, O_RDONLY)) < 0) - exit(1); - - bufptr = malloc(writesize); - for (offset = 0; offset < filesize; offset += step) { - unsigned char *badbuf; - - lseek(fd, offset, SEEK_SET); - if (read(fd, bufptr, writesize) < writesize) { - fprintf(stderr, "short read() at offset %lld\n", - (long long) offset); - exit(11); - } - if ((badbuf = check_zero(bufptr, writesize))) { - fprintf(stderr, "non-one read at offset %lld\n", - (long long)(offset + badbuf - (unsigned char*)bufptr)); - fprintf(stderr, "*** WARNING *** %s has not been unlinked; if you don't rm it manually first, it may influence the next run\n", filename); - exit(10); - } - } - close(fd); - if (!keep) - unlink(filename); - else - fprintf(stderr, "*** WARNING *** You requested %s not to be unlinked; if you don't rm it manually first, it may influence the next run\n", filename); -} - -void dirty_freeblocks(char *filename, int size) -{ - int fd; - void *p; - int pg; - char filename2[PATH_MAX]; - - pg = getpagesize(); - size = ((size + pg - 1) / pg) * pg; - sprintf(filename2, "%s.xx.%d", filename, getpid()); - fd = open(filename2, O_CREAT|O_RDWR, 0666); - if (fd < 0) { - perror("cannot open file"); - exit(2); - } - ftruncate(fd, size); - p = mmap(0, size, PROT_WRITE|PROT_READ, MAP_SHARED|MAP_FILE, fd, 0); - if (p == MAP_FAILED) { - perror("cannot mmap"); - exit(2); - } - memset(p, 0xaa, size); - msync(p, size, MS_SYNC); - munmap(p, size); - close(fd); - unlink(filename2); -} - -void usage() -{ - fprintf(stderr, "usage: dio_sparse [-n step] [-s filesize]" - " [-w writesize] [-r readsize] filename\n"); - exit(1); -} - -/* - * Scale value by kilo, mega, or giga. - */ -long long scale_by_kmg(long long value, char scale) -{ - switch (scale) { - case 'g': - case 'G': - value *= 1024; - case 'm': - case 'M': - value *= 1024; - case 'k': - case 'K': - value *= 1024; - break; - case '\0': - break; - default: - usage(); - break; - } - return value; -} - -/* - * usage: - * aiodio_sparse [-r readsize] [-w writesize] [-n step] [-a align] [-i num_aio] filename - */ - -int main(int argc, char **argv) -{ - char filename[PATH_MAX]; - long alignment = 512; - int readsize = 65536; - int writesize = 65536; - int filesize = 100*1024*1024; - int num_aio = 16; - int step = 5*1024*1024; - int c, direct = O_DIRECT, keep = 0, sparse = 1; - extern char *optarg; - extern int optind, optopt, opterr; - - while ((c = getopt(argc, argv, "dr:w:n:a:s:i:DkS")) != -1) { - char *endp; - switch (c) { - case 'D': - direct = 0; - break; - case 'k': - keep = 1; - break; - case 'S': - sparse = 0; - break; - case 'd': - debug++; - break; - case 'i': - num_aio = atoi(optarg); - break; - case 'a': - alignment = strtol(optarg, &endp, 0); - alignment = (int)scale_by_kmg((long long)alignment, - *endp); - break; - case 'r': - readsize = strtol(optarg, &endp, 0); - readsize = (int)scale_by_kmg((long long)readsize, *endp); - break; - case 'w': - writesize = strtol(optarg, &endp, 0); - writesize = (int)scale_by_kmg((long long)writesize, *endp); - break; - case 's': - filesize = strtol(optarg, &endp, 0); - filesize = (int)scale_by_kmg((long long)filesize, *endp); - break; - case 'n': - step = strtol(optarg, &endp, 0); - step = (int)scale_by_kmg((long long)step, *endp); - break; - case '?': - usage(); - break; - } - } - - strncpy(filename, argv[argc-1], PATH_MAX); - - /* - * Create some dirty free blocks by allocating, writing, syncing, - * and then unlinking and freeing. - */ - dirty_freeblocks(filename, filesize); - - /* - * Parent write to a hole in a file using async direct i/o - */ - - aiodio_sparse(filename, alignment, writesize, filesize, num_aio, step, sparse, direct, keep); - - return 0; -} - } - - strncpy(filename, argv[argc-1], PATH_MAX); - - /* - * Create some dirty free blocks by allocating, writing, syncing, - * and then unlinking and freeing. - */ - dirty_freeblocks(filename, filesize); - - /* - * Parent write to a hole in a file using async direct i/o - */ - - aiodio_sparse(filename, alignment, writesize, filesize, num_aio, step, sparse, direct, keep); - - return 0; -} From michael.monnerie@is.it-management.at Wed Jul 29 13:51:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TIph9u007374 for ; Wed, 29 Jul 2009 13:51:43 -0500 X-ASG-Debug-ID: 1248893548-7e6901090000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9D72614202D0 for ; Wed, 29 Jul 2009 11:52:29 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id UuvNV7r8O3FrWDai for ; Wed, 29 Jul 2009 11:52:29 -0700 (PDT) Received: from mailsrv.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 0F7205543 for ; Wed, 29 Jul 2009 20:52:45 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id 7A3D940016D for ; Wed, 29 Jul 2009 20:52:27 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Subject: Re: [xfs crash] Kernel BUG at /fs/xfs/support/debug.c:57 Date: Wed, 29 Jul 2009 20:52:26 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.3-ZMI; KDE/4.1.3; x86_64; ; ) References: <200907271657.55226.Christian.Fischer@easterngraphics.com> <4A705160.7040709@sandeen.net> <200907291659.41314.Christian.Fischer@easterngraphics.com> In-Reply-To: <200907291659.41314.Christian.Fischer@easterngraphics.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart6704500.zg6SogyYyq"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907292052.27008@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248893549 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4731 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart6704500.zg6SogyYyq Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Mittwoch 29 Juli 2009 Christian Fischer wrote: > 2.6.18 is the official xen kernel for now. Yes, that's a pity. We also use XenServer, even in the actual version=20 5.5 the kernel is still 2.6.18. And that's why they only use ext3, I=20 guess. I really hope for the Xen Server patches to arrive in standard kernels=20 once [ASAP], but the merge is always pushed back... lwn.net has good=20 articles about that. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart6704500.zg6SogyYyq Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpwmmsACgkQzhSR9xwSCbTaJQCeNhbsQ605EK5Uz8rF1+BvWrfZ 3hQAoLbWfxYCEWKQ+/c+beidGr1aKpCQ =Q9I5 -----END PGP SIGNATURE----- --nextPart6704500.zg6SogyYyq-- From sandy@crosshandstraining.org.uk Wed Jul 29 16:11:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.3 required=5.0 tests=BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6TLBoQU023224 for ; Wed, 29 Jul 2009 16:11:52 -0500 X-ASG-Debug-ID: 1248901956-7e5e038a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from DS4386.ds4386.dedicated.turbodns.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 60E581421CB0 for ; Wed, 29 Jul 2009 14:12:36 -0700 (PDT) Received: from DS4386.ds4386.dedicated.turbodns.co.uk (server4386.dedicated.webfusion.co.uk [212.241.182.110]) by cuda.sgi.com with ESMTP id jdLcB344eaJTcRrP for ; Wed, 29 Jul 2009 14:12:36 -0700 (PDT) Received: from host81-148-50-219.in-addr.btopenworld.com ([81.148.50.219]) by ds4386.dedicated.turbodns.co.uk with MailEnable ESMTP; Wed, 29 Jul 2009 16:29:34 +0100 From: "Sandra Keating" X-ASG-Orig-Subj: =?ISO-8859-1?B?cmU6IKM5OSBwLnAuIC0gbG93ZXN0IHRyYWluaW5nIHJhdGVzIGluIHRoZSBVSw==?= Subject: =?ISO-8859-1?B?cmU6IKM5OSBwLnAuIC0gbG93ZXN0IHRyYWluaW5nIHJhdGVzIGluIHRoZSBVSw==?= X-Direct-Mail-Bounce: 2F02BE61-7D25-4552-B7E0-BE7FF702EFB8; xfs@oss.sgi.com Message-id: <87AD07A6-0189-4828-9527-75913C798FC0@crosshandstraining.org.uk> MIME-Version: 1.0 Date: Wed, 29 Jul 2009 16:29:32 +0100 To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=Direct-Mail-MIME-Boundary-2 X-Barracuda-Connect: server4386.dedicated.webfusion.co.uk[212.241.182.110] X-Barracuda-Start-Time: 1248901957 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0136 1.0000 -1.9321 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.93 X-Barracuda-Spam-Status: No, SCORE=-1.93 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4739 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --Direct-Mail-MIME-Boundary-2 Content-Type: text/plain; format=flowed; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Hi There are only a few days left to take advantage of our great discount offe= r of L99 p.p. on any places, on any of our training courses.This offer is a= vailable when you pay at the time of booking, either online at crosshandstr= aining.org.uk or by phone on 01584 890970 and ends on 31 July 2009. This ex= cellent rate is inclusive of lunch, refreshments, course materials, certifi= cate of completion and website membership. Full programme details, dates an= d locations can also be found online. Our workshops run from 10am to 5pm an= d are located in central venues. This is great value, especially if you or your colleagues are interested in= affordable, effective and practical training from a proven supplier. Durin= g the past ten years we have worked with over 1,000 organisations and train= ed more than 10,000 individuals. Our workshops run throughout the year in London, Birmingham, Manchester, Ed= inburgh, Brussels and Geneva and can also be delivered in-house/on-site at= extremely competitive rates - starting at L999 plus VAT for up to 12 deleg= ates . TRAINING COURSES Creative & Professional Writing Skills Writing Press Releases Media Relations Training - tv, radio, print Media Strategies & Campaigns Perfect Podcasts Vodcast Production Techniques Marketing & Customer Service Strategies Presentation & Communication Skills Public Speaking & PowerPoint Presentation Skills Facilitation Skills Effective Training Skills train the trainer Handling Interviews Emergency Planning & Call Handling Teambuilding & Group Dynamics Please note, our rates are subject to VAT at the prevailing rate. Regards, Sandra Keating crosshands ltd, coreley, shropshire sy8 3ar, t: 01584 890970; e: bookings = =40 crosshandstraining.org.uk incorporated in england & wales. company registration: 3136393 VAT registra= tion: 682 1126 51 You have been sent this mail because we understand that you wish to receive= information about our training services, however, if this is incorrect, or= you no longer wish to receive mail, please email remove=40crosshandstraini= ng.org.uk and your details will be removed immediately. --Direct-Mail-MIME-Boundary-2 Content-Type: text/html; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable
H= i
T= here are only a few days left to take advantage of our great discount offer= of &=23xa3;99 p.p. on any places, on any of our training courses.Th= is offer&=23xa0;is available when you pay at the time of booking, either on= line at crosshandstraining.org.uk or by phone on 01584 890970 and en= ds on 31 July 2009. This excellent rate is inclusive of lunch, refre= shments, course materials, certificate of completion and website membership= =2E Full programme details,&=23xa0;dates and locations can also be found on= line. Our workshops run from 10am to 5pm and are located in central = venues.
T= his is great value, especially if you or your colleagues are interested in = affordable, effective and practical training from a proven supplier. During= the past ten years we have worked with over 1,000 organisations and traine= d more than 10,000 individuals.
O= ur workshops run throughout the year in London, Birmingham, Manchester, Edi= nburgh, Brussels and Geneva and can also be delivered&=23xa0; in-house/o= n-site at extremely competitive rates - starting at &=23xa3;999 plus= VAT for up to 12 delegates .&=23xa0;
<= b>TRAINING COURSES
<= b>Creative & Professional Writing Skills
<= b>Writing Press Releases
<= b>Media Relations Training - tv, radio, print
<= b>Media Strategies & Campaigns
<= b>Perfect Podcasts
<= b>Vodcast Production Techniques&=23xa0;
<= b>Marketing & Customer Service Strategies
<= b>Presentation & Communication Skills
<= b>Public Speaking & PowerPoint Presentation Skills
<= b>Facilitation Skills
<= b>Effective Training Skills &=23x2013; train the trainer&=23xa0;
=
<= b>Handling Interviews
<= b>Emergency Planning & Call Handling
<= b>Teambuilding & Group Dynamics
P= lease note, our rates are subject to VAT at the prevailing rate.
R= egards,
S= andra Keating
<= span style=3D=22color: =232c4a78=22>
crosshands ltd, coreley, shropshire sy8 3ar, t: 01584 890970; e: boo= kings =40 crosshandstraining.org.uk
i= ncorporated in england & wales. company registration: 3136393 VAT regis= tration: 682 1126 51
Y= ou have been sent this&=23xa0;mail because we understand that you wish to r= eceive information about our training services, however, if this is incorre= ct,&=23xa0;or you&=23xa0;no longer wish to receive mail, please email&=23xa= 0;remove=40crossh= andstraining.org.uk and your details will be removed immediately. =
= --Direct-Mail-MIME-Boundary-2-- From eddy.y.zhao@gmail.com Wed Jul 29 20:24:15 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6U1OEUi033795 for ; Wed, 29 Jul 2009 20:24:15 -0500 X-ASG-Debug-ID: 1248917101-40f7000f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from qw-out-1920.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1B824142555F for ; Wed, 29 Jul 2009 18:25:01 -0700 (PDT) Received: from qw-out-1920.google.com (qw-out-1920.google.com [74.125.92.148]) by cuda.sgi.com with ESMTP id NsYcGQSkQxQK2bZL for ; Wed, 29 Jul 2009 18:25:01 -0700 (PDT) Received: by qw-out-1920.google.com with SMTP id 5so635082qwf.32 for ; Wed, 29 Jul 2009 18:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=jzv2Dj3n7L5pait6aeM1wDBL8SAUX1UN5ayg+AcN2aA=; b=cMrm+wspVA9fKGm7replg65q1U6nh9D7RC/UKFIyUvQLIfwxHMrHsXXC6ky2KlRGnb JBFoQ46HnRDsc8MiumNgG6xrtKLrJu3GtkWXa18PMoP8LCy63m+lWmmN2wNzUI+88/lb SoqgQz7eEgb3bB81nWuydNqjFlWDZ71Qgy03w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=xts4D2xIHKGQX0Vy8y7f8OycogwElHoTLMqQODHNFUucvczny1c+2sPkmFWi4qGjx+ T3HdIIK3mgWsG5CC3ksCUwJnsH7DrwI2iDn/Ea/omqdGQQwFbW3QRo+ieROjXbE8TPit skiikybJiN6pmo7xkNG6MkbcPOHVFUo0qbbhs= MIME-Version: 1.0 Received: by 10.229.96.142 with SMTP id h14mr85717qcn.99.1248917101213; Wed, 29 Jul 2009 18:25:01 -0700 (PDT) In-Reply-To: <4A70676B.4090105@sandeen.net> References: <362522677.1010811248671789619.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <1938435153.1010831248671852499.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <4A6F0978.4070709@sandeen.net> <4A6F20D0.4050303@sandeen.net> <4A70676B.4090105@sandeen.net> Date: Thu, 30 Jul 2009 09:25:00 +0800 Message-ID: X-ASG-Orig-Subj: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM Subject: Re: BUG REPORT: XFS LOG FORWARD COMPATIBILITY PROBLEM From: Eddy Zhao To: Eric Sandeen Cc: Lachlan McIlroy , xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0016364ee2442bfd7e046fe22c87 X-Barracuda-Connect: qw-out-1920.google.com[74.125.92.148] X-Barracuda-Start-Time: 1248917102 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0609 1.0000 -1.6314 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.63 X-Barracuda-Spam-Status: No, SCORE=-1.63 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4757 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016364ee2442bfd7e046fe22c87 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > > If you're signing up to make xfs_repair replay logs, I'm sure > we'd welcome the patch. :) > I'll think twice and try. Thanks for the help! Eric, Lachlan --0016364ee2442bfd7e046fe22c87 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
>
> If you're signing up to make xfs_repair replay logs, I'm = sure
> we'd welcome the patch. =A0:)
>
=A0
I'll think twice and try.
=A0
Thanks for the help! Eric, Lachlan
--0016364ee2442bfd7e046fe22c87-- From erik.gulliksson@diino.net Thu Jul 30 04:49:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6U9nI7m063648 for ; Thu, 30 Jul 2009 04:49:18 -0500 X-ASG-Debug-ID: 1248947395-1b8303080000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yw0-f202.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D7E5239553B for ; Thu, 30 Jul 2009 02:49:55 -0700 (PDT) Received: from mail-yw0-f202.google.com (mail-yw0-f202.google.com [209.85.211.202]) by cuda.sgi.com with ESMTP id vVHVs4DFkDBvAkSe for ; Thu, 30 Jul 2009 02:49:55 -0700 (PDT) Received: by ywh40 with SMTP id 40so472595ywh.29 for ; Thu, 30 Jul 2009 02:49:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.151.42.10 with SMTP id u10mr1767214ybj.190.1248947394859; Thu, 30 Jul 2009 02:49:54 -0700 (PDT) Date: Thu, 30 Jul 2009 11:49:54 +0200 Message-ID: <7dc591420907300249w76835ee5v4d5764dcadd71fa6@mail.gmail.com> X-ASG-Orig-Subj: xfs project quota question Subject: xfs project quota question From: Erik Gulliksson To: xfs mailing list Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-yw0-f202.google.com[209.85.211.202] X-Barracuda-Start-Time: 1248947395 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2160 1.0000 -0.7443 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.74 X-Barracuda-Spam-Status: No, SCORE=-0.74 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4790 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 BSF_SC5_SA210e Custom Rule SA210e X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, We have recently started to use XFS for our production storage servers (coming from ZFS and Lustre/ext3) and are now considering activating project quota on quite massive scale. For our setup there would be between 10k and 100k "project directories" per filesystem, each with up to 1T data and up to 1M number of files. Would this even be feasible to consider? Have anyone done any tests with a big number of project quotas for an xfs file system? How well does it scale? Best regards Erik Gulliksson -- Erik Gulliksson, erik.gulliksson@diino.net System Administrator, Diino AB http://www.diino.com From BATV+2761ef3195f8fc1c8493+2167+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 10:25:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UFP50C081308 for ; Thu, 30 Jul 2009 10:25:08 -0500 X-ASG-Debug-ID: 1248967553-75bf00f50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B3D8F14280E6 for ; Thu, 30 Jul 2009 08:25:53 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id FKo4pZyvGvoIpuyd for ; Thu, 30 Jul 2009 08:25:53 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWXVw-0007KH-Ml; Thu, 30 Jul 2009 15:25:52 +0000 Date: Thu, 30 Jul 2009 11:25:52 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH (trivial)] xfs_db: remove "-f" option from freesp usage() Subject: Re: [PATCH (trivial)] xfs_db: remove "-f" option from freesp usage() Message-ID: <20090730152552.GA27914@infradead.org> References: <4A705C6A.5010603@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A705C6A.5010603@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248967553 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jul 29, 2009 at 09:27:54AM -0500, Eric Sandeen wrote: > the freesp doesn't support "-f" so take it out of the usage(). > > The manpage is fine; usage() is the only reference to "-f" Looks good. Reviewed-by: Christoph Hellwig From BATV+2761ef3195f8fc1c8493+2167+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 10:27:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UFR8w9081461 for ; Thu, 30 Jul 2009 10:27:08 -0500 X-ASG-Debug-ID: 1248967676-75f301040000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 78E6E1428183 for ; Thu, 30 Jul 2009 08:27:56 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 2rJNtfe9IpfDAEM1 for ; Thu, 30 Jul 2009 08:27:56 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWXXw-0007Ve-5W; Thu, 30 Jul 2009 15:27:56 +0000 Date: Thu, 30 Jul 2009 11:27:56 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: actually hook up 198, make it generic Subject: Re: [PATCH] xfstests: actually hook up 198, make it generic Message-ID: <20090730152756.GB27914@infradead.org> References: <4A708FF7.5@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A708FF7.5@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248967676 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Jul 29, 2009 at 01:07:51PM -0500, Eric Sandeen wrote: > Not entirely sure how I managed this, but 198 was not in groups > so was never run - and wasn't in the makefile, so was never built. > Oops. > > Fix that up, make it a generic test, and move it to the > aio-dio-regress subdir. Hah, great one. > # This should actually run on anything that supports O_DIRECT + AIO... > -_supported_fs xfs > +_supported_fs generic maybe also remove that comment now that it's generic. > --- /dev/null > +++ b/src/aio-dio-regress/aiodio_sparse2.c > @@ -0,0 +1,384 @@ > +/* gcc -g -Wall -O2 aiodio_sparse.c -o aiodio_sparse -laio */ > + > +/* > + * From http://developer.osdl.org/daniel/AIO/TESTS/aiodio_sparse.c > + * With patch from https://bugzilla.redhat.com/attachment.cgi?id=142124 > + * (Bug https://bugzilla.redhat.com/show_bug.cgi?id=217098) > + */ Did we manage to get a proper copyright / license statement for this one. From BATV+2761ef3195f8fc1c8493+2167+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 10:31:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UFV0Uf081723 for ; Thu, 30 Jul 2009 10:31:00 -0500 X-ASG-Debug-ID: 1248967907-761401260000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0D9EA14286D0 for ; Thu, 30 Jul 2009 08:31:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 2P9vTanSlIm8fIQZ for ; Thu, 30 Jul 2009 08:31:47 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWXbf-0008Ma-LS; Thu, 30 Jul 2009 15:31:47 +0000 Date: Thu, 30 Jul 2009 11:31:47 -0400 From: Christoph Hellwig To: Erik Gulliksson Cc: xfs mailing list X-ASG-Orig-Subj: Re: xfs project quota question Subject: Re: xfs project quota question Message-ID: <20090730153147.GA31935@infradead.org> References: <7dc591420907300249w76835ee5v4d5764dcadd71fa6@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7dc591420907300249w76835ee5v4d5764dcadd71fa6@mail.gmail.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248967908 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 30, 2009 at 11:49:54AM +0200, Erik Gulliksson wrote: > Hi, > > We have recently started to use XFS for our production storage servers > (coming from ZFS and Lustre/ext3) and are now considering activating > project quota on quite massive scale. For our setup there would be > between 10k and 100k "project directories" per filesystem, each with > up to 1T data and up to 1M number of files. Would this even be > feasible to consider? Have anyone done any tests with a big number of > project quotas for an xfs file system? How well does it scale? Project quotas scale exactly the same way as user or group quotas. 10k different IDs defintively should be fine. 100k different IDs might run into scaling problems with the in-core quota hash, but that's something only limited by choice of a hash-table for the in-memory lookup and could be easily fixed by switching to a smarter data structure which we could fix short-term given sufficient enough interest. From sandeen@sandeen.net Thu Jul 30 10:37:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UFbb9f082214 for ; Thu, 30 Jul 2009 10:37:37 -0500 X-ASG-Debug-ID: 1248968304-2f3c01270000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 13C91396891 for ; Thu, 30 Jul 2009 08:38:24 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 1NmKD92EvpMWFEiW for ; Thu, 30 Jul 2009 08:38:24 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 668899BECF9; Thu, 30 Jul 2009 10:38:23 -0500 (CDT) Message-ID: <4A71BE6F.4030609@sandeen.net> Date: Thu, 30 Jul 2009 10:38:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: actually hook up 198, make it generic Subject: Re: [PATCH] xfstests: actually hook up 198, make it generic References: <4A708FF7.5@sandeen.net> <20090730152756.GB27914@infradead.org> In-Reply-To: <20090730152756.GB27914@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248968305 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4811 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Wed, Jul 29, 2009 at 01:07:51PM -0500, Eric Sandeen wrote: >> Not entirely sure how I managed this, but 198 was not in groups >> so was never run - and wasn't in the makefile, so was never built. >> Oops. >> >> Fix that up, make it a generic test, and move it to the >> aio-dio-regress subdir. > > Hah, great one. yeah, I rock! :/ >> # This should actually run on anything that supports O_DIRECT + AIO... >> -_supported_fs xfs >> +_supported_fs generic > > maybe also remove that comment now that it's generic. Ok, sure. >> --- /dev/null >> +++ b/src/aio-dio-regress/aiodio_sparse2.c >> @@ -0,0 +1,384 @@ >> +/* gcc -g -Wall -O2 aiodio_sparse.c -o aiodio_sparse -laio */ >> + >> +/* >> + * From http://developer.osdl.org/daniel/AIO/TESTS/aiodio_sparse.c >> + * With patch from https://bugzilla.redhat.com/attachment.cgi?id=142124 >> + * (Bug https://bugzilla.redhat.com/show_bug.cgi?id=217098) >> + */ > > Did we manage to get a proper copyright / license statement for this > one. hadn't looked into it; I'll ping Daniel McNeil who seems to be the original author ...? But I'll fix it and worry about the copyright later, since it's already in ... -Eric From sandeen@sandeen.net Thu Jul 30 11:15:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UGF3BQ084332 for ; Thu, 30 Jul 2009 11:15:03 -0500 X-ASG-Debug-ID: 1248970550-2f7801960000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C1466396DC1 for ; Thu, 30 Jul 2009 09:15:50 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 5jUwjcgPJPzqJ8nJ for ; Thu, 30 Jul 2009 09:15:50 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 070C8AAE390; Thu, 30 Jul 2009 11:15:50 -0500 (CDT) Message-ID: <4A71C735.1080004@sandeen.net> Date: Thu, 30 Jul 2009 11:15:49 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: actually hook up 198, make it generic Subject: Re: [PATCH] xfstests: actually hook up 198, make it generic References: <4A708FF7.5@sandeen.net> <20090730152756.GB27914@infradead.org> <4A71BE6F.4030609@sandeen.net> In-Reply-To: <4A71BE6F.4030609@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248970550 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4813 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Christoph Hellwig wrote: ... >> Did we manage to get a proper copyright / license statement for this >> one. > > hadn't looked into it; I'll ping Daniel McNeil who seems to be the > original author ...? > > But I'll fix it and worry about the copyright later, since it's already > in ... > > -Eric > Actually there's a whole whack of nice tests at http://devresources.linux-foundation.org/daniel/AIO/TESTS/ But I'm having trouble finding Daniel ... Seems like they'd all be good to pull in; one test per test, I guess. -Eric From lists@nabble.com Thu Jul 30 12:02:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UH2gAr087411 for ; Thu, 30 Jul 2009 12:02:43 -0500 X-ASG-Debug-ID: 1248973945-26f6018a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kuber.nabble.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 007E810E9D2B for ; Thu, 30 Jul 2009 10:12:25 -0700 (PDT) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by cuda.sgi.com with ESMTP id GMnW4eSJPrzVShXV for ; Thu, 30 Jul 2009 10:12:25 -0700 (PDT) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1MWZ2O-0005gs-VP for xfs@oss.sgi.com; Thu, 30 Jul 2009 10:03:28 -0700 Message-ID: <24742623.post@talk.nabble.com> Date: Thu, 30 Jul 2009 10:03:28 -0700 (PDT) From: rnb To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs i/O error Subject: xfs i/O error MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: neil.bell@gmail.com X-Barracuda-Connect: kuber.nabble.com[216.139.236.158] X-Barracuda-Start-Time: 1248973947 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4817 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Running Ubuntu 9.04 kernel 2.26.28.14 generic Drive mounts fine. xfs_repair shows no errors sudo xfs_repair /dev/sdg1 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... done xfs_check did move a few things around but finished fine sudo xfs_fsr -v /dev/sdg1 <== This is just so far it is still running. /media/Films start inode=0 ino=140 bad read of 0 bytes from ino=140: Input/output error ino=139 extents before:66 after:8 ino=139 ino=145 extents before:42 after:7 ino=145 ino=146 extents before:40 after:8 ino=146 ino=143 bad read of 0 bytes from ino=143: Input/output error ino=144 extents before:27 after:8 ino=144 ino=8763008 bad read of 0 bytes from ino=8763008: Input/output error ino=8763059 bad read of 0 bytes from ino=8763059: Input/output error ino=8763057 extents before:307 after:12 ino=8763057 ino=8763058 extents before:259 after:11 ino=8763058 ino=8763024 bad read of 0 bytes from ino=8763024: Input/output error ino=8763055 kk extents before:125 after:10 ino=8763055 ino=8763030 bad read of 0 bytes from ino=8763030: Input/output error ino=8763060 bad read of 0 bytes from ino=8763060: Input/output error ino=8763056 extents before:62 after:13 ino=8763056 ino=8763066 Now my issue is how do I fix it if xfs_repair doesn't see a problem. Anything getting copied to the drive works fine in place wasn't until i tried to move it off I noticed the issue. Some things copy fine from it several others fail. Then i get Input/output error. It is a full 1tb drive . WD mybook it lost power which I think is what caused this issue. How can I correct the issue. Everything I try takes a hell of a long time and doesn't yield a positive result -- View this message in context: http://www.nabble.com/xfs-i-O-error-tp24742623p24742623.html Sent from the Xfs - General mailing list archive at Nabble.com. From sage@newdream.net Thu Jul 30 13:56:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UIuCDJ095198 for ; Thu, 30 Jul 2009 13:56:12 -0500 X-ASG-Debug-ID: 1248980218-20ed00d70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from cobra.newdream.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A381339765A for ; Thu, 30 Jul 2009 11:56:58 -0700 (PDT) Received: from cobra.newdream.net (cobra.newdream.net [66.33.216.30]) by cuda.sgi.com with ESMTP id BroyR3bbypc8OExE for ; Thu, 30 Jul 2009 11:56:58 -0700 (PDT) Received: by cobra.newdream.net (Postfix, from userid 1031) id 5794FBCB57; Thu, 30 Jul 2009 11:56:58 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by cobra.newdream.net (Postfix) with ESMTP id 3BA9BBC8D2; Thu, 30 Jul 2009 11:56:58 -0700 (PDT) Date: Thu, 30 Jul 2009 11:56:58 -0700 (PDT) From: Sage Weil To: Christoph Hellwig cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 0/9] fixes for memory allocator recursions into the filesystem Subject: Re: [PATCH 0/9] fixes for memory allocator recursions into the filesystem In-Reply-To: <20090718221452.594956000@bombadil.infradead.org> Message-ID: References: <20090718221452.594956000@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Barracuda-Connect: cobra.newdream.net[66.33.216.30] X-Barracuda-Start-Time: 1248980219 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Christoph, I just noticed another warning (the same as the second one I sent before) with your patchset applied to 2.6.30. This is the unresolved iolock issue you mentioned? Just FYI. sage [ 4328.303413] ================================= [ 4328.305294] [ INFO: inconsistent lock state ] [ 4328.305294] 2.6.30 #24 [ 4328.305294] --------------------------------- [ 4328.305294] inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-W} usage. [ 4328.305294] kswapd0/290 [HC0[0]:SC0[0]:HE1:SE1] takes: [ 4328.305294] (&(&ip->i_iolock)->mr_lock){++++?+}, at: [] xfs_ilock+0x27/0x79 [ 4328.305294] {RECLAIM_FS-ON-W} state was registered at: [ 4328.305294] [] mark_held_locks+0x4d/0x6b [ 4328.305294] [] lockdep_trace_alloc+0xa8/0xc3 [ 4328.305294] [] __alloc_pages_internal+0x6d/0x457 [ 4328.305294] [] alloc_pages_current+0xbe/0xc6 [ 4328.305294] [] grab_cache_page_write_begin+0x5e/0xa2 [ 4328.305294] [] block_write_begin+0x3d/0xcf [ 4328.305294] [] xfs_vm_write_begin+0x25/0x27 [ 4328.305294] [] generic_file_buffered_write+0x139/0x2ff [ 4328.305294] [] xfs_write+0x4de/0x717 [ 4328.305294] [] xfs_file_aio_write+0x61/0x63 [ 4328.305294] [] do_sync_write+0xe7/0x12d [ 4328.305294] [] vfs_write+0xae/0x137 [ 4328.305294] [] sys_write+0x47/0x6e [ 4328.305294] [] system_call_fastpath+0x16/0x1b [ 4328.305294] [] 0xffffffffffffffff [ 4328.305294] irq event stamp: 8357751 [ 4328.305294] hardirqs last enabled at (8357751): [] _spin_unlock_irqrestore+0x3f/0x68 [ 4328.450537] hardirqs last disabled at (8357750): [] _spin_lock_irqsave+0x19/0x7f [ 4328.450537] softirqs last enabled at (8357742): [] __do_softirq+0x1d9/0x1e5 [ 4328.450537] softirqs last disabled at (8357721): [] call_softirq+0x1c/0x28 [ 4328.450537] [ 4328.450537] other info that might help us debug this: [ 4328.450537] 2 locks held by kswapd0/290: [ 4328.450537] #0: (shrinker_rwsem){++++..}, at: [] shrink_slab+0x38/0x188 [ 4328.450537] #1: (iprune_mutex){+.+.-.}, at: [] shrink_icache_memory+0x4b/0x23b [ 4328.514337] [ 4328.514337] stack backtrace: [ 4328.518349] Pid: 290, comm: kswapd0 Not tainted 2.6.30 #24 [ 4328.522330] Call Trace: [ 4328.522330] [] print_usage_bug+0x1b2/0x1c3 [ 4328.522330] [] ? check_usage_forwards+0x0/0x9c [ 4328.522330] [] mark_lock+0x2fa/0x538 [ 4328.522330] [] __lock_acquire+0x80d/0x16a9 [ 4328.522330] [] lock_acquire+0xf6/0x11a [ 4328.522330] [] ? xfs_ilock+0x27/0x79 [ 4328.522330] [] down_write_nested+0x46/0x7a [ 4328.522330] [] ? xfs_ilock+0x27/0x79 [ 4328.522330] [] xfs_ilock+0x27/0x79 [ 4328.522330] [] xfs_ireclaim+0x8d/0x153 [ 4328.522330] [] xfs_reclaim_inode+0x131/0x13f [ 4328.522330] [] xfs_reclaim+0x98/0xa9 [ 4328.522330] [] xfs_fs_destroy_inode+0x37/0x57 [ 4328.522330] [] destroy_inode+0x3a/0x4f [ 4328.522330] [] dispose_list+0xc4/0xf8 [ 4328.522330] [] shrink_icache_memory+0x205/0x23b [ 4328.522330] [] shrink_slab+0xdf/0x188 [ 4328.522330] [] kswapd+0x4fc/0x6b2 [ 4328.522330] [] ? finish_task_switch+0x3b/0xdc [ 4328.522330] [] ? isolate_pages_global+0x0/0x208 [ 4328.522330] [] ? autoremove_wake_function+0x0/0x38 [ 4328.522330] [] ? trace_hardirqs_on+0xd/0xf [ 4328.522330] [] ? kswapd+0x0/0x6b2 [ 4328.522330] [] ? kswapd+0x0/0x6b2 [ 4328.522330] [] kthread+0x56/0x83 [ 4328.522330] [] child_rip+0xa/0x20 [ 4328.522330] [] ? restore_args+0x0/0x30 [ 4328.522330] [] ? __schedule+0xf9/0x948 [ 4328.522330] [] ? kthread+0x0/0x83 [ 4328.522330] [] ? child_rip+0x0/0x20 On Sat, 18 Jul 2009, Christoph Hellwig wrote: > lockdep has recently start tracking if a lock is used in reclaim context > and if so warns if we do allocations without the NOFS flag inside it. > > This patch series fixes the easy targers involving the i_lock by switching > various allocations to the NOFS variant, or in case of the growfs code > moving the allocation out of the lock. > > We still have some more issues that involve the iolock, but I think we > can simply get rid of the iolock in the reclaim path, but I'll send that > our for a separate discussion. > > Sage, this should fix the two reports you've sent a while ago. > > From BATV+2761ef3195f8fc1c8493+2167+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 30 14:02:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UJ2P4m095507 for ; Thu, 30 Jul 2009 14:02:27 -0500 X-ASG-Debug-ID: 1248981130-418e013d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CE58F10ECDFF for ; Thu, 30 Jul 2009 12:12:10 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Ss79o9fpBKMzVXtw for ; Thu, 30 Jul 2009 12:12:10 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWauG-0005nu-SH; Thu, 30 Jul 2009 19:03:12 +0000 Date: Thu, 30 Jul 2009 15:03:12 -0400 From: Christoph Hellwig To: Sage Weil Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 0/9] fixes for memory allocator recursions into the filesystem Subject: Re: [PATCH 0/9] fixes for memory allocator recursions into the filesystem Message-ID: <20090730190312.GA19593@infradead.org> References: <20090718221452.594956000@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1248981130 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 30, 2009 at 11:56:58AM -0700, Sage Weil wrote: > Hi Christoph, > > I just noticed another warning (the same as the second one I sent > before) with your patchset applied to 2.6.30. This is the unresolved > iolock issue you mentioned? Just FYI. Yes, that's the iolock one. Patch will follow soon. From sandeen@sandeen.net Thu Jul 30 14:12:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UJCZSL096083 for ; Thu, 30 Jul 2009 14:12:36 -0500 X-ASG-Debug-ID: 1248981739-271303ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C6DEA10ED3CC for ; Thu, 30 Jul 2009 12:22:19 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id DSfBVxGKA3iEOjcC for ; Thu, 30 Jul 2009 12:22:19 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id D5D6BAAE390; Thu, 30 Jul 2009 14:13:21 -0500 (CDT) Message-ID: <4A71F0D1.1020005@sandeen.net> Date: Thu, 30 Jul 2009 14:13:21 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: rnb CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error References: <24742623.post@talk.nabble.com> In-Reply-To: <24742623.post@talk.nabble.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1248981740 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4825 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean rnb wrote: > Running Ubuntu 9.04 kernel 2.26.28.14 generic > Drive mounts fine. > xfs_repair shows no errors ... > > xfs_check did move a few things around but finished fine Actually xfs_check never changes anything ;) > sudo xfs_fsr -v /dev/sdg1 <== This is just so far it is still running. > /media/Films start inode=0 > ino=140 > bad read of 0 bytes from ino=140: Input/output error Anything in dmesg when this happens? ... > Now my issue is how do I fix it if xfs_repair doesn't see a problem. It must not be a problem on-disk. At least, hopefully not. :) > Anything getting copied to the drive works fine in place wasn't until i > tried to move it off I noticed the issue. Some things copy fine from it > several others fail. Then i get Input/output error. It is a full 1tb drive . > WD mybook it lost power which I think is what caused this issue. How can I > correct the issue. Everything I try takes a hell of a long time and doesn't > yield a positive result Oh, so it's not just fsr that does it? cp too? Anyway, look at dmesg when you get the error and see if there are messages logged from the kernel when this happens. -Eric From lists@nabble.com Thu Jul 30 16:44:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ULiQRE101393 for ; Thu, 30 Jul 2009 16:44:26 -0500 X-ASG-Debug-ID: 1248990313-05d3029c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kuber.nabble.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D81883982CA for ; Thu, 30 Jul 2009 14:45:13 -0700 (PDT) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by cuda.sgi.com with ESMTP id tzijxQxj4vcYcKor for ; Thu, 30 Jul 2009 14:45:13 -0700 (PDT) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1MWdR2-0003Ef-Qk for xfs@oss.sgi.com; Thu, 30 Jul 2009 14:45:12 -0700 Message-ID: <24747808.post@talk.nabble.com> Date: Thu, 30 Jul 2009 14:45:12 -0700 (PDT) From: rnb To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error In-Reply-To: <24742623.post@talk.nabble.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: neil.bell@gmail.com References: <24742623.post@talk.nabble.com> X-Barracuda-Connect: kuber.nabble.com[216.139.236.158] X-Barracuda-Start-Time: 1248990313 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4833 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean [70273.864305] sd 8:0:0:0: [sdg] Sense Key : Medium Error [current] [70273.864314] Info fld=0x0 [70273.864318] sd 8:0:0:0: [sdg] Add. Sense: Unrecovered read error [70273.864327] end_request: I/O error, dev sdg, sector 378206415 [70276.938405] sd 8:0:0:0: [sdg] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK running a defrag that last few hours so there are tonnes of those. Like i said it has no issues mounting, xfs_repair fails to see the problem. Bad sectors I hope not the drives are a few months old and this is a storage server to it isn't like it is getting a tonne of writing done to it. Being external though I can't rule out hardware failure and smartctl doesn't run over USB. rnb wrote: > > Running Ubuntu 9.04 kernel 2.26.28.14 generic > Drive mounts fine. > xfs_repair shows no errors > sudo xfs_repair /dev/sdg1 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > - found root inode chunk > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > - check for inodes claiming duplicate blocks... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > Phase 5 - rebuild AG headers and trees... > - reset superblock... > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > - traversal finished ... > - moving disconnected inodes to lost+found ... > Phase 7 - verify and correct link counts... > done > > xfs_check did move a few things around but finished fine > > sudo xfs_fsr -v /dev/sdg1 <== This is just so far it is still running. > /media/Films start inode=0 > ino=140 > bad read of 0 bytes from ino=140: Input/output error > ino=139 > extents before:66 after:8 ino=139 > ino=145 > extents before:42 after:7 ino=145 > ino=146 > extents before:40 after:8 ino=146 > ino=143 > bad read of 0 bytes from ino=143: Input/output error > ino=144 > extents before:27 after:8 ino=144 > ino=8763008 > bad read of 0 bytes from ino=8763008: Input/output error > ino=8763059 > bad read of 0 bytes from ino=8763059: Input/output error > ino=8763057 > extents before:307 after:12 ino=8763057 > ino=8763058 > extents before:259 after:11 ino=8763058 > ino=8763024 > bad read of 0 bytes from ino=8763024: Input/output error > ino=8763055 > kk > extents before:125 after:10 ino=8763055 > ino=8763030 > bad read of 0 bytes from ino=8763030: Input/output error > ino=8763060 > bad read of 0 bytes from ino=8763060: Input/output error > ino=8763056 > extents before:62 after:13 ino=8763056 > ino=8763066 > > Now my issue is how do I fix it if xfs_repair doesn't see a problem. > Anything getting copied to the drive works fine in place wasn't until i > tried to move it off I noticed the issue. Some things copy fine from it > several others fail. Then i get Input/output error. It is a full 1tb drive > . WD mybook it lost power which I think is what caused this issue. How can > I correct the issue. Everything I try takes a hell of a long time and > doesn't yield a positive result > -- View this message in context: http://www.nabble.com/xfs-i-O-error-tp24742623p24747808.html Sent from the Xfs - General mailing list archive at Nabble.com. From lists@nabble.com Thu Jul 30 16:54:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6ULsD6G101911 for ; Thu, 30 Jul 2009 16:54:14 -0500 X-ASG-Debug-ID: 1248990901-021f02c80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kuber.nabble.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9C6DE398178 for ; Thu, 30 Jul 2009 14:55:01 -0700 (PDT) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by cuda.sgi.com with ESMTP id FwSEe34BtH8Rmz9e for ; Thu, 30 Jul 2009 14:55:01 -0700 (PDT) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1MWdaW-0003WR-W2 for xfs@oss.sgi.com; Thu, 30 Jul 2009 14:55:00 -0700 Message-ID: <24747808.post@talk.nabble.com> Date: Thu, 30 Jul 2009 14:55:00 -0700 (PDT) From: rnb To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: neil.bell@gmail.com X-Barracuda-Connect: kuber.nabble.com[216.139.236.158] X-Barracuda-Start-Time: 1248990901 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4835 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean dmesg [ 18.316753] scsi 8:0:0:0: Direct-Access WD 10EADS External 1.75 PQ: 0 ANSI: 4 [ 18.317732] sd 8:0:0:0: [sdg] 1953525168 512-byte hardware sectors: (1.00 TB/931 GiB) [ 18.318230] sd 8:0:0:0: [sdg] Write Protect is off [ 18.318233] sd 8:0:0:0: [sdg] Mode Sense: 23 00 00 00 [ 18.318236] sd 8:0:0:0: [sdg] Assuming drive cache: write through [ 18.318856] sd 8:0:0:0: [sdg] 1953525168 512-byte hardware sectors: (1.00 TB/931 GiB) [ 18.319354] sd 8:0:0:0: [sdg] Write Protect is off [ 18.319358] sd 8:0:0:0: [sdg] Mode Sense: 23 00 00 00 [ 18.319360] sd 8:0:0:0: [sdg] Assuming drive cache: write through [ 18.319364] sdg: sdg1 [ 18.333586] sd 8:0:0:0: [sdg] Attached SCSI disk [ 18.333638] sd 8:0:0:0: Attached scsi generic sg7 type 0 attaches and mounts fine [ 26.111917] XFS mounting filesystem sdg1 [ 26.432164] Ending clean XFS mount for filesystem: sdg1 [70273.864305] sd 8:0:0:0: [sdg] Sense Key : Medium Error [current] [70273.864314] Info fld=0x0 [70273.864318] sd 8:0:0:0: [sdg] Add. Sense: Unrecovered read error [70273.864327] end_request: I/O error, dev sdg, sector 378206415 [70276.938405] sd 8:0:0:0: [sdg] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK running a defrag that last few hours so there are tonnes of those. Like i said it has no issues mounting, xfs_repair fails to see the problem. Bad sectors I hope not the drives are a few months old and this is a storage server to it isn't like it is getting a tonne of writing done to it. Being external though I can't rule out hardware failure and smartctl doesn't run over USB. Yes it does error on cp or mv. but i'm assuming that those files are in the sectors that are erroring because the rest were copied cleanly off the drive. Even corrupted though I can still play the file without errors. In this case the drive is full of .avi rnb wrote: > > Running Ubuntu 9.04 kernel 2.26.28.14 generic > Drive mounts fine. > xfs_repair shows no errors > sudo xfs_repair /dev/sdg1 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > - found root inode chunk > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > - check for inodes claiming duplicate blocks... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > Phase 5 - rebuild AG headers and trees... > - reset superblock... > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > - traversal finished ... > - moving disconnected inodes to lost+found ... > Phase 7 - verify and correct link counts... > done > > xfs_check did move a few things around but finished fine > > sudo xfs_fsr -v /dev/sdg1 <== This is just so far it is still running. > /media/Films start inode=0 > ino=140 > bad read of 0 bytes from ino=140: Input/output error > ino=139 > extents before:66 after:8 ino=139 > ino=145 > extents before:42 after:7 ino=145 > ino=146 > extents before:40 after:8 ino=146 > ino=143 > bad read of 0 bytes from ino=143: Input/output error > ino=144 > extents before:27 after:8 ino=144 > ino=8763008 > bad read of 0 bytes from ino=8763008: Input/output error > ino=8763059 > bad read of 0 bytes from ino=8763059: Input/output error > ino=8763057 > extents before:307 after:12 ino=8763057 > ino=8763058 > extents before:259 after:11 ino=8763058 > ino=8763024 > bad read of 0 bytes from ino=8763024: Input/output error > ino=8763055 > kk > extents before:125 after:10 ino=8763055 > ino=8763030 > bad read of 0 bytes from ino=8763030: Input/output error > ino=8763060 > bad read of 0 bytes from ino=8763060: Input/output error > ino=8763056 > extents before:62 after:13 ino=8763056 > ino=8763066 > > Now my issue is how do I fix it if xfs_repair doesn't see a problem. > Anything getting copied to the drive works fine in place wasn't until i > tried to move it off I noticed the issue. Some things copy fine from it > several others fail. Then i get Input/output error. It is a full 1tb drive > . WD mybook it lost power which I think is what caused this issue. How can > I correct the issue. Everything I try takes a hell of a long time and > doesn't yield a positive result > -- View this message in context: http://www.nabble.com/xfs-i-O-error-tp24742623p24747808.html Sent from the Xfs - General mailing list archive at Nabble.com. From lists@nabble.com Thu Jul 30 17:00:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UM091U102275 for ; Thu, 30 Jul 2009 17:00:09 -0500 X-ASG-Debug-ID: 1248991792-0f6800450000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kuber.nabble.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 04F6BAD33AA for ; Thu, 30 Jul 2009 15:09:52 -0700 (PDT) Received: from kuber.nabble.com (kuber.nabble.com [216.139.236.158]) by cuda.sgi.com with ESMTP id jQHlPo6SQVJd3uo1 for ; Thu, 30 Jul 2009 15:09:52 -0700 (PDT) Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1MWdgE-0003ge-LT for xfs@oss.sgi.com; Thu, 30 Jul 2009 15:00:54 -0700 Message-ID: <24747808.post@talk.nabble.com> Date: Thu, 30 Jul 2009 15:00:54 -0700 (PDT) From: rnb To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: neil.bell@gmail.com X-Barracuda-Connect: kuber.nabble.com[216.139.236.158] X-Barracuda-Start-Time: 1248991794 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4836 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean dmesg [ 18.316753] scsi 8:0:0:0: Direct-Access WD 10EADS External 1.75 PQ: 0 ANSI: 4 [ 18.317732] sd 8:0:0:0: [sdg] 1953525168 512-byte hardware sectors: (1.00 TB/931 GiB) [ 18.318230] sd 8:0:0:0: [sdg] Write Protect is off [ 18.318233] sd 8:0:0:0: [sdg] Mode Sense: 23 00 00 00 [ 18.318236] sd 8:0:0:0: [sdg] Assuming drive cache: write through [ 18.318856] sd 8:0:0:0: [sdg] 1953525168 512-byte hardware sectors: (1.00 TB/931 GiB) [ 18.319354] sd 8:0:0:0: [sdg] Write Protect is off [ 18.319358] sd 8:0:0:0: [sdg] Mode Sense: 23 00 00 00 [ 18.319360] sd 8:0:0:0: [sdg] Assuming drive cache: write through [ 18.319364] sdg: sdg1 [ 18.333586] sd 8:0:0:0: [sdg] Attached SCSI disk [ 18.333638] sd 8:0:0:0: Attached scsi generic sg7 type 0 attaches and mounts fine [ 26.111917] XFS mounting filesystem sdg1 [ 26.432164] Ending clean XFS mount for filesystem: sdg1 [70273.864305] sd 8:0:0:0: [sdg] Sense Key : Medium Error [current] [70273.864314] Info fld=0x0 [70273.864318] sd 8:0:0:0: [sdg] Add. Sense: Unrecovered read error [70273.864327] end_request: I/O error, dev sdg, sector 378206415 [70276.938405] sd 8:0:0:0: [sdg] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK running a defrag that last few hours so there are tonnes of those. Like i said it has no issues mounting, xfs_repair fails to see the problem. Bad sectors I hope not the drives are a few months old and this is a storage server to it isn't like it is getting a tonne of writing done to it. Being external though I can't rule out hardware failure and smartctl doesn't run over USB. Yes it does error on cp or mv. but i'm assuming that those files are in the sectors that are erroring because the rest were copied cleanly off the drive. Even corrupted though I can still play the file without errors. In this case the drive is full of .avi rnb wrote: > > Running Ubuntu 9.04 kernel 2.26.28.14 generic > Drive mounts fine. > xfs_repair shows no errors > sudo xfs_repair /dev/sdg1 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > - found root inode chunk > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > - check for inodes claiming duplicate blocks... > - agno = 0 > - agno = 1 > - agno = 2 > - agno = 3 > Phase 5 - rebuild AG headers and trees... > - reset superblock... > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > - traversal finished ... > - moving disconnected inodes to lost+found ... > Phase 7 - verify and correct link counts... > done > > xfs_check did move a few things around but finished fine > > sudo xfs_fsr -v /dev/sdg1 <== This is just so far it is still running. > /media/Films start inode=0 > ino=140 > bad read of 0 bytes from ino=140: Input/output error > ino=139 > extents before:66 after:8 ino=139 > ino=145 > extents before:42 after:7 ino=145 > ino=146 > extents before:40 after:8 ino=146 > ino=143 > bad read of 0 bytes from ino=143: Input/output error > ino=144 > extents before:27 after:8 ino=144 > ino=8763008 > bad read of 0 bytes from ino=8763008: Input/output error > ino=8763059 > bad read of 0 bytes from ino=8763059: Input/output error > ino=8763057 > extents before:307 after:12 ino=8763057 > ino=8763058 > extents before:259 after:11 ino=8763058 > ino=8763024 > bad read of 0 bytes from ino=8763024: Input/output error > ino=8763055 > kk > extents before:125 after:10 ino=8763055 > ino=8763030 > bad read of 0 bytes from ino=8763030: Input/output error > ino=8763060 > bad read of 0 bytes from ino=8763060: Input/output error > ino=8763056 > extents before:62 after:13 ino=8763056 > ino=8763066 > > Now my issue is how do I fix it if xfs_repair doesn't see a problem. > Anything getting copied to the drive works fine in place wasn't until i > tried to move it off I noticed the issue. Some things copy fine from it > several others fail. Then i get Input/output error. It is a full 1tb drive > . WD mybook it lost power which I think is what caused this issue. How can > I correct the issue. Everything I try takes a hell of a long time and > doesn't yield a positive result so any suggestions to narrow this down > would help a lot.. I need to recover the drive as i don't want it > continuing to cause issues, new files copied to it just as a test IO error > trying to move them off at least the one I tried did. Being so large I'd > rather not buy a second drive dd it and format . Hoping xfs_fsr will mark > the bad sectors and move what it has to. Just large drives are so bloody > time consuming. > -- View this message in context: http://www.nabble.com/xfs-i-O-error-tp24742623p24747808.html Sent from the Xfs - General mailing list archive at Nabble.com. From michael.monnerie@is.it-management.at Thu Jul 30 18:48:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UNmAUS108762 for ; Thu, 30 Jul 2009 18:48:11 -0500 X-ASG-Debug-ID: 1248997733-72b103e20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6D984142E521 for ; Thu, 30 Jul 2009 16:48:54 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id NjXktjO9qMXOgMwq for ; Thu, 30 Jul 2009 16:48:54 -0700 (PDT) Received: from mailsrv.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 3B17E51B9 for ; Fri, 31 Jul 2009 01:49:08 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id BA40240DC06 for ; Fri, 31 Jul 2009 01:48:52 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error Date: Fri, 31 Jul 2009 01:48:43 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.3-ZMI; KDE/4.1.3; x86_64; ; ) References: <24747808.post@talk.nabble.com> In-Reply-To: <24747808.post@talk.nabble.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart4393049.xgnyC4n4Gt"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907310148.52085@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1248997736 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4841 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart4393049.xgnyC4n4Gt Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Donnerstag 30 Juli 2009 rnb wrote: > [70273.864305] sd 8:0:0:0: [sdg] Sense Key : Medium Error [current] > [70273.864314] Info fld=3D0x0 > [70273.864318] sd 8:0:0:0: [sdg] Add. Sense: Unrecovered read error > [70273.864327] end_request: I/O error, dev sdg, sector 378206415 Disk is bad, replace it. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart4393049.xgnyC4n4Gt Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpyMWQACgkQzhSR9xwSCbRnsACg6+sbfGKqWRgdNpKF9twlZpeM SosAnjILxXqXBRyK1hjpB/5Y7fMbKnAG =7Swh -----END PGP SIGNATURE----- --nextPart4393049.xgnyC4n4Gt-- From Ernest.Johnson@osumc.edu Thu Jul 30 18:52:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.1 required=5.0 tests=BAYES_50,HTML_MESSAGE, J_CHICKENPOX_37 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UNqUWh109003 for ; Thu, 30 Jul 2009 18:52:30 -0500 X-ASG-Debug-ID: 1248997996-3c8f01ee0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from TWAPP-VP01.OSUMC.EDU (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BBC09142E2C5 for ; Thu, 30 Jul 2009 16:53:16 -0700 (PDT) Received: from TWAPP-VP01.OSUMC.EDU (pluto.osumc.edu [140.254.120.27]) by cuda.sgi.com with ESMTP id JBe5LuvqCyV5Hixi for ; Thu, 30 Jul 2009 16:53:16 -0700 (PDT) Received: from [10.127.16.143] by TWAPP-VP01.OSUMC.EDU with ESMTP (OSUMC **** SMTP Relay ****); Thu, 30 Jul 2009 18:55:18 -0400 X-Server-Uuid: B9562FAF-5C56-437C-B754-33221F224476 Received: from localhost (unknown [127.0.0.1]) by pfeg01.osumc.edu ( Postfix) with ESMTP id 817594B6D9; Thu, 30 Jul 2009 22:55:17 +0000 ( UTC) Received: from pfeg01.osumc.edu ([127.0.0.1]) by localhost ( pfeg01.osumc.edu [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 14115-01-58; Thu, 30 Jul 2009 18:55:17 -0400 (EDT) Received: from msxc03.OSUMC.EDU (msxc03.osumc.edu [10.127.29.23]) by pfeg01.osumc.edu (Postfix) with ESMTP id 5E6404B5DF; Thu, 30 Jul 2009 18:55:16 -0400 (EDT) Received: from msxc02.OSUMC.EDU ([10.127.29.170]) by msxc03.OSUMC.EDU with Microsoft SMTPSVC(6.0.3790.1830); Thu, 30 Jul 2009 18:55:16 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 X-ASG-Orig-Subj: CONTACT DR PHILIP : philipwu1111@gmail.com Subject: CONTACT DR PHILIP : philipwu1111@gmail.com Date: Thu, 30 Jul 2009 18:54:42 -0400 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: CONTACT DR PHILIP : philipwu1111@gmail.com Thread-Index: AcoRaLlTxa2705B4SA2DmNdxKZ7Kxg== From: "Johnson, Ernest " X-OriginalArrivalTime: 30 Jul 2009 22:55:16.0117 (UTC) FILETIME=[CDD6FC50:01CA1168] To: undisclosed-recipients: ; X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by amavisd-new at osumc.edu X-WSS-ID: 666CFB5C4002213041-02-01 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01CA1168.B9856FD9" X-Barracuda-Connect: pluto.osumc.edu[140.254.120.27] X-Barracuda-Start-Time: 1248997997 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4283 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4843 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Status: Clean This is a multi-part message in MIME format. ------_=_NextPart_001_01CA1168.B9856FD9 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Director of Wing Lung Bank with confidential business of $12.5m = USD,contact Dr Philip, Email: philipwu1111@gmail.com ------_=_NextPart_001_01CA1168.B9856FD9 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable CONTACT DR PHILIP : philipwu1111@gmail.com

Director of Wing Lung Bank with confidential business = of $12.5m USD,contact Dr Philip, Email: philipwu1111@gmail.com

------_=_NextPart_001_01CA1168.B9856FD9-- From Ernest.Johnson@osumc.edu Thu Jul 30 18:52:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.1 required=5.0 tests=BAYES_50,HTML_MESSAGE, J_CHICKENPOX_37 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6UNqWZO109015 for ; Thu, 30 Jul 2009 18:52:33 -0500 X-ASG-Debug-ID: 1248998000-3c8c02050000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from TWAPP-VP01.OSUMC.EDU (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A6A62142E2D6 for ; Thu, 30 Jul 2009 16:53:20 -0700 (PDT) Received: from TWAPP-VP01.OSUMC.EDU (pluto.osumc.edu [140.254.120.27]) by cuda.sgi.com with ESMTP id NqRCJ775hAGdntMB for ; Thu, 30 Jul 2009 16:53:20 -0700 (PDT) Received: from [10.127.16.143] by TWAPP-VP01.OSUMC.EDU with ESMTP (OSUMC **** SMTP Relay ****); Thu, 30 Jul 2009 18:55:18 -0400 X-Server-Uuid: B9562FAF-5C56-437C-B754-33221F224476 Received: from localhost (unknown [127.0.0.1]) by pfeg01.osumc.edu ( Postfix) with ESMTP id 418A04B6DA; Thu, 30 Jul 2009 22:55:18 +0000 ( UTC) Received: from pfeg01.osumc.edu ([127.0.0.1]) by localhost ( pfeg01.osumc.edu [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 14047-01-57; Thu, 30 Jul 2009 18:55:17 -0400 (EDT) Received: from msxc03.OSUMC.EDU (msxc03.osumc.edu [10.127.29.23]) by pfeg01.osumc.edu (Postfix) with ESMTP id 66B034B5FC; Thu, 30 Jul 2009 18:55:16 -0400 (EDT) Received: from msxc02.OSUMC.EDU ([10.127.29.170]) by msxc03.OSUMC.EDU with Microsoft SMTPSVC(6.0.3790.1830); Thu, 30 Jul 2009 18:55:16 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 X-ASG-Orig-Subj: CONTACT DR PHILIP : philipwu1111@gmail.com Subject: CONTACT DR PHILIP : philipwu1111@gmail.com Date: Thu, 30 Jul 2009 18:54:46 -0400 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: CONTACT DR PHILIP : philipwu1111@gmail.com Thread-Index: AcoRaLxQaCI0T4oiTTWjZ3YMjUW5Nw== From: "Johnson, Ernest " X-OriginalArrivalTime: 30 Jul 2009 22:55:16.0164 (UTC) FILETIME=[CDDE2840:01CA1168] To: undisclosed-recipients: ; X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: by amavisd-new at osumc.edu X-WSS-ID: 666CFB5C4002213049-01-01 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01CA1168.BC6D53A1" X-Barracuda-Connect: pluto.osumc.edu[140.254.120.27] X-Barracuda-Start-Time: 1248998000 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0025 1.0000 -2.0050 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.00 X-Barracuda-Spam-Status: No, SCORE=-2.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4843 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Status: Clean This is a multi-part message in MIME format. ------_=_NextPart_001_01CA1168.BC6D53A1 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Director of Wing Lung Bank with confidential business of $12.5m = USD,contact Dr Philip, Email: philipwu1111@gmail.com ------_=_NextPart_001_01CA1168.BC6D53A1 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable CONTACT DR PHILIP : philipwu1111@gmail.com

Director of Wing Lung Bank with confidential business = of $12.5m USD,contact Dr Philip, Email: philipwu1111@gmail.com

------_=_NextPart_001_01CA1168.BC6D53A1-- From sandeen@sandeen.net Thu Jul 30 22:37:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6V3b8i7122352 for ; Thu, 30 Jul 2009 22:37:09 -0500 X-ASG-Debug-ID: 1249012014-2e4400490000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 42EE5AD4724 for ; Thu, 30 Jul 2009 20:46:54 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Ob393GrPvzdSCDjr for ; Thu, 30 Jul 2009 20:46:54 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 9DEA8AAE38C; Thu, 30 Jul 2009 22:37:53 -0500 (CDT) Message-ID: <4A726711.5050402@sandeen.net> Date: Thu, 30 Jul 2009 22:37:53 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs@oss.sgi.com, rnb X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error References: <24747808.post@talk.nabble.com> <200907310148.52085@zmi.at> In-Reply-To: <200907310148.52085@zmi.at> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1249012015 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4857 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Michael Monnerie wrote: > On Donnerstag 30 Juli 2009 rnb wrote: >> [70273.864305] sd 8:0:0:0: [sdg] Sense Key : Medium Error [current] >> [70273.864314] Info fld=0x0 >> [70273.864318] sd 8:0:0:0: [sdg] Add. Sense: Unrecovered read error >> [70273.864327] end_request: I/O error, dev sdg, sector 378206415 > > Disk is bad, replace it. > > mfg zmi More or less, yep. Read errors can be somewhat recoverable, if you write to that sector it will remap if it can. But anyway yeah, it's not an xfs I/O error, it's a disk IO error, and xfs is bringing you the bad news. repair may not have seen it because repair only looks at metadata, bad sectors may be data in blocks, found when you try to copy data around. -eric From felixb@oss.sgi.com Fri Jul 31 00:03:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6V53BUG129970 for ; Fri, 31 Jul 2009 00:03:11 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n6V53AKU129932; Fri, 31 Jul 2009 00:03:10 -0500 Date: Fri, 31 Jul 2009 00:03:10 -0500 Message-Id: <200907310503.n6V53AKU129932@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1247-ga81655a X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: b56063453881a6d94cf5718c6769de6e35e67753 X-Git-Newrev: a81655ae5a9da16a08ba14637dc6c10217e57492 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated a81655a xfs: bump up nr_to_write in xfs_vm_writepage ede5851 fs/xfs: Correct redundant test 5c04c78 xfs: reduce bmv_count in xfs_vn_fiemap from b56063453881a6d94cf5718c6769de6e35e67753 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a81655ae5a9da16a08ba14637dc6c10217e57492 Author: Eric Sandeen Date: Fri Jul 31 00:02:17 2009 -0500 xfs: bump up nr_to_write in xfs_vm_writepage VM calculation for nr_to_write seems off. Bump it way up, this gets simple streaming writes zippy again. To be reviewed again after Jens' writeback changes. Signed-off-by: Christoph Hellwig Signed-off-by: Eric Sandeen Cc: Chris Mason Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher commit ede58517ca93277547a0d054728c352618212d85 Author: Julia Lawall Date: Mon Jul 27 18:15:25 2009 +0200 fs/xfs: Correct redundant test bp was tested for NULL a few lines before, followed by a return, and there is no intervening modification of its value. A simplified version of the semantic match that finds this problem is as follows: (http://www.emn.fr/x-info/coccinelle/) // @r exists@ local idexpression x; expression E; position p1,p2; @@ if (x == NULL || ...) { ... when forall return ...; } ... when != \(x=E\|x--\|x++\|--x\|++x\|x-=E\|x+=E\|x|=E\|x&=E\|&x\) ( *x == NULL | *x != NULL ) // Signed-off-by: Julia Lawall Acked-by: Felix Blyakher Signed-off-by: Felix Blyakher commit 5c04c78afba4805846519f29f0b55ac8759e0d48 Author: Eric Sandeen Date: Sun Jul 26 21:52:01 2009 -0500 xfs: reduce bmv_count in xfs_vn_fiemap commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused the full bmv_count's worth of getbmapx structures to get allocated; telling it to do MAXEXTNUM was a bit insane, resulting in ENOMEM every time. Chop it down to something reasonable, the number of slots in the caller's input buffer. If this is too large the caller may get ENOMEM but the reason should not be a mystery, and they can try again with something smaller. We add 1 to the value because in the normal getbmap world, bmv_count includes the header and xfs_getbmap does: nex = bmv->bmv_count - 1; if (nex <= 0) return XFS_ERROR(EINVAL); Signed-off-by: Eric Sandeen Reviewed-by: Olaf Weber Reviewed-by: Christoph Hellwig Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_aops.c | 8 ++++++++ fs/xfs/linux-2.6/xfs_iops.c | 4 ++-- fs/xfs/xfs_trans_buf.c | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) hooks/post-receive -- XFS development tree From felixb@oss.sgi.com Fri Jul 31 00:56:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6V5uuM5133775 for ; Fri, 31 Jul 2009 00:56:57 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n6V5utq9133742; Fri, 31 Jul 2009 00:56:55 -0500 Date: Fri, 31 Jul 2009 00:56:55 -0500 Message-Id: <200907310556.n6V5utq9133742@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v2.6.30-rc4-4461-gc8a4051 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: fd40261354802b0f05f6f67121235aa002e87069 X-Git-Newrev: c8a4051c3731b6db224482218cfd535ab9393ff8 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated c8a4051 xfs: bump up nr_to_write in xfs_vm_writepage 97db39a xfs: reduce bmv_count in xfs_vn_fiemap from fd40261354802b0f05f6f67121235aa002e87069 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c8a4051c3731b6db224482218cfd535ab9393ff8 Author: Eric Sandeen Date: Fri Jul 31 00:02:17 2009 -0500 xfs: bump up nr_to_write in xfs_vm_writepage VM calculation for nr_to_write seems off. Bump it way up, this gets simple streaming writes zippy again. To be reviewed again after Jens' writeback changes. Signed-off-by: Christoph Hellwig Signed-off-by: Eric Sandeen Cc: Chris Mason Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher commit 97db39a1f6f69e906e98118392400de5217aa33a Author: Eric Sandeen Date: Sun Jul 26 21:52:01 2009 -0500 xfs: reduce bmv_count in xfs_vn_fiemap commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba caused the full bmv_count's worth of getbmapx structures to get allocated; telling it to do MAXEXTNUM was a bit insane, resulting in ENOMEM every time. Chop it down to something reasonable, the number of slots in the caller's input buffer. If this is too large the caller may get ENOMEM but the reason should not be a mystery, and they can try again with something smaller. We add 1 to the value because in the normal getbmap world, bmv_count includes the header and xfs_getbmap does: nex = bmv->bmv_count - 1; if (nex <= 0) return XFS_ERROR(EINVAL); Signed-off-by: Eric Sandeen Reviewed-by: Olaf Weber Reviewed-by: Christoph Hellwig Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_aops.c | 8 ++++++++ fs/xfs/linux-2.6/xfs_iops.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Fri Jul 31 00:59:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6V5xUjb133952 for ; Fri, 31 Jul 2009 00:59:31 -0500 Received: from attica.americas.sgi.com (attica.americas.sgi.com [128.162.236.44]) by relay3.corp.sgi.com (Postfix) with ESMTP id DF1A4AC01B; Thu, 30 Jul 2009 23:00:15 -0700 (PDT) Received: by attica.americas.sgi.com (Postfix, from userid 29043) id 45A8FA23CA6C; Fri, 31 Jul 2009 01:00:15 -0500 (CDT) Date: Fri, 31 Jul 2009 01:00:15 -0500 To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: [GIT PULL] XFS update for 2.6.31-rc5 User-Agent: Heirloom mailx 12.2 01/07/07 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20090731060015.45A8FA23CA6C@attica.americas.sgi.com> From: felixb@sgi.com (Felix Blyakher) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The following changes since commit b592972493c38665efd7d429a01b23fcb21e331a: Linus Torvalds (1): Merge branch 'tracing-fixes-for-linus' of git://git.kernel.org/.../tip/linux-2.6-tip are available in the git repository at: git://oss.sgi.com/xfs/xfs for-linus Eric Sandeen (2): xfs: reduce bmv_count in xfs_vn_fiemap xfs: bump up nr_to_write in xfs_vm_writepage fs/xfs/linux-2.6/xfs_aops.c | 8 ++++++++ fs/xfs/linux-2.6/xfs_iops.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) From michael.monnerie@is.it-management.at Fri Jul 31 04:07:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6V97hWx142309 for ; Fri, 31 Jul 2009 04:07:45 -0500 X-ASG-Debug-ID: 1249031308-065c01460000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BF18A257F0B for ; Fri, 31 Jul 2009 02:08:28 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id qDNNp6UVE9QIQva3 for ; Fri, 31 Jul 2009 02:08:28 -0700 (PDT) Received: from mailsrv.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id C200854B1; Fri, 31 Jul 2009 11:08:41 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv.i.zmi.at (Postfix) with ESMTPSA id DF6A040016D; Fri, 31 Jul 2009 11:08:26 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error Date: Fri, 31 Jul 2009 11:08:22 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30.3-ZMI; KDE/4.1.3; x86_64; ; ) Cc: Eric Sandeen , rnb References: <24747808.post@talk.nabble.com> <200907310148.52085@zmi.at> <4A726711.5050402@sandeen.net> In-Reply-To: <4A726711.5050402@sandeen.net> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart5457195.0b0NmLEpmg"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907311108.26491@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1249031309 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4876 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart5457195.0b0NmLEpmg Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Freitag 31 Juli 2009 Eric Sandeen wrote: > Read errors can be somewhat recoverable, if you write to that sector > it will remap if it can. Yes, but I've never seen a disk who did not get other broken sectors=20 later. When a disk starts to get bad sectors, others will come, just=20 like a virus. Therefore: you get a bad sector -> replace disk. That's by=20 far less pain and cheaper than the other scenario. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart5457195.0b0NmLEpmg Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpytIoACgkQzhSR9xwSCbQVvQCeJJbsSsFcsiP9dyrjlqvL5AIJ 58kAoIHIYJwP14t4HeCL73kq4GZFCnKT =0eBu -----END PGP SIGNATURE----- --nextPart5457195.0b0NmLEpmg-- From johannes@sipsolutions.net Fri Jul 31 06:25:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VBPYwt147354 for ; Fri, 31 Jul 2009 06:25:36 -0500 X-ASG-Debug-ID: 1249039579-0663035d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sipsolutions.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A46BE3998F5; Fri, 31 Jul 2009 04:26:19 -0700 (PDT) Received: from sipsolutions.net (xc.sipsolutions.net [83.246.72.84]) by cuda.sgi.com with ESMTP id 3ekoz3AALmmN3KJQ; Fri, 31 Jul 2009 04:26:19 -0700 (PDT) Received: by sipsolutions.net with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1MWqFd-0005J5-Rb; Fri, 31 Jul 2009 13:26:17 +0200 X-ASG-Orig-Subj: XFS inconsistent lock state (-rc4) Subject: XFS inconsistent lock state (-rc4) From: Johannes Berg To: Felix Blyakher Cc: xfs-masters , xfs@oss.sgi.com, Christoph Hellwig Content-Type: text/plain Date: Fri, 31 Jul 2009 13:25:46 +0200 Message-Id: <1249039546.29587.72.camel@johannes.local> Mime-Version: 1.0 X-Mailer: Evolution 2.27.4 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: xc.sipsolutions.net[83.246.72.84] X-Barracuda-Start-Time: 1249039581 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4886 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean After pushing a lot of data onto the disk, including creating millions of hardlinks (rsync backup run with --link-dest): [ 3483.668282] [ 3483.668287] ================================= [ 3483.668363] [ INFO: inconsistent lock state ] [ 3483.668393] 2.6.31-rc4-wl-29204-g6b3a8c9-dirty #115 [ 3483.668418] --------------------------------- [ 3483.668444] inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-R} usage. [ 3483.668472] kswapd0/186 [HC0[0]:SC0[0]:HE1:SE1] takes: [ 3483.668499] (&(&ip->i_lock)->mr_lock){+++++?}, at: [] .xfs_ilock+0x90/0xb0 [ 3483.668601] {RECLAIM_FS-ON-W} state was registered at: [ 3483.668627] [] .mark_held_locks+0x7c/0xcc [ 3483.668682] [] .lockdep_trace_alloc+0xd8/0x110 [ 3483.668733] [] .kmem_cache_alloc+0x64/0x244 [ 3483.668786] [] .kmem_zone_alloc+0x94/0x114 [ 3483.668835] [] .kmem_zone_zalloc+0x38/0x80 [ 3483.668884] [] .xfs_da_state_alloc+0x34/0x50 [ 3483.668936] [] .xfs_dir2_node_lookup+0x38/0x158 [ 3483.668985] [] .xfs_dir_lookup+0x17c/0x1e4 [ 3483.669038] [] .xfs_lookup+0x80/0x118 [ 3483.669093] [] .xfs_vn_lookup+0x5c/0xcc [ 3483.669145] [] .real_lookup+0xc8/0x1b4 [ 3483.669198] [] .do_lookup+0x98/0x140 [ 3483.669248] [] .__link_path_walk+0xd08/0x1380 [ 3483.669298] [] .path_walk+0xa4/0x158 [ 3483.669348] [] .do_path_lookup+0x64/0x114 [ 3483.669397] [] .do_filp_open+0x12c/0xad4 [ 3483.669447] [] .do_sys_open+0x98/0x190 [ 3483.669497] [] .SyS_open+0x4c/0x6c [ 3483.669548] [] .init_post+0x60/0x1a0 [ 3483.669600] [] .kernel_init+0xe8/0x10c [ 3483.669657] [] .kernel_thread+0x54/0x70 [ 3483.669712] irq event stamp: 394815 [ 3483.669738] hardirqs last enabled at (394815): [] .free_hot_cold_page+0x244/0x360 [ 3483.669795] hardirqs last disabled at (394814): [] .free_hot_cold_page+0x314/0x360 [ 3483.669851] softirqs last enabled at (394510): [] .__do_softirq+0x304/0x34c [ 3483.669907] softirqs last disabled at (394503): [] .call_do_softirq+0x14/0x24 [ 3483.669960] [ 3483.669962] other info that might help us debug this: [ 3483.670009] 2 locks held by kswapd0/186: [ 3483.670034] #0: (shrinker_rwsem){++++..}, at: [] .shrink_slab+0x74/0x290 [ 3483.670162] #1: (iprune_mutex){+.+.-.}, at: [] .prune_icache+0x70/0x2d8 [ 3483.670284] [ 3483.670285] stack backtrace: [ 3483.670378] Call Trace: [ 3483.670407] [c00000021652ef80] [c000000000011170] .show_stack+0xb4/0x1e8 (unreliable) [ 3483.670485] [c00000021652f050] [c0000000004f26d8] .dump_stack+0x28/0x3c [ 3483.670535] [c00000021652f0d0] [c0000000000a4d08] .print_usage_bug+0x1e0/0x21c [ 3483.670586] [c00000021652f1a0] [c0000000000a4e44] .mark_lock_irq+0x100/0x330 [ 3483.670637] [c00000021652f260] [c0000000000a5354] .mark_lock+0x2e0/0x484 [ 3483.670687] [c00000021652f300] [c0000000000a5674] .mark_irqflags+0x17c/0x1b8 [ 3483.670739] [c00000021652f390] [c0000000000a8508] .__lock_acquire+0x6f4/0x91c [ 3483.670788] [c00000021652f490] [c0000000000a887c] .lock_acquire+0x14c/0x19c [ 3483.670844] [c00000021652f560] [c000000000091e1c] .down_read_nested+0x74/0x130 [ 3483.670895] [c00000021652f600] [c00000000026c260] .xfs_ilock+0x90/0xb0 [ 3483.670947] [c00000021652f690] [c00000000028e3e0] .xfs_free_eofblocks+0x80/0x294 [ 3483.671000] [c00000021652f790] [c00000000028ebe4] .xfs_inactive+0x13c/0x4c4 [ 3483.671051] [c00000021652f850] [c00000000029ddd4] .xfs_fs_clear_inode+0x9c/0xbc [ 3483.671148] [c00000021652f8e0] [c000000000171a58] .clear_inode+0xd4/0x150 [ 3483.671198] [c00000021652f970] [c000000000171d88] .dispose_list+0x94/0x190 [ 3483.671250] [c00000021652fa20] [c00000000017211c] .prune_icache+0x298/0x2d8 [ 3483.671300] [c00000021652faf0] [c0000000001721ac] .shrink_icache_memory+0x50/0x90 [ 3483.671352] [c00000021652fb80] [c00000000011e428] .shrink_slab+0x178/0x290 [ 3483.671403] [c00000021652fc50] [c00000000011e958] .balance_pgdat+0x418/0x634 [ 3483.671452] [c00000021652fdb0] [c00000000011ece0] .kswapd+0x16c/0x170 [ 3483.671504] [c00000021652fe90] [c00000000008b7bc] .kthread+0xac/0xb8 From BATV+0d1a917fb2d1962f456c+2168+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 31 06:36:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VBa4PG147824 for ; Fri, 31 Jul 2009 06:36:06 -0500 X-ASG-Debug-ID: 1249040212-3af200230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 017DA1B0F2F4; Fri, 31 Jul 2009 04:36:52 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id LSGtzsNHC2vprDin; Fri, 31 Jul 2009 04:36:52 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWqPs-0008K1-3z; Fri, 31 Jul 2009 11:36:52 +0000 Date: Fri, 31 Jul 2009 07:36:52 -0400 From: Christoph Hellwig To: Johannes Berg Cc: Felix Blyakher , xfs-masters , xfs@oss.sgi.com, Christoph Hellwig X-ASG-Orig-Subj: Re: XFS inconsistent lock state (-rc4) Subject: Re: XFS inconsistent lock state (-rc4) Message-ID: <20090731113652.GA31758@infradead.org> References: <1249039546.29587.72.camel@johannes.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1249039546.29587.72.camel@johannes.local> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1249040213 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Jul 31, 2009 at 01:25:46PM +0200, Johannes Berg wrote: > After pushing a lot of data onto the disk, including creating millions > of hardlinks (rsync backup run with --link-dest): I've posted a fix for this to the list a while ago, still hoping that Felix will push it for 2.6.31. From eflorac@intellique.com Fri Jul 31 15:36:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VKaHcu170251 for ; Fri, 31 Jul 2009 15:36:17 -0500 X-ASG-Debug-ID: 1249073162-018603000000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp5-g21.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 366B512A6D27 for ; Fri, 31 Jul 2009 13:46:04 -0700 (PDT) Received: from smtp5-g21.free.fr (smtp5-g21.free.fr [212.27.42.5]) by cuda.sgi.com with ESMTP id dBGqe4oDCWKXYyv4 for ; Fri, 31 Jul 2009 13:46:04 -0700 (PDT) Received: from smtp5-g21.free.fr (localhost [127.0.0.1]) by smtp5-g21.free.fr (Postfix) with ESMTP id B5EDAD480C4; Fri, 31 Jul 2009 22:36:57 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp5-g21.free.fr (Postfix) with ESMTP id 8AA96D48118; Fri, 31 Jul 2009 22:36:54 +0200 (CEST) Date: Fri, 31 Jul 2009 22:36:49 +0200 From: Emmanuel Florac To: rnb Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs i/O error Subject: Re: xfs i/O error Message-ID: <20090731223649.4799e6ec@galadriel.home> In-Reply-To: <24747808.post@talk.nabble.com> References: <24742623.post@talk.nabble.com> <24747808.post@talk.nabble.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: smtp5-g21.free.fr[212.27.42.5] X-Barracuda-Start-Time: 1249073168 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4921 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Le Thu, 30 Jul 2009 14:45:12 -0700 (PDT) vous =E9criviez: > said it has no issues mounting, xfs_repair fails to see the problem. > Bad sectors I hope not=20 Hope lost. All these messages are absolutely clear, your drive is almost certainly dying. --=20 -------------------------------------------------- Emmanuel Florac www.intellique.com =20 -------------------------------------------------- From BATV+0d1a917fb2d1962f456c+2168+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 31 15:42:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VKgqTB170541 for ; Fri, 31 Jul 2009 15:42:54 -0500 X-ASG-Debug-ID: 1249073020-320400110000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 55711143CA87 for ; Fri, 31 Jul 2009 13:43:40 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id APwFBVIMhU63TPOa for ; Fri, 31 Jul 2009 13:43:40 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWyx1-0008Df-Sc; Fri, 31 Jul 2009 20:43:39 +0000 Date: Fri, 31 Jul 2009 16:43:39 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_db: do bounds checking in frag's scanfunc_bmap Subject: Re: [PATCH] xfs_db: do bounds checking in frag's scanfunc_bmap Message-ID: <20090731204339.GA31179@infradead.org> References: <4A708247.7040509@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A708247.7040509@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1249073021 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > @@ -437,15 +437,29 @@ scanfunc_bmap( > int i; > xfs_bmbt_ptr_t *pp; > xfs_bmbt_rec_t *rp; > + int nrecs; > + > + nrecs = be16_to_cpu(block->bb_numrecs); > > if (level == 0) { > + if (nrecs > mp->m_bmap_dmxr[0]) { > + dbprintf(_("invalid numrecs (%u) in %s block\n"), > + nrecs, typtab[btype].name); > + return; > + } > rp = XFS_BMBT_REC_ADDR(mp, block, 1); > process_bmbt_reclist((xfs_bmbt_rec_32_t *)rp, > - be16_to_cpu(block->bb_numrecs), extmapp); > + nrecs, extmapp); > + return; > + } > + > + if (nrecs > mp->m_bmap_dmxr[1]) { > + dbprintf(_("invalid numrecs (%u) in %s block\n"), > + nrecs, typtab[btype].name); > return; > } > pp = XFS_BMBT_PTR_ADDR(mp, block, 1, mp->m_bmap_dmxr[0]); > - for (i = 0; i < be16_to_cpu(block->bb_numrecs); i++) > + for (i = 0; i < nrecs; i++) > scan_lbtree(be64_to_cpu(pp[i]), level, scanfunc_bmap, extmapp, > btype); > } Looks good to me. Reviewed-by: Christoph Hellwig From BATV+0d1a917fb2d1962f456c+2168+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 31 16:03:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VL3xel171456 for ; Fri, 31 Jul 2009 16:03:59 -0500 X-ASG-Debug-ID: 1249074287-4b48008d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C4688143CEFB for ; Fri, 31 Jul 2009 14:04:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id v8trDEkUO4qy65Cf for ; Fri, 31 Jul 2009 14:04:47 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWzHT-0003Wt-DF for xfs@oss.sgi.com; Fri, 31 Jul 2009 21:04:47 +0000 Message-Id: <20090731210340.638586000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Fri, 31 Jul 2009 17:03:40 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 0/3] more memory allocator recursion fixes Subject: [PATCH 0/3] more memory allocator recursion fixes X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1249074287 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Now deal with the iolock, by not actually taking it anymore from reclaim context. As an added benefit the last patch also fixes the mmap_sem lock order reversal. From BATV+0d1a917fb2d1962f456c+2168+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 31 16:04:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VL40rh171469 for ; Fri, 31 Jul 2009 16:04:00 -0500 X-ASG-Debug-ID: 1249074288-74fa00d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B420B39B441 for ; Fri, 31 Jul 2009 14:04:48 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id kKuHXFChAgwkfwBe for ; Fri, 31 Jul 2009 14:04:48 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWzHT-0003XT-RG for xfs@oss.sgi.com; Fri, 31 Jul 2009 21:04:47 +0000 Message-Id: <20090731210447.584668000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Fri, 31 Jul 2009 17:03:41 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/3] xfs: do not take the iolock in xfs_ireclaim Subject: [PATCH 1/3] xfs: do not take the iolock in xfs_ireclaim References: <20090731210340.638586000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-ireclaim X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1249074288 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean While the comment claims we need it to synchronize with inode cache lookups that is not the case. Today we make sure to always do an igrab in all sync variants which do the proper checks for a deleted inode, and we also have the proper checks in xfs_iget. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_iget.c 2009-07-31 00:33:58.443352015 +0200 +++ linux-2.6/fs/xfs/xfs_iget.c 2009-07-31 00:34:02.742339834 +0200 @@ -507,13 +507,11 @@ xfs_ireclaim( * can reference the inodes in the cache without taking references. * * We make that OK here by ensuring that we wait until the inode is - * unlocked after the lookup before we go ahead and free it. We get - * both the ilock and the iolock because the code may need to drop the - * ilock one but will still hold the iolock. + * unlocked after the lookup before we go ahead and free it. */ - xfs_ilock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_ilock(ip, XFS_ILOCK_EXCL); xfs_qm_dqdetach(ip); - xfs_iunlock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_iunlock(ip, XFS_ILOCK_EXCL); switch (ip->i_d.di_mode & S_IFMT) { case S_IFREG: From BATV+0d1a917fb2d1962f456c+2168+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 31 16:04:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.1 required=5.0 tests=AWL,BAYES_00,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VL40DS171471 for ; Fri, 31 Jul 2009 16:04:00 -0500 X-ASG-Debug-ID: 1249074288-7882008f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F0A2239B445 for ; Fri, 31 Jul 2009 14:04:48 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id GZWoh9Oh4aTS743c for ; Fri, 31 Jul 2009 14:04:48 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWzHU-0003Xz-8Y for xfs@oss.sgi.com; Fri, 31 Jul 2009 21:04:48 +0000 Message-Id: <20090731210448.040369000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Fri, 31 Jul 2009 17:03:42 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/3] xfs: do not take the iolock in xfs_inactive Subject: [PATCH 2/3] xfs: do not take the iolock in xfs_inactive References: <20090731210340.638586000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-lockdep-inactive X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1249074288 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean When xfs_inactive is called we already have the inode torn down and no one else can have a reference to it. That means the iolock here is superflous as all other users require a proper reference to it: - xfs_vm_vmap, xfs_vn_fallocate, xfs_read, xfs_write, xfs_splice_read, xfs_splice_write and xfs_setattr are all implementations of VFS methods that require such a life inode - xfs_getbmap and xfs_swap_extents are ioctl sub command for which the same is true - xfs_truncate_file is only called on quota inodes just return from xfs_iget - xfs_sync_inode_data does the lock just after an igrab() - xfs_filestream_associate and xfs_filestream_new_ag take the iolock on the parent inode of an inode which by VFS rules must be referenced Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c 2009-07-31 15:52:40.039355590 +0200 +++ linux-2.6/fs/xfs/xfs_vnodeops.c 2009-07-31 16:08:57.005082581 +0200 @@ -869,10 +869,10 @@ xfs_inactive_symlink_rmt( * the second transaction. In the error paths we need it * held so the cancel won't rele it, see below. */ - xfs_ilock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_ilock(ip, XFS_ILOCK_EXCL); size = (int)ip->i_d.di_size; ip->i_d.di_size = 0; - xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); /* @@ -917,7 +917,7 @@ xfs_inactive_symlink_rmt( * Mark it dirty so it will be logged and moved forward in the log as * part of every commit. */ - xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); /* @@ -977,7 +977,7 @@ xfs_inactive_symlink_rmt( * joined to the transaction. */ xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT); - xfs_iunlock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_iunlock(ip, XFS_ILOCK_EXCL); *tpp = NULL; return error; @@ -1006,7 +1006,7 @@ xfs_inactive_symlink_local( *tpp = NULL; return error; } - xfs_ilock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); + xfs_ilock(ip, XFS_ILOCK_EXCL); /* * Zero length symlinks _can_ exist. @@ -1029,7 +1029,6 @@ xfs_inactive_attrs( int error; xfs_mount_t *mp; - ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); tp = *tpp; mp = ip->i_mount; ASSERT(ip->i_d.di_forkoff != 0); @@ -1051,7 +1050,7 @@ xfs_inactive_attrs( goto error_cancel; xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); xfs_idestroy_fork(ip, XFS_ATTR_FORK); @@ -1065,7 +1064,6 @@ error_cancel: xfs_trans_cancel(tp, 0); error_unlock: *tpp = NULL; - xfs_iunlock(ip, XFS_IOLOCK_EXCL); return error; } @@ -1210,12 +1208,10 @@ xfs_inactive( * will call into the buffer cache and we can't * do that within a transaction. */ - xfs_ilock(ip, XFS_IOLOCK_EXCL); error = xfs_itruncate_start(ip, XFS_ITRUNC_DEFINITE, 0); if (error) { xfs_trans_cancel(tp, 0); - xfs_iunlock(ip, XFS_IOLOCK_EXCL); return VN_INACTIVE_CACHE; } @@ -1227,12 +1223,11 @@ xfs_inactive( /* Don't call itruncate_cleanup */ ASSERT(XFS_FORCED_SHUTDOWN(mp)); xfs_trans_cancel(tp, 0); - xfs_iunlock(ip, XFS_IOLOCK_EXCL); return VN_INACTIVE_CACHE; } xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); /* @@ -1248,7 +1243,7 @@ xfs_inactive( if (error) { xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT); - xfs_iunlock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_iunlock(ip, XFS_ILOCK_EXCL); return VN_INACTIVE_CACHE; } } else if ((ip->i_d.di_mode & S_IFMT) == S_IFLNK) { @@ -1266,7 +1261,7 @@ xfs_inactive( return VN_INACTIVE_CACHE; } - xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); } else { error = xfs_trans_reserve(tp, 0, @@ -1279,8 +1274,8 @@ xfs_inactive( return VN_INACTIVE_CACHE; } - xfs_ilock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); - xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); } @@ -1346,7 +1341,7 @@ xfs_inactive( * Release the dquots held by inode, if any. */ xfs_qm_dqdetach(ip); - xfs_iunlock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_iunlock(ip, XFS_ILOCK_EXCL); out: return VN_INACTIVE_CACHE; From BATV+0d1a917fb2d1962f456c+2168+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 31 16:04:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VL40Qu171479 for ; Fri, 31 Jul 2009 16:04:01 -0500 X-ASG-Debug-ID: 1249074831-6b1e00800000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3C7F212A94F3 for ; Fri, 31 Jul 2009 14:13:51 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id NidCUiTWDa4vZ3AF for ; Fri, 31 Jul 2009 14:13:51 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MWzHU-0003YV-JH for xfs@oss.sgi.com; Fri, 31 Jul 2009 21:04:48 +0000 Message-Id: <20090731210448.410776000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Fri, 31 Jul 2009 17:03:43 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 3/3] xfs: do not wait for the iolock in xfs_free_eofblocks Subject: [PATCH 3/3] xfs: do not wait for the iolock in xfs_free_eofblocks References: <20090731210340.638586000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-free_eofblocks-lock X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1249074832 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean For both callers of xfs_free_eofblocks taking the iolock in blocking fashion causes problems: - in xfs_release is causes a lock order reversal with the mmap lock - due to xfs_inactive beeing called from reclaim context it would forbid memory allocation under the iolock. Just making the lock acquisition non-blocking solves both issues. In xfs_release that will leave preallocation on the file, but we'll get rid of them later, and in xfs_incative the iolock can never be held by anyone (see rationale in the previous patch). Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/xfs_rw.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_rw.h 2009-07-31 18:41:28.413339736 +0200 +++ linux-2.6/fs/xfs/xfs_rw.h 2009-07-31 18:45:38.737339768 +0200 @@ -37,13 +37,6 @@ xfs_fsb_to_db(struct xfs_inode *ip, xfs_ } /* - * Flags for xfs_free_eofblocks - */ -#define XFS_FREE_EOF_LOCK (1<<0) -#define XFS_FREE_EOF_NOLOCK (1<<1) - - -/* * helper function to extract extent size hint from inode */ STATIC_INLINE xfs_extlen_t @@ -78,10 +71,4 @@ extern int xfs_read_buf(struct xfs_mount extern void xfs_ioerror_alert(char *func, struct xfs_mount *mp, xfs_buf_t *bp, xfs_daddr_t blkno); -/* - * Prototypes for functions in xfs_vnodeops.c. - */ -extern int xfs_free_eofblocks(struct xfs_mount *mp, struct xfs_inode *ip, - int flags); - #endif /* __XFS_RW_H__ */ Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c 2009-07-31 18:45:37.483080484 +0200 +++ linux-2.6/fs/xfs/xfs_vnodeops.c 2009-07-31 19:21:33.305080480 +0200 @@ -718,12 +718,11 @@ xfs_fsync( * when the link count isn't zero and by xfs_dm_punch_hole() when * punching a hole to EOF. */ -int +STATIC int xfs_free_eofblocks( - xfs_mount_t *mp, - xfs_inode_t *ip, - int flags) + xfs_inode_t *ip) { + xfs_mount_t *mp = ip->i_mount; xfs_trans_t *tp; int error; xfs_fileoff_t end_fsb; @@ -731,7 +730,6 @@ xfs_free_eofblocks( xfs_filblks_t map_len; int nimaps; xfs_bmbt_irec_t imap; - int use_iolock = (flags & XFS_FREE_EOF_LOCK); /* * Figure out if there are any blocks beyond the end @@ -749,77 +747,78 @@ xfs_free_eofblocks( NULL, 0, &imap, &nimaps, NULL, NULL); xfs_iunlock(ip, XFS_ILOCK_SHARED); - if (!error && (nimaps != 0) && - (imap.br_startblock != HOLESTARTBLOCK || - ip->i_delayed_blks)) { - /* - * Attach the dquots to the inode up front. - */ - error = xfs_qm_dqattach(ip, 0); - if (error) - return error; + if (error || nimaps == 0 || + (imap.br_startblock == HOLESTARTBLOCK && !ip->i_delayed_blks)) + return error; - /* - * There are blocks after the end of file. - * Free them up now by truncating the file to - * its current size. - */ - tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE); + /* + * Attach the dquots to the inode up front. + */ + error = xfs_qm_dqattach(ip, 0); + if (error) + return error; - /* - * Do the xfs_itruncate_start() call before - * reserving any log space because - * itruncate_start will call into the buffer - * cache and we can't - * do that within a transaction. - */ - if (use_iolock) - xfs_ilock(ip, XFS_IOLOCK_EXCL); - error = xfs_itruncate_start(ip, XFS_ITRUNC_DEFINITE, - ip->i_size); - if (error) { - xfs_trans_cancel(tp, 0); - if (use_iolock) - xfs_iunlock(ip, XFS_IOLOCK_EXCL); - return error; - } + /* + * There are blocks after the end of file. + * + * Free them up now by truncating the file to its current size. + */ + tp = xfs_trans_alloc(mp, XFS_TRANS_INACTIVE); - error = xfs_trans_reserve(tp, 0, - XFS_ITRUNCATE_LOG_RES(mp), - 0, XFS_TRANS_PERM_LOG_RES, - XFS_ITRUNCATE_LOG_COUNT); - if (error) { - ASSERT(XFS_FORCED_SHUTDOWN(mp)); - xfs_trans_cancel(tp, 0); - xfs_iunlock(ip, XFS_IOLOCK_EXCL); - return error; - } + /* + * We can't just take the iolock here normally because that may + * cause a lock order reversal or deadlocks due to memory allocations. + * + * But in the worse case we'll leave a superflous allocation on the + * inode that will get purged the next time we drop the last reference + * to a file pointing to this inode or totally evicting this inode. + */ + if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { + xfs_trans_cancel(tp, 0); + return EAGAIN; + } - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, - XFS_IOLOCK_EXCL | - XFS_ILOCK_EXCL); - xfs_trans_ihold(tp, ip); + /* + * Do the xfs_itruncate_start() call before reserving any log space + * because itruncate_start will call into the buffer cache and we + * can't do that within a transaction. + */ + error = xfs_itruncate_start(ip, XFS_ITRUNC_DEFINITE, ip->i_size); + if (error) + goto out_cancel; - error = xfs_itruncate_finish(&tp, ip, - ip->i_size, - XFS_DATA_FORK, - 0); - /* - * If we get an error at this point we - * simply don't bother truncating the file. - */ - if (error) { - xfs_trans_cancel(tp, - (XFS_TRANS_RELEASE_LOG_RES | - XFS_TRANS_ABORT)); - } else { - error = xfs_trans_commit(tp, - XFS_TRANS_RELEASE_LOG_RES); - } - xfs_iunlock(ip, (use_iolock ? (XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL) - : XFS_ILOCK_EXCL)); + error = xfs_trans_reserve(tp, 0, XFS_ITRUNCATE_LOG_RES(mp), + 0, XFS_TRANS_PERM_LOG_RES, + XFS_ITRUNCATE_LOG_COUNT); + if (error) { + ASSERT(XFS_FORCED_SHUTDOWN(mp)); + goto out_cancel; + } + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + xfs_trans_ihold(tp, ip); + + /* + * If we get an error at this point we simply don't bother truncating + * the file. + */ + error = xfs_itruncate_finish(&tp, ip, ip->i_size, XFS_DATA_FORK, 0); + if (error) { + xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | + XFS_TRANS_ABORT); + goto out_unlock; } + + error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); + + out_unlock: + xfs_iunlock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); + return error; + + out_cancel: + xfs_trans_cancel(tp, 0); + xfs_iunlock(ip, XFS_IOLOCK_EXCL); return error; } @@ -1116,8 +1115,8 @@ xfs_release( (ip->i_df.if_flags & XFS_IFEXTENTS)) && (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)))) { - error = xfs_free_eofblocks(mp, ip, XFS_FREE_EOF_LOCK); - if (error) + error = xfs_free_eofblocks(ip); + if (error && error != EAGAIN) return error; } } @@ -1187,7 +1186,8 @@ xfs_inactive( (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)) || (ip->i_delayed_blks != 0)))) { - error = xfs_free_eofblocks(mp, ip, XFS_FREE_EOF_LOCK); + error = xfs_free_eofblocks(ip); + ASSERT(error != EAGAIN); if (error) return VN_INACTIVE_CACHE; } From david@lang.hm Fri Jul 31 16:36:16 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VLaFLB173271 for ; Fri, 31 Jul 2009 16:36:15 -0500 X-ASG-Debug-ID: 1249076765-6b1a01f00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bifrost.lang.hm (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0E3CE12A9115 for ; Fri, 31 Jul 2009 14:46:05 -0700 (PDT) Received: from bifrost.lang.hm (mail.lang.hm [64.81.33.126]) by cuda.sgi.com with ESMTP id kGX71FQFIkLNxowS for ; Fri, 31 Jul 2009 14:46:05 -0700 (PDT) Received: from asgard.lang.hm (asgard.lang.hm [10.0.0.100]) by bifrost.lang.hm (8.13.4/8.13.4/Debian-3) with ESMTP id n6VLb2kr004676 for ; Fri, 31 Jul 2009 14:37:02 -0700 Date: Fri, 31 Jul 2009 14:37:02 -0700 (PDT) From: david@lang.hm X-X-Sender: dlang@asgard.lang.hm To: xfs@oss.sgi.com X-ASG-Orig-Subj: need troubleshooting help to track down a xfsdatad or hardware problem Subject: need troubleshooting help to track down a xfsdatad or hardware problem Message-ID: User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII X-Barracuda-Connect: mail.lang.hm[64.81.33.126] X-Barracuda-Start-Time: 1249076766 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4925 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean I have 20 identical boxes that have a 16 drive raid 6 array (3ware controller), on 17 of the boxes everything seems fine, but on 3 of the boxes the xfsdatad process appears to be having problems writing to the drive (iostat shows 5MB throughput), and a huge amount of data ends up buffered in memory, but cannot get written out to the disk. what can I do to figure out if the problem is somewhere in software or in hardware (and if hardware, any ideas how to figure out what is happening on these 3 boxes) David Lang From bneff@pelco.com Fri Jul 31 17:10:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=5.0 tests=AWL,BAYES_50,MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VMAg2U175363 for ; Fri, 31 Jul 2009 17:10:43 -0500 X-ASG-Debug-ID: 1249078289-74e803190000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail137.messagelabs.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 8AF7E39B732 for ; Fri, 31 Jul 2009 15:11:29 -0700 (PDT) Received: from mail137.messagelabs.com (mail137.messagelabs.com [216.82.249.19]) by cuda.sgi.com with SMTP id ZzQhRXMNXuPu3Ngo for ; Fri, 31 Jul 2009 15:11:29 -0700 (PDT) X-VirusChecked: Checked X-Env-Sender: bneff@pelco.com X-Msg-Ref: server-13.tower-137.messagelabs.com!1249078285!87044874!2 X-StarScan-Version: 6.1.2; banners=pelco.com,-,- X-Originating-IP: [12.104.144.2] Received: (qmail 21013 invoked from network); 31 Jul 2009 22:11:27 -0000 Received: from unknown (HELO CA-EVS02.pelco.org) (12.104.144.2) by server-13.tower-137.messagelabs.com with SMTP; 31 Jul 2009 22:11:27 -0000 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-ASG-Orig-Subj: RE: need troubleshooting help to track down a xfsdatad or hardware problem Subject: RE: need troubleshooting help to track down a xfsdatad or hardware problem Date: Fri, 31 Jul 2009 15:10:55 -0700 Message-ID: <46F2C60C4F4D4F4687C6DFCE5DC4630D01CF579A@CA-EVS02.pelco.org> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: need troubleshooting help to track down a xfsdatad or hardware problem Thread-Index: AcoSJzi/L88IHTYwRvm1UZt0RJ/nbgAAfGlw References: From: "Neff, Bryan" To: , X-Barracuda-Connect: mail137.messagelabs.com[216.82.249.19] X-Barracuda-Start-Time: 1249078289 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.20 X-Barracuda-Spam-Status: No, SCORE=-1.20 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MIME_QP_LONG_LINE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4927 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.82 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This=20is=20an=20issue=20with=20your=20controller=20disabling=20write=20ca= che=20-=20not=20an=20XFS issue. If=20your=203Ware=20Battery=20Backup=20Unit=20is=20not=20working,=20or=20i= s=20not=20sufficiently charged,=20the=20controller=20will=20disable=20drive=20write=20cache. Also,=20if=20your=20array=20is=20in=20a=20degraded=20state,=20the=20contro= ller=20will=20disable write=20cache. You=20can=20change=20this=20behavior=20by=20changing=20the=20storsave=20po= licy.=20=20 -----Original=20Message----- From:=20xfs-bounces@oss.sgi.com=20[mailto:xfs-bounces@oss.sgi.com]=20On=20= Behalf Of=20david@lang.hm Sent:=20Friday,=20July=2031,=202009=202:37=20PM To:=20xfs@oss.sgi.com Subject:=20need=20troubleshooting=20help=20to=20track=20down=20a=20xfsdata= d=20or=20hardware problem I=20have=2020=20identical=20boxes=20that=20have=20a=2016=20drive=20raid=20= 6=20array=20(3ware=20 controller),=20on=2017=20of=20the=20boxes=20everything=20seems=20fine,=20b= ut=20on=203=20of=20the=20 boxes=20the=20xfsdatad=20process=20appears=20to=20be=20having=20problems=20= writing=20to=20the=20 drive=20(iostat=20shows=205MB=20throughput),=20and=20a=20huge=20amount=20o= f=20data=20ends=20up=20 buffered=20in=20memory,=20but=20cannot=20get=20written=20out=20to=20the=20= disk. what=20can=20I=20do=20to=20figure=20out=20if=20the=20problem=20is=20somewh= ere=20in=20software=20or in=20 hardware=20(and=20if=20hardware,=20any=20ideas=20how=20to=20figure=20out=20= what=20is=20happening on=20these=203=20boxes) David=20Lang _______________________________________________ xfs=20mailing=20list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs -=20----------------------------------------------------------------------= -------- Confidentiality=20Notice:=20The=20information=20contained=20in=20this=20tr= ansmission=20is=20legally=20privileged=20and=20confidential,=20intended=20= only=20for=20the=20use=20of=20the=20individual(s)=20or=20entities=20named=20= above.=20This=20email=20and=20any=20files=20transmitted=20with=20it=20are=20= the=20property=20of=20Pelco.=20If=20the=20reader=20of=20this=20message=20i= s=20not=20the=20intended=20recipient,=20or=20an=20employee=20or=20agent=20= responsible=20for=20delivering=20this=20message=20to=20the=20intended=20re= cipient,=20you=20are=20hereby=20notified=20that=20any=20review,=20disclosu= re,=20copying,=20distribution,=20retention,=20or=20any=20action=20taken=20= or=20omitted=20to=20be=20taken=20in=20reliance=20on=20it=20is=20prohibited= =20and=20may=20be=20unlawful.=20If=20you=20receive=20this=20communication=20= in=20error,=20please=20notify=20us=20immediately=20by=20telephone=20call=20= to=20+1-559-292-1981=20or=20forward=20the=20e-mail=20to=20administrator@pe= lco.com=20and=20then=20permanently=20delete=20the=20e-mail=20and=20destroy= =20all=20soft=20and=20hard=20copies=20of=20the=20message=20and=20any=20att= achments.=20Thank=20you=20for=20your=20cooperation.=20 -=20----------------------------------------------------------------------= -------- From david@lang.hm Fri Jul 31 17:19:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6VMJSek175933 for ; Fri, 31 Jul 2009 17:19:28 -0500 X-ASG-Debug-ID: 1249079359-6b06032f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bifrost.lang.hm (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A407312A9587 for ; Fri, 31 Jul 2009 15:29:19 -0700 (PDT) Received: from bifrost.lang.hm (mail.lang.hm [64.81.33.126]) by cuda.sgi.com with ESMTP id 8DZalvTaVHxFuZHB for ; Fri, 31 Jul 2009 15:29:19 -0700 (PDT) Received: from asgard.lang.hm (asgard.lang.hm [10.0.0.100]) by bifrost.lang.hm (8.13.4/8.13.4/Debian-3) with ESMTP id n6VMKCdo004832; Fri, 31 Jul 2009 15:20:12 -0700 Date: Fri, 31 Jul 2009 15:20:12 -0700 (PDT) From: david@lang.hm X-X-Sender: dlang@asgard.lang.hm To: "Neff, Bryan" cc: xfs@oss.sgi.com X-ASG-Orig-Subj: RE: need troubleshooting help to track down a xfsdatad or hardware problem Subject: RE: need troubleshooting help to track down a xfsdatad or hardware problem In-Reply-To: <46F2C60C4F4D4F4687C6DFCE5DC4630D01CF579A@CA-EVS02.pelco.org> Message-ID: References: <46F2C60C4F4D4F4687C6DFCE5DC4630D01CF579A@CA-EVS02.pelco.org> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: mail.lang.hm[64.81.33.126] X-Barracuda-Start-Time: 1249079359 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.4927 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, 31 Jul 2009, Neff, Bryan wrote: > This is an issue with your controller disabling write cache - not an XFS > issue. > > If your 3Ware Battery Backup Unit is not working, or is not sufficiently > charged, the controller will disable drive write cache. > Also, if your array is in a degraded state, the controller will disable > write cache. > You can change this behavior by changing the storsave policy. thanks, the $#%@#$ vendor shipped all 20 systems without battery backup, and apparently couldn't even configure them consistantly. David Lang > -----Original Message----- > From: xfs-bounces@oss.sgi.com [mailto:xfs-bounces@oss.sgi.com] On Behalf > Of david@lang.hm > Sent: Friday, July 31, 2009 2:37 PM > To: xfs@oss.sgi.com > Subject: need troubleshooting help to track down a xfsdatad or hardware > problem > > I have 20 identical boxes that have a 16 drive raid 6 array (3ware > controller), on 17 of the boxes everything seems fine, but on 3 of the > boxes the xfsdatad process appears to be having problems writing to the > drive (iostat shows 5MB throughput), and a huge amount of data ends up > buffered in memory, but cannot get written out to the disk. > > what can I do to figure out if the problem is somewhere in software or > in > hardware (and if hardware, any ideas how to figure out what is happening > > on these 3 boxes) > > David Lang > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > > - ------------------------------------------------------------------------------ > Confidentiality Notice: The information contained in this transmission is legally privileged and confidential, intended only for the use of the individual(s) or entities named above. This email and any files transmitted with it are the property of Pelco. If the reader of this message is not the intended recipient, or an employee or agent responsible for delivering this message to the intended recipient, you are hereby notified that any review, disclosure, copying, distribution, retention, or any action taken or omitted to be taken in reliance on it is prohibited and may be unlawful. If you receive this communication in error, please notify us immediately by telephone call to +1-559-292-1981 or forward the e-mail to administrator@pelco.com and then permanently delete the e-mail and destroy all soft and hard copies of the message and any attachments. Thank you for your cooperation. > - ------------------------------------------------------------------------------ >
<= b>Creative & Professional Writing Skills&=23xa0;&=23x2013; Manchester = =5B21 July=5D; London =5B27 July=5D