ÿØÿà�JFIF������ÿápExif��II*������[������¼ p!ranha?
Server IP : 104.21.87.198  /  Your IP : 172.70.188.20
Web Server : Apache/2.2.15 (CentOS)
System : Linux GA 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64
User : apache ( 48)
PHP Version : 5.6.38
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /usr/share/doc/git-1.7.1/

Upload File :
Curr3nt_D!r [ Writeable ] D0cum3nt_r0Ot [ Writeable ]

 
Command :
Current File : /usr/share/doc/git-1.7.1/git-bisect-lk2009.txt
Fighting regressions with git bisect
====================================
:Author: Christian Couder
:Email: chriscool@tuxfamily.org
:Date: 2009/11/08

Abstract
--------

"git bisect" enables software users and developers to easily find the
commit that introduced a regression. We show why it is important to
have good tools to fight regressions. We describe how "git bisect"
works from the outside and the algorithms it uses inside. Then we
explain how to take advantage of "git bisect" to improve current
practices. And we discuss how "git bisect" could improve in the
future.


Introduction to "git bisect"
----------------------------

Git is a Distributed Version Control system (DVCS) created by Linus
Torvalds and maintained by Junio Hamano.

In Git like in many other Version Control Systems (VCS), the different
states of the data that is managed by the system are called
commits. And, as VCS are mostly used to manage software source code,
sometimes "interesting" changes of behavior in the software are
introduced in some commits.

In fact people are specially interested in commits that introduce a
"bad" behavior, called a bug or a regression. They are interested in
these commits because a commit (hopefully) contains a very small set
of source code changes. And it's much easier to understand and
properly fix a problem when you only need to check a very small set of
changes, than when you don't know where look in the first place.

So to help people find commits that introduce a "bad" behavior, the
"git bisect" set of commands was invented. And it follows of course
that in "git bisect" parlance, commits where the "interesting
behavior" is present are called "bad" commits, while other commits are
called "good" commits. And a commit that introduce the behavior we are
interested in is called a "first bad commit". Note that there could be
more than one "first bad commit" in the commit space we are searching.

So "git bisect" is designed to help find a "first bad commit". And to
be as efficient as possible, it tries to perform a binary search.


Fighting regressions overview
-----------------------------

Regressions: a big problem
~~~~~~~~~~~~~~~~~~~~~~~~~~

Regressions are a big problem in the software industry. But it's
difficult to put some real numbers behind that claim.

There are some numbers about bugs in general, like a NIST study in
2002 <<1>> that said:

_____________
Software bugs, or errors, are so prevalent and so detrimental that
they cost the U.S. economy an estimated $59.5 billion annually, or
about 0.6 percent of the gross domestic product, according to a newly
released study commissioned by the Department of Commerce's National
Institute of Standards and Technology (NIST). At the national level,
over half of the costs are borne by software users and the remainder
by software developers/vendors.  The study also found that, although
all errors cannot be removed, more than a third of these costs, or an
estimated $22.2 billion, could be eliminated by an improved testing
infrastructure that enables earlier and more effective identification
and removal of software defects. These are the savings associated with
finding an increased percentage (but not 100 percent) of errors closer
to the development stages in which they are introduced. Currently,
over half of all errors are not found until "downstream" in the
development process or during post-sale software use.
_____________

And then:

_____________
Software developers already spend approximately 80 percent of
development costs on identifying and correcting defects, and yet few
products of any type other than software are shipped with such high
levels of errors.
_____________

Eventually the conclusion started with:

_____________
The path to higher software quality is significantly improved software
testing.
_____________

There are other estimates saying that 80% of the cost related to
software is about maintenance <<2>>.

Though, according to Wikipedia <<3>>:

_____________
A common perception of maintenance is that it is merely fixing
bugs. However, studies and surveys over the years have indicated that
the majority, over 80%, of the maintenance effort is used for
non-corrective actions (Pigosky 1997). This perception is perpetuated
by users submitting problem reports that in reality are functionality
enhancements to the system.
_____________

But we can guess that improving on existing software is very costly
because you have to watch out for regressions. At least this would
make the above studies consistent among themselves.

Of course some kind of software is developed, then used during some
time without being improved on much, and then finally thrown away. In
this case, of course, regressions may not be a big problem. But on the
other hand, there is a lot of big software that is continually
developed and maintained during years or even tens of years by a lot
of people. And as there are often many people who depend (sometimes
critically) on such software, regressions are a really big problem.

One such software is the linux kernel. And if we look at the linux
kernel, we can see that a lot of time and effort is spent to fight
regressions. The release cycle start with a 2 weeks long merge
window. Then the first release candidate (rc) version is tagged. And
after that about 7 or 8 more rc versions will appear with around one
week between each of them, before the final release.

The time between the first rc release and the final release is
supposed to be used to test rc versions and fight bugs and especially
regressions. And this time is more than 80% of the release cycle
time. But this is not the end of the fight yet, as of course it
continues after the release.

And then this is what Ingo Molnar (a well known linux kernel
developer) says about his use of git bisect:

_____________
I most actively use it during the merge window (when a lot of trees
get merged upstream and when the influx of bugs is the highest) - and
yes, there have been cases that i used it multiple times a day. My
average is roughly once a day.
_____________

So regressions are fought all the time by developers, and indeed it is
well known that bugs should be fixed as soon as possible, so as soon
as they are found. That's why it is interesting to have good tools for
this purpose.

Other tools to fight regressions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So what are the tools used to fight regressions? They are nearly the
same as those used to fight regular bugs. The only specific tools are
test suites and tools similar as "git bisect".

Test suites are very nice. But when they are used alone, they are
supposed to be used so that all the tests are checked after each
commit. This means that they are not very efficient, because many
tests are run for no interesting result, and they suffer from
combinational explosion.

In fact the problem is that big software often has many different
configuration options and that each test case should pass for each
configuration after each commit. So if you have for each release: N
configurations, M commits and T test cases, you should perform:

-------------
N * M * T tests
-------------

where N, M and T are all growing with the size your software.

So very soon it will not be possible to completely test everything.

And if some bugs slip through your test suite, then you can add a test
to your test suite. But if you want to use your new improved test
suite to find where the bug slipped in, then you will either have to
emulate a bisection process or you will perhaps bluntly test each
commit backward starting from the "bad" commit you have which may be
very wasteful.

"git bisect" overview
---------------------

Starting a bisection
~~~~~~~~~~~~~~~~~~~~

The first "git bisect" subcommand to use is "git bisect start" to
start the search. Then bounds must be set to limit the commit
space. This is done usually by giving one "bad" and at least one
"good" commit. They can be passed in the initial call to "git bisect
start" like this:

-------------
$ git bisect start [BAD [GOOD...]]
-------------

or they can be set using:

-------------
$ git bisect bad [COMMIT]
-------------

and:

-------------
$ git bisect good [COMMIT...]
-------------

where BAD, GOOD and COMMIT are all names that can be resolved to a
commit.

Then "git bisect" will checkout a commit of its choosing and ask the
user to test it, like this:

-------------
$ git bisect start v2.6.27 v2.6.25
Bisecting: 10928 revisions left to test after this (roughly 14 steps)
[2ec65f8b89ea003c27ff7723525a2ee335a2b393] x86: clean up using max_low_pfn on 32-bit
-------------

Note that the example that we will use is really a toy example, we
will be looking for the first commit that has a version like
"2.6.26-something", that is the commit that has a "SUBLEVEL = 26" line
in the top level Makefile. This is a toy example because there are
better ways to find this commit with git than using "git bisect" (for
example "git blame" or "git log -S<string>").

Driving a bisection manually
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

At this point there are basically 2 ways to drive the search. It can
be driven manually by the user or it can be driven automatically by a
script or a command.

If the user is driving it, then at each step of the search, the user
will have to test the current commit and say if it is "good" or "bad"
using the "git bisect good" or "git bisect bad" commands respectively
that have been described above. For example:

-------------
$ git bisect bad
Bisecting: 5480 revisions left to test after this (roughly 13 steps)
[66c0b394f08fd89236515c1c84485ea712a157be] KVM: kill file->f_count abuse in kvm
-------------

And after a few more steps like that, "git bisect" will eventually
find a first bad commit:

-------------
$ git bisect bad
2ddcca36c8bcfa251724fe342c8327451988be0d is the first bad commit
commit 2ddcca36c8bcfa251724fe342c8327451988be0d
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Sat May 3 11:59:44 2008 -0700

    Linux 2.6.26-rc1

:100644 100644 5cf8258195331a4dbdddff08b8d68642638eea57 4492984efc09ab72ff6219a7bc21fb6a957c4cd5 M      Makefile
-------------

At this point we can see what the commit does, check it out (if it's
not already checked out) or tinker with it, for example:

-------------
$ git show HEAD
commit 2ddcca36c8bcfa251724fe342c8327451988be0d
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Sat May 3 11:59:44 2008 -0700

    Linux 2.6.26-rc1

diff --git a/Makefile b/Makefile
index 5cf8258..4492984 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
-SUBLEVEL = 25
-EXTRAVERSION =
+SUBLEVEL = 26
+EXTRAVERSION = -rc1
 NAME = Funky Weasel is Jiggy wit it

 # *DOCUMENTATION*
-------------

And when we are finished we can use "git bisect reset" to go back to
the branch we were in before we started bisecting:

-------------
$ git bisect reset
Checking out files: 100% (21549/21549), done.
Previous HEAD position was 2ddcca3... Linux 2.6.26-rc1
Switched to branch 'master'
-------------

Driving a bisection automatically
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The other way to drive the bisection process is to tell "git bisect"
to launch a script or command at each bisection step to know if the
current commit is "good" or "bad". To do that, we use the "git bisect
run" command. For example:

-------------
$ git bisect start v2.6.27 v2.6.25
Bisecting: 10928 revisions left to test after this (roughly 14 steps)
[2ec65f8b89ea003c27ff7723525a2ee335a2b393] x86: clean up using max_low_pfn on 32-bit
$
$ git bisect run grep '^SUBLEVEL = 25' Makefile
running grep ^SUBLEVEL = 25 Makefile
Bisecting: 5480 revisions left to test after this (roughly 13 steps)
[66c0b394f08fd89236515c1c84485ea712a157be] KVM: kill file->f_count abuse in kvm
running grep ^SUBLEVEL = 25 Makefile
SUBLEVEL = 25
Bisecting: 2740 revisions left to test after this (roughly 12 steps)
[671294719628f1671faefd4882764886f8ad08cb] V4L/DVB(7879): Adding cx18 Support for mxl5005s
...
...
running grep ^SUBLEVEL = 25 Makefile
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[2ddcca36c8bcfa251724fe342c8327451988be0d] Linux 2.6.26-rc1
running grep ^SUBLEVEL = 25 Makefile
2ddcca36c8bcfa251724fe342c8327451988be0d is the first bad commit
commit 2ddcca36c8bcfa251724fe342c8327451988be0d
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Sat May 3 11:59:44 2008 -0700

    Linux 2.6.26-rc1

:100644 100644 5cf8258195331a4dbdddff08b8d68642638eea57 4492984efc09ab72ff6219a7bc21fb6a957c4cd5 M      Makefile
bisect run success
-------------

In this example, we passed "grep '^SUBLEVEL = 25' Makefile" as
parameter to "git bisect run". This means that at each step, the grep
command we passed will be launched. And if it exits with code 0 (that
means success) then git bisect will mark the current state as
"good". If it exits with code 1 (or any code between 1 and 127
included, except the special code 125), then the current state will be
marked as "bad".

Exit code between 128 and 255 are special to "git bisect run". They
make it stop immediately the bisection process. This is useful for
example if the command passed takes too long to complete, because you
can kill it with a signal and it will stop the bisection process.

It can also be useful in scripts passed to "git bisect run" to "exit
255" if some very abnormal situation is detected.

Avoiding untestable commits
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sometimes it happens that the current state cannot be tested, for
example if it does not compile because there was a bug preventing it
at that time. This is what the special exit code 125 is for. It tells
"git bisect run" that the current commit should be marked as
untestable and that another one should be chosen and checked out.

If the bisection process is driven manually, you can use "git bisect
skip" to do the same thing. (In fact the special exit code 125 makes
"git bisect run" use "git bisect skip" in the background.)

Or if you want more control, you can inspect the current state using
for example "git bisect visualize". It will launch gitk (or "git log"
if the DISPLAY environment variable is not set) to help you find a
better bisection point.

Either way, if you have a string of untestable commits, it might
happen that the regression you are looking for has been introduced by
one of these untestable commits. In this case it's not possible to
tell for sure which commit introduced the regression.

So if you used "git bisect skip" (or the run script exited with
special code 125) you could get a result like this:

-------------
There are only 'skip'ped commits left to test.
The first bad commit could be any of:
15722f2fa328eaba97022898a305ffc8172db6b1
78e86cf3e850bd755bb71831f42e200626fbd1e0
e15b73ad3db9b48d7d1ade32f8cd23a751fe0ace
070eab2303024706f2924822bfec8b9847e4ac1b
We cannot bisect more!
-------------

Saving a log and replaying it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you want to show other people your bisection process, you can get a
log using for example:

-------------
$ git bisect log > bisect_log.txt
-------------

And it is possible to replay it using:

-------------
$ git bisect replay bisect_log.txt
-------------


"git bisect" details
--------------------

Bisection algorithm
~~~~~~~~~~~~~~~~~~~

As the Git commits form a directed acyclic graph (DAG), finding the
best bisection commit to test at each step is not so simple. Anyway
Linus found and implemented a "truly stupid" algorithm, later improved
by Junio Hamano, that works quite well.

So the algorithm used by "git bisect" to find the best bisection
commit when there are no skipped commits is the following:

1) keep only the commits that:

a) are ancestor of the "bad" commit (including the "bad" commit itself),
b) are not ancestor of a "good" commit (excluding the "good" commits).

This means that we get rid of the uninteresting commits in the DAG.

For example if we start with a graph like this:

-------------
G-Y-G-W-W-W-X-X-X-X
	   \ /
	    W-W-B
	   /
Y---G-W---W
 \ /   \
Y-Y     X-X-X-X

-> time goes this way ->
-------------

where B is the "bad" commit, "G" are "good" commits and W, X, and Y
are other commits, we will get the following graph after this first
step:

-------------
W-W-W
     \
      W-W-B
     /
W---W
-------------

So only the W and B commits will be kept. Because commits X and Y will
have been removed by rules a) and b) respectively, and because commits
G are removed by rule b) too.

Note for git users, that it is equivalent as keeping only the commit
given by:

-------------
git rev-list BAD --not GOOD1 GOOD2...
-------------

Also note that we don't require the commits that are kept to be
descendants of a "good" commit. So in the following example, commits W
and Z will be kept:

-------------
G-W-W-W-B
   /
Z-Z
-------------

2) starting from the "good" ends of the graph, associate to each
commit the number of ancestors it has plus one

For example with the following graph where H is the "bad" commit and A
and D are some parents of some "good" commits:

-------------
A-B-C
     \
      F-G-H
     /
D---E
-------------

this will give:

-------------
1 2 3
A-B-C
     \6 7 8
      F-G-H
1   2/
D---E
-------------

3) associate to each commit: min(X, N - X)

where X is the value associated to the commit in step 2) and N is the
total number of commits in the graph.

In the above example we have N = 8, so this will give:

-------------
1 2 3
A-B-C
     \2 1 0
      F-G-H
1   2/
D---E
-------------

4) the best bisection point is the commit with the highest associated
number

So in the above example the best bisection point is commit C.

5) note that some shortcuts are implemented to speed up the algorithm

As we know N from the beginning, we know that min(X, N - X) can't be
greater than N/2. So during steps 2) and 3), if we would associate N/2
to a commit, then we know this is the best bisection point. So in this
case we can just stop processing any other commit and return the
current commit.

Bisection algorithm debugging
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For any commit graph, you can see the number associated with each
commit using "git rev-list --bisect-all".

For example, for the above graph, a command like:

-------------
$ git rev-list --bisect-all BAD --not GOOD1 GOOD2
-------------

would output something like:

-------------
e15b73ad3db9b48d7d1ade32f8cd23a751fe0ace (dist=3)
15722f2fa328eaba97022898a305ffc8172db6b1 (dist=2)
78e86cf3e850bd755bb71831f42e200626fbd1e0 (dist=2)
a1939d9a142de972094af4dde9a544e577ddef0e (dist=2)
070eab2303024706f2924822bfec8b9847e4ac1b (dist=1)
a3864d4f32a3bf5ed177ddef598490a08760b70d (dist=1)
a41baa717dd74f1180abf55e9341bc7a0bb9d556 (dist=1)
9e622a6dad403b71c40979743bb9d5be17b16bd6 (dist=0)
-------------

Bisection algorithm discussed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

First let's define "best bisection point". We will say that a commit X
is a best bisection point or a best bisection commit if knowing its
state ("good" or "bad") gives as much information as possible whether
the state of the commit happens to be "good" or "bad".

This means that the best bisection commits are the commits where the
following function is maximum:

-------------
f(X) = min(information_if_good(X), information_if_bad(X))
-------------

where information_if_good(X) is the information we get if X is good
and information_if_bad(X) is the information we get if X is bad.

Now we will suppose that there is only one "first bad commit". This
means that all its descendants are "bad" and all the other commits are
"good". And we will suppose that all commits have an equal probability
of being good or bad, or of being the first bad commit, so knowing the
state of c commits gives always the same amount of information
wherever these c commits are on the graph and whatever c is. (So we
suppose that these commits being for example on a branch or near a
good or a bad commit does not give more or less information).

Let's also suppose that we have a cleaned up graph like one after step
1) in the bisection algorithm above. This means that we can measure
the information we get in terms of number of commit we can remove from
the graph..

And let's take a commit X in the graph.

If X is found to be "good", then we know that its ancestors are all
"good", so we want to say that:

-------------
information_if_good(X) = number_of_ancestors(X)  (TRUE)
-------------

And this is true because at step 1) b) we remove the ancestors of the
"good" commits.

If X is found to be "bad", then we know that its descendants are all
"bad", so we want to say that:

-------------
information_if_bad(X) = number_of_descendants(X)  (WRONG)
-------------

But this is wrong because at step 1) a) we keep only the ancestors of
the bad commit. So we get more information when a commit is marked as
"bad", because we also know that the ancestors of the previous "bad"
commit that are not ancestors of the new "bad" commit are not the
first bad commit. We don't know if they are good or bad, but we know
that they are not the first bad commit because they are not ancestor
of the new "bad" commit.

So when a commit is marked as "bad" we know we can remove all the
commits in the graph except those that are ancestors of the new "bad"
commit. This means that:

-------------
information_if_bad(X) = N - number_of_ancestors(X)  (TRUE)
-------------

where N is the number of commits in the (cleaned up) graph.

So in the end this means that to find the best bisection commits we
should maximize the function:

-------------
f(X) = min(number_of_ancestors(X), N - number_of_ancestors(X))
-------------

And this is nice because at step 2) we compute number_of_ancestors(X)
and so at step 3) we compute f(X).

Let's take the following graph as an example:

-------------
	    G-H-I-J
	   /       \
A-B-C-D-E-F         O
	   \       /
	    K-L-M-N
-------------

If we compute the following non optimal function on it:

-------------
g(X) = min(number_of_ancestors(X), number_of_descendants(X))
-------------

we get:

-------------
	    4 3 2 1
	    G-H-I-J
1 2 3 4 5 6/       \0
A-B-C-D-E-F         O
	   \       /
	    K-L-M-N
	    4 3 2 1
-------------

but with the algorithm used by git bisect we get:

-------------
	    7 7 6 5
	    G-H-I-J
1 2 3 4 5 6/       \0
A-B-C-D-E-F         O
	   \       /
	    K-L-M-N
	    7 7 6 5
-------------

So we chose G, H, K or L as the best bisection point, which is better
than F. Because if for example L is bad, then we will know not only
that L, M and N are bad but also that G, H, I and J are not the first
bad commit (since we suppose that there is only one first bad commit
and it must be an ancestor of L).

So the current algorithm seems to be the best possible given what we
initially supposed.

Skip algorithm
~~~~~~~~~~~~~~

When some commits have been skipped (using "git bisect skip"), then
the bisection algorithm is the same for step 1) to 3). But then we use
roughly the following steps:

6) sort the commit by decreasing associated value

7) if the first commit has not been skipped, we can return it and stop
here

8) otherwise filter out all the skipped commits in the sorted list

9) use a pseudo random number generator (PRNG) to generate a random
number between 0 and 1

10) multiply this random number with its square root to bias it toward
0

11) multiply the result by the number of commits in the filtered list
to get an index into this list

12) return the commit at the computed index

Skip algorithm discussed
~~~~~~~~~~~~~~~~~~~~~~~~

After step 7) (in the skip algorithm), we could check if the second
commit has been skipped and return it if it is not the case. And in
fact that was the algorithm we used from when "git bisect skip" was
developed in git version 1.5.4 (released on February 1st 2008) until
git version 1.6.4 (released July 29th 2009).

But Ingo Molnar and H. Peter Anvin (another well known linux kernel
developer) both complained that sometimes the best bisection points
all happened to be in an area where all the commits are
untestable. And in this case the user was asked to test many
untestable commits, which could be very inefficient.

Indeed untestable commits are often untestable because a breakage was
introduced at one time, and that breakage was fixed only after many
other commits were introduced.

This breakage is of course most of the time unrelated to the breakage
we are trying to locate in the commit graph. But it prevents us to
know if the interesting "bad behavior" is present or not.

So it is a fact that commits near an untestable commit have a high
probability of being untestable themselves. And the best bisection
commits are often found together too (due to the bisection algorithm).

This is why it is a bad idea to just chose the next best unskipped
bisection commit when the first one has been skipped.

We found that most commits on the graph may give quite a lot of
information when they are tested. And the commits that will not on
average give a lot of information are the one near the good and bad
commits.

So using a PRNG with a bias to favor commits away from the good and
bad commits looked like a good choice.

One obvious improvement to this algorithm would be to look for a
commit that has an associated value near the one of the best bisection
commit, and that is on another branch, before using the PRNG. Because
if such a commit exists, then it is not very likely to be untestable
too, so it will probably give more information than a nearly randomly
chosen one.

Checking merge bases
~~~~~~~~~~~~~~~~~~~~

There is another tweak in the bisection algorithm that has not been
described in the "bisection algorithm" above.

We supposed in the previous examples that the "good" commits were
ancestors of the "bad" commit. But this is not a requirement of "git
bisect".

Of course the "bad" commit cannot be an ancestor of a "good" commit,
because the ancestors of the good commits are supposed to be
"good". And all the "good" commits must be related to the bad commit.
They cannot be on a branch that has no link with the branch of the
"bad" commit. But it is possible for a good commit to be related to a
bad commit and yet not be neither one of its ancestor nor one of its
descendants.

For example, there can be a "main" branch, and a "dev" branch that was
forked of the main branch at a commit named "D" like this:

-------------
A-B-C-D-E-F-G  <--main
       \
	H-I-J  <--dev
-------------

The commit "D" is called a "merge base" for branch "main" and "dev"
because it's the best common ancestor for these branches for a merge.

Now let's suppose that commit J is bad and commit G is good and that
we apply the bisection algorithm like it has been previously
described.

As described in step 1) b) of the bisection algorithm, we remove all
the ancestors of the good commits because they are supposed to be good
too.

So we would be left with only:

-------------
H-I-J
-------------

But what happens if the first bad commit is "B" and if it has been
fixed in the "main" branch by commit "F"?

The result of such a bisection would be that we would find that H is
the first bad commit, when in fact it's B. So that would be wrong!

And yes it can happen in practice that people working on one branch
are not aware that people working on another branch fixed a bug! It
could also happen that F fixed more than one bug or that it is a
revert of some big development effort that was not ready to be
released.

In fact development teams often maintain both a development branch and
a maintenance branch, and it would be quite easy for them if "git
bisect" just worked when they want to bisect a regression on the
development branch that is not on the maintenance branch. They should
be able to start bisecting using:

-------------
$ git bisect start dev main
-------------

To enable that additional nice feature, when a bisection is started
and when some good commits are not ancestors of the bad commit, we
first compute the merge bases between the bad and the good commits and
we chose these merge bases as the first commits that will be checked
out and tested.

If it happens that one merge base is bad, then the bisection process
is stopped with a message like:

-------------
The merge base BBBBBB is bad.
This means the bug has been fixed between BBBBBB and [GGGGGG,...].
-------------

where BBBBBB is the sha1 hash of the bad merge base and [GGGGGG,...]
is a comma separated list of the sha1 of the good commits.

If some of the merge bases are skipped, then the bisection process
continues, but the following message is printed for each skipped merge
base:

-------------
Warning: the merge base between BBBBBB and [GGGGGG,...] must be skipped.
So we cannot be sure the first bad commit is between MMMMMM and BBBBBB.
We continue anyway.
-------------

where BBBBBB is the sha1 hash of the bad commit, MMMMMM is the sha1
hash of the merge base that is skipped and [GGGGGG,...]  is a comma
separated list of the sha1 of the good commits.

So if there is no bad merge base, the bisection process continues as
usual after this step.

Best bisecting practices
------------------------

Using test suites and git bisect together
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you both have a test suite and use git bisect, then it becomes less
important to check that all tests pass after each commit. Though of
course it is probably a good idea to have some checks to avoid
breaking too many things because it could make bisecting other bugs
more difficult.

You can focus your efforts to check at a few points (for example rc
and beta releases) that all the T test cases pass for all the N
configurations. And when some tests don't pass you can use "git
bisect" (or better "git bisect run"). So you should perform roughly:

-------------
c * N * T + b * M * log2(M) tests
-------------

where c is the number of rounds of test (so a small constant) and b is
the ratio of bug per commit (hopefully a small constant too).

So of course it's much better as it's O(N \* T) vs O(N \* T \* M) if
you would test everything after each commit.

This means that test suites are good to prevent some bugs from being
committed and they are also quite good to tell you that you have some
bugs. But they are not so good to tell you where some bugs have been
introduced. To tell you that efficiently, git bisect is needed.

The other nice thing with test suites, is that when you have one, you
already know how to test for bad behavior. So you can use this
knowledge to create a new test case for "git bisect" when it appears
that there is a regression. So it will be easier to bisect the bug and
fix it. And then you can add the test case you just created to your
test suite.

So if you know how to create test cases and how to bisect, you will be
subject to a virtuous circle:

more tests => easier to create tests => easier to bisect => more tests

So test suites and "git bisect" are complementary tools that are very
powerful and efficient when used together.

Bisecting build failures
~~~~~~~~~~~~~~~~~~~~~~~~

You can very easily automatically bisect broken builds using something
like:

-------------
$ git bisect start BAD GOOD
$ git bisect run make
-------------

Passing sh -c "some commands" to "git bisect run"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For example:

-------------
$ git bisect run sh -c "make || exit 125; ./my_app | grep 'good output'"
-------------

On the other hand if you do this often, then it can be worth having
scripts to avoid too much typing.

Finding performance regressions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Here is an example script that comes slightly modified from a real
world script used by Junio Hamano <<4>>.

This script can be passed to "git bisect run" to find the commit that
introduced a performance regression:

-------------
#!/bin/sh

# Build errors are not what I am interested in.
make my_app || exit 255

# We are checking if it stops in a reasonable amount of time, so
# let it run in the background...

./my_app >log 2>&1 &

# ... and grab its process ID.
pid=$!

# ... and then wait for sufficiently long.
sleep $NORMAL_TIME

# ... and then see if the process is still there.
if kill -0 $pid
then
	# It is still running -- that is bad.
	kill $pid; sleep 1; kill $pid;
	exit 1
else
	# It has already finished (the $pid process was no more),
	# and we are happy.
	exit 0
fi
-------------

Following general best practices
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

It is obviously a good idea not to have commits with changes that
knowingly break things, even if some other commits later fix the
breakage.

It is also a good idea when using any VCS to have only one small
logical change in each commit.

The smaller the changes in your commit, the most effective "git
bisect" will be. And you will probably need "git bisect" less in the
first place, as small changes are easier to review even if they are
only reviewed by the commiter.

Another good idea is to have good commit messages. They can be very
helpful to understand why some changes were made.

These general best practices are very helpful if you bisect often.

Avoiding bug prone merges
~~~~~~~~~~~~~~~~~~~~~~~~~

First merges by themselves can introduce some regressions even when
the merge needs no source code conflict resolution. This is because a
semantic change can happen in one branch while the other branch is not
aware of it.

For example one branch can change the semantic of a function while the
other branch add more calls to the same function.

This is made much worse if many files have to be fixed to resolve
conflicts. That's why such merges are called "evil merges". They can
make regressions very difficult to track down. It can even be
misleading to know the first bad commit if it happens to be such a
merge, because people might think that the bug comes from bad conflict
resolution when it comes from a semantic change in one branch.

Anyway "git rebase" can be used to linearize history. This can be used
either to avoid merging in the first place. Or it can be used to
bisect on a linear history instead of the non linear one, as this
should give more information in case of a semantic change in one
branch.

Merges can be also made simpler by using smaller branches or by using
many topic branches instead of only long version related branches.

And testing can be done more often in special integration branches
like linux-next for the linux kernel.

Adapting your work-flow
~~~~~~~~~~~~~~~~~~~~~~~

A special work-flow to process regressions can give great results.

Here is an example of a work-flow used by Andreas Ericsson:

* write, in the test suite, a test script that exposes the regression
* use "git bisect run" to find the commit that introduced it
* fix the bug that is often made obvious by the previous step
* commit both the fix and the test script (and if needed more tests)

And here is what Andreas said about this work-flow <<5>>:

_____________
To give some hard figures, we used to have an average report-to-fix
cycle of 142.6 hours (according to our somewhat weird bug-tracker
which just measures wall-clock time). Since we moved to git, we've
lowered that to 16.2 hours. Primarily because we can stay on top of
the bug fixing now, and because everyone's jockeying to get to fix
bugs (we're quite proud of how lazy we are to let git find the bugs
for us). Each new release results in ~40% fewer bugs (almost certainly
due to how we now feel about writing tests).
_____________

Clearly this work-flow uses the virtuous circle between test suites
and "git bisect". In fact it makes it the standard procedure to deal
with regression.

In other messages Andreas says that they also use the "best practices"
described above: small logical commits, topic branches, no evil
merge,... These practices all improve the bisectability of the commit
graph, by making it easier and more useful to bisect.

So a good work-flow should be designed around the above points. That
is making bisecting easier, more useful and standard.

Involving QA people and if possible end users
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

One nice about "git bisect" is that it is not only a developer
tool. It can effectively be used by QA people or even end users (if
they have access to the source code or if they can get access to all
the builds).

There was a discussion at one point on the linux kernel mailing list
of whether it was ok to always ask end user to bisect, and very good
points were made to support the point of view that it is ok.

For example David Miller wrote <<6>>:

_____________
What people don't get is that this is a situation where the "end node
principle" applies. When you have limited resources (here: developers)
you don't push the bulk of the burden upon them. Instead you push
things out to the resource you have a lot of, the end nodes (here:
users), so that the situation actually scales.
_____________

This means that it is often "cheaper" if QA people or end users can do
it.

What is interesting too is that end users that are reporting bugs (or
QA people that reproduced a bug) have access to the environment where
the bug happens. So they can often more easily reproduce a
regression. And if they can bisect, then more information will be
extracted from the environment where the bug happens, which means that
it will be easier to understand and then fix the bug.

For open source projects it can be a good way to get more useful
contributions from end users, and to introduce them to QA and
development activities.

Using complex scripts
~~~~~~~~~~~~~~~~~~~~~

In some cases like for kernel development it can be worth developing
complex scripts to be able to fully automate bisecting.

Here is what Ingo Molnar says about that <<7>>:

_____________
i have a fully automated bootup-hang bisection script. It is based on
"git-bisect run". I run the script, it builds and boots kernels fully
automatically, and when the bootup fails (the script notices that via
the serial log, which it continuously watches - or via a timeout, if
the system does not come up within 10 minutes it's a "bad" kernel),
the script raises my attention via a beep and i power cycle the test
box. (yeah, i should make use of a managed power outlet to 100%
automate it)
_____________

Combining test suites, git bisect and other systems together
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

We have seen that test suites an git bisect are very powerful when
used together. It can be even more powerful if you can combine them
with other systems.

For example some test suites could be run automatically at night with
some unusual (or even random) configurations. And if a regression is
found by a test suite, then "git bisect" can be automatically
launched, and its result can be emailed to the author of the first bad
commit found by "git bisect", and perhaps other people too. And a new
entry in the bug tracking system could be automatically created too.


The future of bisecting
-----------------------

"git replace"
~~~~~~~~~~~~~

We saw earlier that "git bisect skip" is now using a PRNG to try to
avoid areas in the commit graph where commits are untestable. The
problem is that sometimes the first bad commit will be in an
untestable area.

To simplify the discussion we will suppose that the untestable area is
a simple string of commits and that it was created by a breakage
introduced by one commit (let's call it BBC for bisect breaking
commit) and later fixed by another one (let's call it BFC for bisect
fixing commit).

For example:

-------------
...-Y-BBC-X1-X2-X3-X4-X5-X6-BFC-Z-...
-------------

where we know that Y is good and BFC is bad, and where BBC and X1 to
X6 are untestable.

In this case if you are bisecting manually, what you can do is create
a special branch that starts just before the BBC. The first commit in
this branch should be the BBC with the BFC squashed into it. And the
other commits in the branch should be the commits between BBC and BFC
rebased on the first commit of the branch and then the commit after
BFC also rebased on.

For example:

-------------
      (BBC+BFC)-X1'-X2'-X3'-X4'-X5'-X6'-Z'
     /
...-Y-BBC-X1-X2-X3-X4-X5-X6-BFC-Z-...
-------------

where commits quoted with ' have been rebased.

You can easily create such a branch with Git using interactive rebase.

For example using:

-------------
$ git rebase -i Y Z
-------------

and then moving BFC after BBC and squashing it.

After that you can start bisecting as usual in the new branch and you
should eventually find the first bad commit.

For example:

-------------
$ git bisect start Z' Y
-------------

If you are using "git bisect run", you can use the same manual fix up
as above, and then start another "git bisect run" in the special
branch. Or as the "git bisect" man page says, the script passed to
"git bisect run" can apply a patch before it compiles and test the
software <<8>>. The patch should turn a current untestable commits
into a testable one. So the testing will result in "good" or "bad" and
"git bisect" will be able to find the first bad commit. And the script
should not forget to remove the patch once the testing is done before
exiting from the script.

(Note that instead of a patch you can use "git cherry-pick BFC" to
apply the fix, and in this case you should use "git reset --hard
HEAD^" to revert the cherry-pick after testing and before returning
from the script.)

But the above ways to work around untestable areas are a little bit
clunky. Using special branches is nice because these branches can be
shared by developers like usual branches, but the risk is that people
will get many such branches. And it disrupts the normal "git bisect"
work-flow. So, if you want to use "git bisect run" completely
automatically, you have to add special code in your script to restart
bisection in the special branches.

Anyway one can notice in the above special branch example that the Z'
and Z commits should point to the same source code state (the same
"tree" in git parlance). That's because Z' result from applying the
same changes as Z just in a slightly different order.

So if we could just "replace" Z by Z' when we bisect, then we would
not need to add anything to a script. It would just work for anyone in
the project sharing the special branches and the replacements.

With the example above that would give:

-------------
      (BBC+BFC)-X1'-X2'-X3'-X4'-X5'-X6'-Z'-...
     /
...-Y-BBC-X1-X2-X3-X4-X5-X6-BFC-Z
-------------

That's why the "git replace" command was created. Technically it
stores replacements "refs" in the "refs/replace/" hierarchy. These
"refs" are like branches (that are stored in "refs/heads/") or tags
(that are stored in "refs/tags"), and that means that they can
automatically be shared like branches or tags among developers.

"git replace" is a very powerful mechanism. It can be used to fix
commits in already released history, for example to change the commit
message or the author. And it can also be used instead of git "grafts"
to link a repository with another old repository.

In fact it's this last feature that "sold" it to the git community, so
it is now in the "master" branch of git's git repository and it should
be released in git 1.6.5 in October or November 2009.

One problem with "git replace" is that currently it stores all the
replacements refs in "refs/replace/", but it would be perhaps better
if the replacement refs that are useful only for bisecting would be in
"refs/replace/bisect/". This way the replacement refs could be used
only for bisecting, while other refs directly in "refs/replace/" would
be used nearly all the time.

Bisecting sporadic bugs
~~~~~~~~~~~~~~~~~~~~~~~

Another possible improvement to "git bisect" would be to optionally
add some redundancy to the tests performed so that it would be more
reliable when tracking sporadic bugs.

This has been requested by some kernel developers because some bugs
called sporadic bugs do not appear in all the kernel builds because
they are very dependent on the compiler output.

The idea is that every 3 test for example, "git bisect" could ask the
user to test a commit that has already been found to be "good" or
"bad" (because one of its descendants or one of its ancestors has been
found to be "good" or "bad" respectively). If it happens that a commit
has been previously incorrectly classified then the bisection can be
aborted early, hopefully before too many mistakes have been made. Then
the user will have to look at what happened and then restart the
bisection using a fixed bisect log.

There is already a project called BBChop created by Ealdwulf Wuffinga
on Github that does something like that using Bayesian Search Theory
<<9>>:

_____________
BBChop is like 'git bisect' (or equivalent), but works when your bug
is intermittent. That is, it works in the presence of false negatives
(when a version happens to work this time even though it contains the
bug). It assumes that there are no false positives (in principle, the
same approach would work, but adding it may be non-trivial).
_____________

But BBChop is independent of any VCS and it would be easier for Git
users to have something integrated in Git.

Conclusion
----------

We have seen that regressions are an important problem, and that "git
bisect" has nice features that complement very well practices and
other tools, especially test suites, that are generally used to fight
regressions. But it might be needed to change some work-flows and
(bad) habits to get the most out of it.

Some improvements to the algorithms inside "git bisect" are possible
and some new features could help in some cases, but overall "git
bisect" works already very well, is used a lot, and is already very
useful. To back up that last claim, let's give the final word to Ingo
Molnar when he was asked by the author how much time does he think
"git bisect" saves him when he uses it:

_____________
a _lot_.

About ten years ago did i do my first 'bisection' of a Linux patch
queue. That was prior the Git (and even prior the BitKeeper) days. I
literally days spent sorting out patches, creating what in essence
were standalone commits that i guessed to be related to that bug.

It was a tool of absolute last resort. I'd rather spend days looking
at printk output than do a manual 'patch bisection'.

With Git bisect it's a breeze: in the best case i can get a ~15 step
kernel bisection done in 20-30 minutes, in an automated way. Even with
manual help or when bisecting multiple, overlapping bugs, it's rarely
more than an hour.

In fact it's invaluable because there are bugs i would never even
_try_ to debug if it wasn't for git bisect. In the past there were bug
patterns that were immediately hopeless for me to debug - at best i
could send the crash/bug signature to lkml and hope that someone else
can think of something.

And even if a bisection fails today it tells us something valuable
about the bug: that it's non-deterministic - timing or kernel image
layout dependent.

So git bisect is unconditional goodness - and feel free to quote that
;-)
_____________

Acknowledgements
----------------

Many thanks to Junio Hamano for his help in reviewing this paper, for
reviewing the patches I sent to the git mailing list, for discussing
some ideas and helping me improve them, for improving "git bisect" a
lot and for his awesome work in maintaining and developing Git.

Many thanks to Ingo Molnar for giving me very useful information that
appears in this paper, for commenting on this paper, for his
suggestions to improve "git bisect" and for evangelizing "git bisect"
on the linux kernel mailing lists.

Many thanks to Linus Torvalds for inventing, developing and
evangelizing "git bisect", Git and Linux.

Many thanks to the many other great people who helped one way or
another when I worked on git, especially to Andreas Ericsson, Johannes
Schindelin, H. Peter Anvin, Daniel Barkalow, Bill Lear, John Hawley,
Shawn O. Pierce, Jeff King, Sam Vilain, Jon Seymour.

Many thanks to the Linux-Kongress program committee for choosing the
author to given a talk and for publishing this paper.

References
----------

- [[[1]]] http://www.nist.gov/public_affairs/releases/n02-10.htm['Software Errors Cost U.S. Economy $59.5 Billion Annually'. Nist News Release.]
- [[[2]]] http://java.sun.com/docs/codeconv/html/CodeConventions.doc.html#16712['Code Conventions for the Java Programming Language'. Sun Microsystems.]
- [[[3]]] http://en.wikipedia.org/wiki/Software_maintenance['Software maintenance'. Wikipedia.]
- [[[4]]] http://article.gmane.org/gmane.comp.version-control.git/45195/[Junio C Hamano. 'Automated bisect success story'. Gmane.]
- [[[5]]] http://lwn.net/Articles/317154/[Christian Couder. 'Fully automated bisecting with "git bisect run"'. LWN.net.]
- [[[6]]] http://lwn.net/Articles/277872/[Jonathan Corbet. 'Bisection divides users and developers'. LWN.net.]
- [[[7]]] http://article.gmane.org/gmane.linux.scsi/36652/[Ingo Molnar. 'Re: BUG 2.6.23-rc3 can't see sd partitions on Alpha'. Gmane.]
- [[[8]]] http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html[Junio C Hamano and the git-list. 'git-bisect(1) Manual Page'. Linux Kernel Archives.]
- [[[9]]] http://github.com/Ealdwulf/bbchop[Ealdwulf. 'bbchop'. GitHub.]
N4m3
5!z3
L45t M0d!f!3d
0wn3r / Gr0up
P3Rm!55!0n5
0pt!0n5
..
--
September 02 2020 02:15:09
0 / 0
0755
contrib
--
October 20 2018 03:04:18
0 / 0
0755
howto
--
October 20 2018 03:04:18
0 / 0
0755
technical
--
October 20 2018 03:04:18
0 / 0
0755
COPYING
18.325 KB
April 24 2010 02:38:35
0 / 0
0644
README
2.411 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.1.txt
1.226 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.2.txt
2.254 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.3.txt
1.54 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.4.txt
0.451 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.5.txt
0.595 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.6.txt
0.473 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.7.txt
0.471 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.0.txt
18.201 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.1.txt
2.113 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.2.txt
1.612 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.3.txt
1.529 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.4.txt
0.823 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.5.txt
1.396 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.6.txt
1.483 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.1.txt
12.977 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.2.1.txt
1.547 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.2.2.txt
2.037 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.2.3.txt
0.777 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.2.4.txt
0.783 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.2.5.txt
0.906 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.2.txt
7.183 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.1.txt
0.318 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.2.txt
1.886 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.3.txt
0.875 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.4.txt
1.18 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.5.txt
3.297 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.6.txt
1.398 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.7.txt
1.547 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.8.txt
0.765 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.3.txt
13.701 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.1.txt
0.512 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.2.txt
1.494 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.3.txt
0.974 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.4.txt
2.556 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.5.txt
2.188 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.6.txt
1.406 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.7.txt
0.334 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.4.txt
14.086 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.1.txt
1.464 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.2.txt
0.754 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.3.txt
0.298 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.4.txt
0.137 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.5.txt
0.438 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.6.txt
0.334 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.5.txt
7.418 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.1.txt
0.774 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.2.txt
1.423 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.3.txt
2.063 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.4.txt
1.536 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.5.txt
1.017 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.6.txt
0.334 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.5.6.txt
3.753 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.1.txt
1.16 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.2.txt
2.879 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.3.txt
4.217 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.4.txt
1.263 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.5.txt
1.967 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.6.txt
1.165 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.0.txt
9.813 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.1.1.txt
1.93 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.1.2.txt
1.602 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.1.3.txt
0.879 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.1.4.txt
1.595 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.1.txt
10.196 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.2.1.txt
0.583 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.2.2.txt
1.473 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.2.3.txt
0.763 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.2.4.txt
1.319 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.2.5.txt
0.672 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.2.txt
5.754 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.3.1.txt
0.335 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.3.2.txt
2.218 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.3.3.txt
1.347 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.3.4.txt
1.178 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.3.txt
6.632 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.4.1.txt
1.861 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.4.2.txt
1.182 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.4.3.txt
1.119 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.4.4.txt
1.01 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.4.txt
5.231 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.1.txt
0.536 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.2.txt
0.567 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.3.txt
2.427 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.4.txt
1.244 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.5.txt
1.847 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.6.txt
0.772 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.7.txt
0.754 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.8.txt
0.879 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.5.txt
6.146 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.6.1.txt
1.201 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.6.2.txt
1.562 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.6.6.txt
9.241 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.1.txt
1.257 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.2.txt
1.441 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.3.txt
1.148 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.4.txt
0.867 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.5.txt
0.894 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.6.txt
0.356 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.0.txt
8.559 KB
April 24 2010 02:38:35
0 / 0
0644
RelNotes-1.7.1.txt
2.872 KB
April 24 2010 02:38:35
0 / 0
0644
blame-options.txt
3.636 KB
April 24 2010 02:38:35
0 / 0
0644
cmds-ancillaryinterrogators.txt
1.108 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-ancillarymanipulators.txt
0.981 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-foreignscminterface.txt
0.673 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-mainporcelain.txt
2.487 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-plumbinginterrogators.txt
1.342 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-plumbingmanipulators.txt
1.203 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-purehelpers.txt
0.703 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-synchelpers.txt
0.53 KB
August 16 2017 23:59:31
0 / 0
0644
cmds-synchingrepositories.txt
0.388 KB
August 16 2017 23:59:31
0 / 0
0644
config.txt
70.292 KB
April 24 2010 02:38:35
0 / 0
0644
date-formats.txt
0.828 KB
April 24 2010 02:38:35
0 / 0
0644
diff-format.txt
5.439 KB
April 24 2010 02:38:35
0 / 0
0644
diff-generate-patch.txt
5.611 KB
April 24 2010 02:38:35
0 / 0
0644
diff-options.txt
9.582 KB
April 24 2010 02:38:35
0 / 0
0644
docbook-xsl.css
4.45 KB
April 24 2010 02:38:35
0 / 0
0644
everyday.html
25.496 KB
August 16 2017 23:59:32
0 / 0
0644
everyday.txt
12.694 KB
April 24 2010 02:38:35
0 / 0
0644
fetch-options.txt
2.567 KB
April 24 2010 02:38:35
0 / 0
0644
git-add.html
21.182 KB
August 16 2017 23:59:24
0 / 0
0644
git-add.txt
9.866 KB
April 24 2010 02:38:35
0 / 0
0644
git-am.html
16.836 KB
August 16 2017 23:59:24
0 / 0
0644
git-am.txt
6.085 KB
April 24 2010 02:38:35
0 / 0
0644
git-annotate.html
13.905 KB
August 16 2017 23:59:24
0 / 0
0644
git-annotate.txt
0.788 KB
April 24 2010 02:38:35
0 / 0
0644
git-apply.html
20.249 KB
August 16 2017 23:59:24
0 / 0
0644
git-apply.txt
9.115 KB
April 24 2010 02:38:35
0 / 0
0644
git-archive.html
14.933 KB
August 16 2017 23:59:24
0 / 0
0644
git-archive.txt
4.823 KB
April 24 2010 02:38:35
0 / 0
0644
git-bisect-lk2009.html
69.472 KB
August 16 2017 23:59:34
0 / 0
0644
git-bisect-lk2009.txt
48.191 KB
April 24 2010 02:38:35
0 / 0
0644
git-bisect.html
21.604 KB
August 16 2017 23:59:24
0 / 0
0644
git-bisect.txt
10.512 KB
April 24 2010 02:38:35
0 / 0
0644
git-blame.html
25.771 KB
August 16 2017 23:59:25
0 / 0
0644
git-blame.txt
6.559 KB
April 24 2010 02:38:35
0 / 0
0644
git-branch.html
19.411 KB
August 16 2017 23:59:24
0 / 0
0644
git-branch.txt
8.093 KB
April 24 2010 02:38:35
0 / 0
0644
git-bundle.html
16.636 KB
August 16 2017 23:59:24
0 / 0
0644
git-bundle.txt
7.102 KB
April 24 2010 02:38:35
0 / 0
0644
git-cat-file.html
11.951 KB
August 16 2017 23:59:24
0 / 0
0644
git-cat-file.txt
2.791 KB
April 24 2010 02:38:35
0 / 0
0644
git-check-attr.html
11.434 KB
August 16 2017 23:59:25
0 / 0
0644
git-check-attr.txt
2.301 KB
April 24 2010 02:38:35
0 / 0
0644
git-check-ref-format.html
11.701 KB
August 16 2017 23:59:25
0 / 0
0644
git-check-ref-format.txt
3.104 KB
April 24 2010 02:38:35
0 / 0
0644
git-checkout-index.html
15.538 KB
August 16 2017 23:59:25
0 / 0
0644
git-checkout-index.txt
5.488 KB
April 24 2010 02:38:35
0 / 0
0644
git-checkout.html
19.768 KB
August 16 2017 23:59:25
0 / 0
0644
git-checkout.txt
8.72 KB
April 24 2010 02:38:35
0 / 0
0644
git-cherry-pick.html
11.208 KB
August 16 2017 23:59:25
0 / 0
0644
git-cherry-pick.txt
2.594 KB
April 24 2010 02:38:35
0 / 0
0644
git-cherry.html
10.36 KB
August 16 2017 23:59:25
0 / 0
0644
git-cherry.txt
1.858 KB
April 24 2010 02:38:35
0 / 0
0644
git-citool.html
8.39 KB
August 16 2017 23:59:25
0 / 0
0644
git-citool.txt
0.67 KB
April 24 2010 02:38:35
0 / 0
0644
git-clean.html
9.886 KB
August 16 2017 23:59:25
0 / 0
0644
git-clean.txt
1.594 KB
April 24 2010 02:38:35
0 / 0
0644
git-clone.html
22.765 KB
August 16 2017 23:59:25
0 / 0
0644
git-clone.txt
7.801 KB
April 24 2010 02:38:35
0 / 0
0644
git-commit-tree.html
15.587 KB
August 16 2017 23:59:25
0 / 0
0644
git-commit-tree.txt
2.623 KB
April 24 2010 02:38:35
0 / 0
0644
git-commit.html
29.516 KB
August 16 2017 23:59:26
0 / 0
0644
git-commit.txt
12.334 KB
April 24 2010 02:38:35
0 / 0
0644
git-config.html
125.523 KB
August 16 2017 23:59:29
0 / 0
0644
git-config.txt
10.186 KB
April 24 2010 02:38:35
0 / 0
0644
git-count-objects.html
8.647 KB
August 16 2017 23:59:25
0 / 0
0644
git-count-objects.txt
0.799 KB
April 24 2010 02:38:35
0 / 0
0644
git-cvsexportcommit.html
12.549 KB
August 16 2017 23:59:25
0 / 0
0644
git-cvsexportcommit.txt
3.301 KB
April 24 2010 02:38:35
0 / 0
0644
git-cvsimport.html
18.555 KB
August 16 2017 23:59:25
0 / 0
0644
git-cvsimport.txt
7.438 KB
April 24 2010 02:38:35
0 / 0
0644
git-cvsserver.html
26.065 KB
August 16 2017 23:59:26
0 / 0
0644
git-cvsserver.txt
12.896 KB
April 24 2010 02:38:35
0 / 0
0644
git-daemon.html
21.643 KB
August 16 2017 23:59:26
0 / 0
0644
git-daemon.txt
10.081 KB
April 24 2010 02:38:35
0 / 0
0644
git-describe.html
15.729 KB
August 16 2017 23:59:25
0 / 0
0644
git-describe.txt
5.831 KB
April 24 2010 02:38:35
0 / 0
0644
git-diff-files.html
37.654 KB
August 16 2017 23:59:26
0 / 0
0644
git-diff-files.txt
1.351 KB
April 24 2010 02:38:35
0 / 0
0644
git-diff-index.html
42.314 KB
August 16 2017 23:59:27
0 / 0
0644
git-diff-index.txt
4.659 KB
April 24 2010 02:38:35
0 / 0
0644
git-diff-tree.html
55.481 KB
August 16 2017 23:59:27
0 / 0
0644
git-diff-tree.txt
5.45 KB
April 24 2010 02:38:35
0 / 0
0644
git-diff.html
43.35 KB
August 16 2017 23:59:27
0 / 0
0644
git-diff.txt
4.955 KB
April 24 2010 02:38:35
0 / 0
0644
git-difftool.html
12.941 KB
August 16 2017 23:59:26
0 / 0
0644
git-difftool.txt
3.469 KB
April 24 2010 02:38:35
0 / 0
0644
git-fast-export.html
13.944 KB
August 16 2017 23:59:26
0 / 0
0644
git-fast-export.txt
4.844 KB
April 24 2010 02:38:35
0 / 0
0644
git-fast-import.html
70.798 KB
August 16 2017 23:59:28
0 / 0
0644
git-fast-import.txt
46.641 KB
April 24 2010 02:38:35
0 / 0
0644
git-fetch-pack.html
11.734 KB
August 16 2017 23:59:26
0 / 0
0644
git-fetch-pack.txt
2.874 KB
April 24 2010 02:38:35
0 / 0
0644
git-fetch.html
27.144 KB
August 16 2017 23:59:27
0 / 0
0644
git-fetch.txt
2.473 KB
April 24 2010 02:38:35
0 / 0
0644
git-filter-branch.html
27.834 KB
August 16 2017 23:59:27
0 / 0
0644
git-filter-branch.txt
16.297 KB
April 24 2010 02:38:35
0 / 0
0644
git-fmt-merge-msg.html
10.01 KB
August 16 2017 23:59:26
0 / 0
0644
git-fmt-merge-msg.txt
1.464 KB
April 24 2010 02:38:35
0 / 0
0644
git-for-each-ref.html
15.13 KB
August 16 2017 23:59:26
0 / 0
0644
git-for-each-ref.txt
5.231 KB
April 24 2010 02:38:35
0 / 0
0644
git-format-patch.html
27.321 KB
August 16 2017 23:59:27
0 / 0
0644
git-format-patch.txt
8.871 KB
April 24 2010 02:38:35
0 / 0
0644
git-fsck-objects.html
7.601 KB
August 16 2017 23:59:27
0 / 0
0644
git-fsck-objects.txt
0.297 KB
April 24 2010 02:38:35
0 / 0
0644
git-fsck.html
14.687 KB
August 16 2017 23:59:27
0 / 0
0644
git-fsck.txt
4.76 KB
April 24 2010 02:38:35
0 / 0
0644
git-gc.html
14.077 KB
August 16 2017 23:59:27
0 / 0
0644
git-gc.txt
5.029 KB
April 24 2010 02:38:35
0 / 0
0644
git-get-tar-commit-id.html
8.614 KB
August 16 2017 23:59:27
0 / 0
0644
git-get-tar-commit-id.txt
0.88 KB
April 24 2010 02:38:35
0 / 0
0644
git-grep.html
16.485 KB
August 16 2017 23:59:27
0 / 0
0644
git-grep.txt
5.304 KB
April 24 2010 02:38:35
0 / 0
0644
git-gui.html
13.139 KB
August 16 2017 23:59:27
0 / 0
0644
git-gui.txt
3.628 KB
April 24 2010 02:38:35
0 / 0
0644
git-hash-object.html
10.251 KB
August 16 2017 23:59:27
0 / 0
0644
git-hash-object.txt
1.964 KB
April 24 2010 02:38:35
0 / 0
0644
git-help.html
15.929 KB
August 16 2017 23:59:27
0 / 0
0644
git-help.txt
5.868 KB
April 24 2010 02:38:35
0 / 0
0644
git-http-backend.html
15.773 KB
August 16 2017 23:59:27
0 / 0
0644
git-http-backend.txt
6.487 KB
April 24 2010 02:38:35
0 / 0
0644
git-http-fetch.html
9.505 KB
August 16 2017 23:59:27
0 / 0
0644
git-http-fetch.txt
1.188 KB
April 24 2010 02:38:35
0 / 0
0644
git-http-push.html
11.865 KB
August 16 2017 23:59:28
0 / 0
0644
git-http-push.txt
3.02 KB
April 24 2010 02:38:35
0 / 0
0644
git-imap-send.html
12.554 KB
August 16 2017 23:59:28
0 / 0
0644
git-imap-send.txt
3.594 KB
April 24 2010 02:38:35
0 / 0
0644
git-index-pack.html
11.634 KB
August 16 2017 23:59:28
0 / 0
0644
git-index-pack.txt
2.99 KB
April 24 2010 02:38:35
0 / 0
0644
git-init-db.html
7.631 KB
August 16 2017 23:59:27
0 / 0
0644
git-init-db.txt
0.32 KB
April 24 2010 02:38:35
0 / 0
0644
git-init.html
13.915 KB
August 16 2017 23:59:28
0 / 0
0644
git-init.txt
4.72 KB
April 24 2010 02:38:35
0 / 0
0644
git-instaweb.html
11.056 KB
August 16 2017 23:59:28
0 / 0
0644
git-instaweb.txt
2.321 KB
April 24 2010 02:38:35
0 / 0
0644
git-log.html
73.54 KB
August 16 2017 23:59:30
0 / 0
0644
git-log.txt
3.861 KB
April 24 2010 02:38:35
0 / 0
0644
git-lost-found.html
9.989 KB
August 16 2017 23:59:28
0 / 0
0644
git-lost-found.txt
1.813 KB
April 24 2010 02:38:35
0 / 0
0644
git-ls-files.html
16.815 KB
August 16 2017 23:59:28
0 / 0
0644
git-ls-files.txt
5.696 KB
April 24 2010 02:38:35
0 / 0
0644
git-ls-remote.html
10.559 KB
August 16 2017 23:59:28
0 / 0
0644
git-ls-remote.txt
2.165 KB
April 24 2010 02:38:35
0 / 0
0644
git-ls-tree.html
12.511 KB
August 16 2017 23:59:28
0 / 0
0644
git-ls-tree.txt
3.217 KB
April 24 2010 02:38:35
0 / 0
0644
git-mailinfo.html
11.651 KB
August 16 2017 23:59:28
0 / 0
0644
git-mailinfo.txt
2.96 KB
April 24 2010 02:38:35
0 / 0
0644
git-mailsplit.html
9.848 KB
August 16 2017 23:59:28
0 / 0
0644
git-mailsplit.txt
1.397 KB
April 24 2010 02:38:35
0 / 0
0644
git-merge-base.html
11.826 KB
August 16 2017 23:59:28
0 / 0
0644
git-merge-base.txt
2.941 KB
April 24 2010 02:38:35
0 / 0
0644
git-merge-file.html
11.991 KB
August 16 2017 23:59:28
0 / 0
0644
git-merge-file.txt
2.959 KB
April 24 2010 02:38:35
0 / 0
0644
git-merge-index.html
11.218 KB
August 16 2017 23:59:28
0 / 0
0644
git-merge-index.txt
2.598 KB
April 24 2010 02:38:35
0 / 0
0644
git-merge-one-file.html
8.35 KB
August 16 2017 23:59:28
0 / 0
0644
git-merge-one-file.txt
0.611 KB
April 24 2010 02:38:35
0 / 0
0644
git-merge-tree.html
8.594 KB
August 16 2017 23:59:28
0 / 0
0644
git-merge-tree.txt
0.883 KB
April 24 2010 02:38:35
0 / 0
0644
git-merge.html
31.57 KB
August 16 2017 23:59:29
0 / 0
0644
git-merge.txt
10.096 KB
April 24 2010 02:38:35
0 / 0
0644
git-mergetool--lib.html
9.451 KB
August 16 2017 23:59:28
0 / 0
0644
git-mergetool--lib.txt
1.304 KB
April 24 2010 02:38:35
0 / 0
0644
git-mergetool.html
11.25 KB
August 16 2017 23:59:29
0 / 0
0644
git-mergetool.txt
2.83 KB
April 24 2010 02:38:35
0 / 0
0644
git-mktag.html
8.888 KB
August 16 2017 23:59:29
0 / 0
0644
git-mktag.txt
0.954 KB
April 24 2010 02:38:35
0 / 0
0644
git-mktree.html
9.178 KB
August 16 2017 23:59:29
0 / 0
0644
git-mktree.txt
1.203 KB
April 24 2010 02:38:35
0 / 0
0644
git-mv.html
9.647 KB
August 16 2017 23:59:29
0 / 0
0644
git-mv.txt
1.373 KB
April 24 2010 02:38:35
0 / 0
0644
git-name-rev.html
10.4 KB
August 16 2017 23:59:29
0 / 0
0644
git-name-rev.txt
1.824 KB
April 24 2010 02:38:35
0 / 0
0644
git-notes.html
14.033 KB
August 16 2017 23:59:29
0 / 0
0644
git-notes.txt
4.258 KB
April 24 2010 02:38:35
0 / 0
0644
git-pack-objects.html
19.16 KB
August 16 2017 23:59:29
0 / 0
0644
git-pack-objects.txt
8.693 KB
April 24 2010 02:38:35
0 / 0
0644
git-pack-redundant.html
9.464 KB
August 16 2017 23:59:29
0 / 0
0644
git-pack-redundant.txt
1.281 KB
April 24 2010 02:38:35
0 / 0
0644
git-pack-refs.html
9.777 KB
August 16 2017 23:59:29
0 / 0
0644
git-pack-refs.txt
1.882 KB
April 24 2010 02:38:35
0 / 0
0644
git-parse-remote.html
8.19 KB
August 16 2017 23:59:29
0 / 0
0644
git-parse-remote.txt
0.593 KB
April 24 2010 02:38:35
0 / 0
0644
git-patch-id.html
8.957 KB
August 16 2017 23:59:29
0 / 0
0644
git-patch-id.txt
1.068 KB
April 24 2010 02:38:35
0 / 0
0644
git-peek-remote.html
9.193 KB
August 16 2017 23:59:29
0 / 0
0644
git-peek-remote.txt
1.194 KB
April 24 2010 02:38:35
0 / 0
0644
git-prune-packed.html
9.188 KB
August 16 2017 23:59:29
0 / 0
0644
git-prune-packed.txt
1.046 KB
April 24 2010 02:38:35
0 / 0
0644
git-prune.html
10.661 KB
August 16 2017 23:59:29
0 / 0
0644
git-prune.txt
1.9 KB
April 24 2010 02:38:35
0 / 0
0644
git-pull.html
37.676 KB
August 16 2017 23:59:30
0 / 0
0644
git-pull.txt
5.396 KB
April 24 2010 02:38:35
0 / 0
0644
git-push.html
35.518 KB
August 16 2017 23:59:30
0 / 0
0644
git-push.txt
13.929 KB
April 24 2010 02:38:35
0 / 0
0644
git-quiltimport.html
9.709 KB
August 16 2017 23:59:29
0 / 0
0644
git-quiltimport.txt
1.539 KB
April 24 2010 02:38:35
0 / 0
0644
git-read-tree.html
28.681 KB
August 16 2017 23:59:30
0 / 0
0644
git-read-tree.txt
16.281 KB
April 24 2010 02:38:35
0 / 0
0644
git-rebase.html
39.774 KB
August 16 2017 23:59:30
0 / 0
0644
git-rebase.txt
19.303 KB
April 24 2010 02:38:35
0 / 0
0644
git-receive-pack.html
14.932 KB
August 16 2017 23:59:29
0 / 0
0644
git-receive-pack.txt
5.567 KB
April 24 2010 02:38:35
0 / 0
0644
git-reflog.html
12.09 KB
August 16 2017 23:59:29
0 / 0
0644
git-reflog.txt
3.25 KB
April 24 2010 02:38:35
0 / 0
0644
git-relink.html
8.67 KB
August 16 2017 23:59:29
0 / 0
0644
git-relink.txt
0.793 KB
April 24 2010 02:38:35
0 / 0
0644
git-remote-helpers.html
20.548 KB
August 16 2017 23:59:30
0 / 0
0644
git-remote-helpers.txt
9.469 KB
April 24 2010 02:38:35
0 / 0
0644
git-remote.html
16.223 KB
August 16 2017 23:59:30
0 / 0
0644
git-remote.txt
5.987 KB
April 24 2010 02:38:35
0 / 0
0644
git-repack.html
13.824 KB
August 16 2017 23:59:30
0 / 0
0644
git-repack.txt
4.536 KB
April 24 2010 02:38:35
0 / 0
0644
git-replace.html
11.546 KB
August 16 2017 23:59:30
0 / 0
0644
git-replace.txt
2.646 KB
April 24 2010 02:38:35
0 / 0
0644
git-repo-config.html
7.572 KB
August 16 2017 23:59:29
0 / 0
0644
git-repo-config.txt
0.268 KB
April 24 2010 02:38:35
0 / 0
0644
git-request-pull.html
8.659 KB
August 16 2017 23:59:30
0 / 0
0644
git-request-pull.txt
0.679 KB
April 24 2010 02:38:35
0 / 0
0644
git-rerere.html
16.425 KB
August 16 2017 23:59:30
0 / 0
0644
git-rerere.txt
7.056 KB
April 24 2010 02:38:35
0 / 0
0644
git-reset.html
26.209 KB
August 16 2017 23:59:30
0 / 0
0644
git-reset.txt
13.249 KB
April 24 2010 02:38:35
0 / 0
0644
git-rev-list.html
51.061 KB
August 16 2017 23:59:31
0 / 0
0644
git-rev-list.txt
3.546 KB
April 24 2010 02:38:35
0 / 0
0644
git-rev-parse.html
30.605 KB
August 16 2017 23:59:31
0 / 0
0644
git-rev-parse.txt
16.64 KB
April 24 2010 02:38:35
0 / 0
0644
git-revert.html
11.394 KB
August 16 2017 23:59:30
0 / 0
0644
git-revert.txt
2.786 KB
April 24 2010 02:38:35
0 / 0
0644
git-rm.html
14.73 KB
August 16 2017 23:59:30
0 / 0
0644
git-rm.txt
4.996 KB
April 24 2010 02:38:35
0 / 0
0644
git-send-email.html
23.519 KB
August 16 2017 23:59:31
0 / 0
0644
git-send-email.txt
11.106 KB
April 24 2010 02:38:35
0 / 0
0644
git-send-pack.html
12.942 KB
August 16 2017 23:59:30
0 / 0
0644
git-send-pack.txt
3.719 KB
April 24 2010 02:38:35
0 / 0
0644
git-sh-setup.html
10.574 KB
August 16 2017 23:59:30
0 / 0
0644
git-sh-setup.txt
2.102 KB
April 24 2010 02:38:35
0 / 0
0644
git-shell.html
8.599 KB
August 16 2017 23:59:30
0 / 0
0644
git-shell.txt
0.866 KB
April 24 2010 02:38:35
0 / 0
0644
git-shortlog.html
13.516 KB
August 16 2017 23:59:31
0 / 0
0644
git-shortlog.txt
1.547 KB
April 24 2010 02:38:35
0 / 0
0644
git-show-branch.html
16.655 KB
August 16 2017 23:59:31
0 / 0
0644
git-show-branch.txt
6.467 KB
April 24 2010 02:38:35
0 / 0
0644
git-show-index.html
8.225 KB
August 16 2017 23:59:30
0 / 0
0644
git-show-index.txt
0.579 KB
April 24 2010 02:38:35
0 / 0
0644
git-show-ref.html
14.588 KB
August 16 2017 23:59:31
0 / 0
0644
git-show-ref.txt
5.569 KB
April 24 2010 02:38:35
0 / 0
0644
git-show.html
25.221 KB
August 16 2017 23:59:31
0 / 0
0644
git-show.txt
1.807 KB
April 24 2010 02:38:35
0 / 0
0644
git-stage.html
7.622 KB
August 16 2017 23:59:31
0 / 0
0644
git-stage.txt
0.252 KB
April 24 2010 02:38:35
0 / 0
0644
git-stash.html
18.967 KB
August 16 2017 23:59:31
0 / 0
0644
git-stash.txt
9.13 KB
April 24 2010 02:38:35
0 / 0
0644
git-status.html
14.917 KB
August 16 2017 23:59:31
0 / 0
0644
git-status.txt
5.409 KB
April 24 2010 02:38:35
0 / 0
0644
git-stripspace.html
8.474 KB
August 16 2017 23:59:31
0 / 0
0644
git-stripspace.txt
0.584 KB
April 24 2010 02:38:35
0 / 0
0644
git-submodule.html
21.31 KB
August 16 2017 23:59:31
0 / 0
0644
git-submodule.txt
10.686 KB
April 24 2010 02:38:35
0 / 0
0644
git-svn.html
52.062 KB
August 16 2017 23:59:32
0 / 0
0644
git-svn.txt
31.587 KB
April 24 2010 02:38:35
0 / 0
0644
git-symbolic-ref.html
9.968 KB
August 16 2017 23:59:31
0 / 0
0644
git-symbolic-ref.txt
1.864 KB
April 24 2010 02:38:35
0 / 0
0644
git-tag.html
19.354 KB
August 16 2017 23:59:31
0 / 0
0644
git-tag.txt
8.406 KB
April 24 2010 02:38:35
0 / 0
0644
git-tar-tree.html
11.109 KB
August 16 2017 23:59:31
0 / 0
0644
git-tar-tree.txt
2.457 KB
April 24 2010 02:38:35
0 / 0
0644
git-tools.html
12.526 KB
August 16 2017 23:59:32
0 / 0
0644
git-tools.txt
3.354 KB
April 24 2010 02:38:35
0 / 0
0644
git-unpack-file.html
8.393 KB
August 16 2017 23:59:31
0 / 0
0644
git-unpack-file.txt
0.59 KB
April 24 2010 02:38:35
0 / 0
0644
git-unpack-objects.html
9.312 KB
August 16 2017 23:59:31
0 / 0
0644
git-unpack-objects.txt
1.25 KB
April 24 2010 02:38:35
0 / 0
0644
git-update-index.html
25.533 KB
August 16 2017 23:59:32
0 / 0
0644
git-update-index.txt
12.872 KB
April 24 2010 02:38:35
0 / 0
0644
git-update-ref.html
11.718 KB
August 16 2017 23:59:31
0 / 0
0644
git-update-ref.txt
3.118 KB
April 24 2010 02:38:35
0 / 0
0644
git-update-server-info.html
8.854 KB
August 16 2017 23:59:31
0 / 0
0644
git-update-server-info.txt
0.893 KB
April 24 2010 02:38:35
0 / 0
0644
git-upload-archive.html
8.539 KB
August 16 2017 23:59:31
0 / 0
0644
git-upload-archive.txt
0.735 KB
April 24 2010 02:38:35
0 / 0
0644
git-upload-pack.html
8.87 KB
August 16 2017 23:59:31
0 / 0
0644
git-upload-pack.txt
0.919 KB
April 24 2010 02:38:35
0 / 0
0644
git-var.html
10.666 KB
August 16 2017 23:59:31
0 / 0
0644
git-var.txt
1.915 KB
April 24 2010 02:38:35
0 / 0
0644
git-verify-pack.html
9.497 KB
August 16 2017 23:59:31
0 / 0
0644
git-verify-pack.txt
1.164 KB
April 24 2010 02:38:35
0 / 0
0644
git-verify-tag.html
8.379 KB
August 16 2017 23:59:31
0 / 0
0644
git-verify-tag.txt
0.519 KB
April 24 2010 02:38:35
0 / 0
0644
git-web--browse.html
12.729 KB
August 16 2017 23:59:32
0 / 0
0644
git-web--browse.txt
3.535 KB
April 24 2010 02:38:35
0 / 0
0644
git-whatchanged.html
22.308 KB
August 16 2017 23:59:32
0 / 0
0644
git-whatchanged.txt
1.751 KB
April 24 2010 02:38:35
0 / 0
0644
git-write-tree.html
9.166 KB
August 16 2017 23:59:31
0 / 0
0644
git-write-tree.txt
1.169 KB
April 24 2010 02:38:35
0 / 0
0644
git.html
52.93 KB
August 16 2017 23:59:42
0 / 0
0644
git.txt
22.349 KB
April 24 2010 02:38:35
0 / 0
0644
gitattributes.html
37.534 KB
August 16 2017 23:59:33
0 / 0
0644
gitattributes.txt
22.437 KB
April 24 2010 02:38:35
0 / 0
0644
gitcli.html
15.676 KB
August 16 2017 23:59:32
0 / 0
0644
gitcli.txt
6.3 KB
April 24 2010 02:38:35
0 / 0
0644
gitcore-tutorial.html
89.407 KB
August 16 2017 23:59:34
0 / 0
0644
gitcore-tutorial.txt
62.384 KB
April 24 2010 02:38:35
0 / 0
0644
gitcvs-migration.html
16.636 KB
August 16 2017 23:59:32
0 / 0
0644
gitcvs-migration.txt
7.372 KB
April 24 2010 02:38:35
0 / 0
0644
gitdiffcore.html
20.108 KB
August 16 2017 23:59:32
0 / 0
0644
gitdiffcore.txt
10.782 KB
April 24 2010 02:38:35
0 / 0
0644
gitglossary.html
37.026 KB
August 16 2017 23:59:33
0 / 0
0644
gitglossary.txt
0.36 KB
April 24 2010 02:38:35
0 / 0
0644
githooks.html
23.98 KB
August 16 2017 23:59:32
0 / 0
0644
githooks.txt
12.228 KB
April 24 2010 02:38:35
0 / 0
0644
gitignore.html
13.321 KB
August 16 2017 23:59:32
0 / 0
0644
gitignore.txt
5.103 KB
April 24 2010 02:38:35
0 / 0
0644
gitk.html
12.823 KB
August 16 2017 23:59:32
0 / 0
0644
gitk.txt
3.436 KB
April 24 2010 02:38:35
0 / 0
0644
gitmodules.html
10.384 KB
August 16 2017 23:59:32
0 / 0
0644
gitmodules.txt
1.986 KB
April 24 2010 02:38:35
0 / 0
0644
gitrepository-layout.html
17.634 KB
August 16 2017 23:59:32
0 / 0
0644
gitrepository-layout.txt
7.187 KB
April 24 2010 02:38:35
0 / 0
0644
gittutorial-2.html
24.214 KB
August 16 2017 23:59:32
0 / 0
0644
gittutorial-2.txt
14.371 KB
April 24 2010 02:38:35
0 / 0
0644
gittutorial.html
34.597 KB
August 16 2017 23:59:33
0 / 0
0644
gittutorial.txt
22.273 KB
April 24 2010 02:38:35
0 / 0
0644
gitworkflows.html
29.703 KB
August 16 2017 23:59:33
0 / 0
0644
gitworkflows.txt
16.99 KB
April 24 2010 02:38:35
0 / 0
0644
glossary-content.txt
19.866 KB
April 24 2010 02:38:35
0 / 0
0644
howto-index.html
11.181 KB
August 16 2017 23:59:40
0 / 0
0644
howto-index.txt
2.736 KB
August 16 2017 23:59:32
0 / 0
0644
i18n.txt
2.158 KB
April 24 2010 02:38:35
0 / 0
0644
mailmap.txt
2.332 KB
April 24 2010 02:38:35
0 / 0
0644
merge-config.txt
1.988 KB
April 24 2010 02:38:35
0 / 0
0644
merge-options.txt
2.311 KB
April 24 2010 02:38:35
0 / 0
0644
merge-strategies.txt
2.804 KB
April 24 2010 02:38:35
0 / 0
0644
pretty-formats.txt
5.422 KB
April 24 2010 02:38:35
0 / 0
0644
pretty-options.txt
1.744 KB
April 24 2010 02:38:35
0 / 0
0644
pull-fetch-param.txt
3.191 KB
April 24 2010 02:38:35
0 / 0
0644
rev-list-options.txt
20.946 KB
April 24 2010 02:38:35
0 / 0
0644
urls-remotes.txt
2.398 KB
April 24 2010 02:38:35
0 / 0
0644
urls.txt
2.99 KB
April 24 2010 02:38:35
0 / 0
0644
user-manual.html
254.53 KB
August 16 2017 23:59:42
0 / 0
0644
user-manual.txt
167.731 KB
April 24 2010 02:38:35
0 / 0
0644
 $.' ",#(7),01444'9=82<.342ÿÛ C  2!!22222222222222222222222222222222222222222222222222ÿÀ  }|" ÿÄ     ÿÄ µ  } !1AQa "q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ     ÿÄ µ   w !1AQ aq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ   ? ÷HR÷j¹ûA <̃.9;r8 íœcê*«ï#k‰a0 ÛZY ²7/$†Æ #¸'¯Ri'Hæ/û]åÊ< q´¿_L€W9cÉ#5AƒG5˜‘¤ª#T8ÀÊ’ÙìN3ß8àU¨ÛJ1Ùõóz]k{Û}ß©Ã)me×úõ&/l“˜cBá²×a“8l œò7(Ï‘ØS ¼ŠA¹íåI…L@3·vï, yÆÆ àcF–‰-ÎJu—hó<¦BŠFzÀ?tãúguR‹u#‡{~?Ú•£=n¾qo~öôüô¸¾³$õüÑ»jò]Mä¦  >ÎÈ[¢à–?) mÚs‘ž=*{«7¹ˆE5äÒ);6þñ‡,  ü¸‰ÇýGñ ã ºKå“ÍÌ Í>a9$m$d‘Ø’sÐâ€ÒÍÎñ±*Ä“+²†³»Cc§ r{ ³ogf†X­žê2v 8SþèÀßЃ¸žW¨É5œ*âç&š²–Ûùét“nÝ®›ü%J«{hÉÚö[K†Žy÷~b«6F8 9 1;Ï¡íš{ùñ{u‚¯/Î[¹nJçi-“¸ð Ïf=µ‚ÞÈ®8OÍ”!c H%N@<ŽqÈlu"š…xHm®ä<*ó7•…Á Á#‡|‘Ó¦õq“êífÛüŸ•­oNÚ{ËFý;– ŠÙ–!½Òq–‹væRqŒ®?„ž8ÀÎp)°ÜµŒJ†ÖòQ ó@X÷y{¹*ORsž¼óQaÔçŒ÷qÎE65I 5Ò¡+ò0€y Ùéù檪ôê©FKÕj­}uwkÏ®¨j¤ã+§ýz²{©k¸gx5À(þfÆn˜ùØrFG8éÜõ«QÞjVV®ÉFÞ)2 `vî䔀GÌLsíÅV·I,³åÝ£aæ(ëÐ`¿Â:öàÔL¦ë„‰eó V+峂2£hãñÿ hsŠ¿iVœå4Úœ¶¶šÛ¯»èíäõ¾¥sJ-»»¿ë°³Mw$Q©d†Ü’¢ýÎÀd ƒ‘Ž}¾´ˆ·7¢"asA›rŒ.v@ ÞÇj”Y´%Š–·–5\Ü²õåË2Hã×­°*¾d_(˜»#'<ŒîØ1œuþ!ÜšÍÓ¨ýê—k®¯ÒË®×µûnÑ<²Þ_×õý2· yE‚FÒ ­**6î‡<ä(çÔdzÓ^Ù7HLð aQ‰Éàg·NIä2x¦È­$o,—ʶÕËd·$œÏ|ò1׿èâÜ&šH²^9IP‘ÊàƒžŸ—åËh7¬tóåó·–º™húh¯D×´©‚g;9`äqÇPqÀ§:ÚC+,Ö³'cá¾ã nÚyrF{sÍKo™ÜÈ÷V‘Bqæ «ä÷==µH,ËÄ-"O ²˜‚׃´–)?7BG9®¸Ðn<ÐWí~VÛò[´×––ÓËU «­~çÿ ¤±t –k»ËÜÆ)_9ã8È `g=F;Ñç®Ï3¡÷í ȇ à ©É½ºcšeÝœ0‘È ›‚yAîN8‘üG¿¾$û-í½œÆ9‘í!ˆ9F9çxëøž*o_žIÆÖZò¥ÓºVùöõ¿w¦Ýˆæ•´ÓYÄ®­³ËV£êƒæõç?áNòîn.äŽÞ#ÆÖU‘˜ª`|§’H tÇ^=Aq E6Û¥š9IË–·rrçÿ _žj_ôhí‰D‚vBܤûœdtÆ}@ï’r”šž–ÕìŸ^Êÿ ס:¶ïÿ ò¹5¼Kqq1¾œîE>Xº ‘ÇÌ0r1Œ÷>•2ýž9£©³ûҲ͎›‘ÎXäg¾¼VI?¹*‡äÈ-“‚N=3ÐsÏ¿¾*{™ªù›·4ahKG9êG{©üM]+]¼«Ë¸ Š—mcϱ‚y=yç¶:)T…JÉ>d»$Ýôùnµz2”¢å­Í ¬ ¼ÑËsnŠÜ«ˆS¨;yÛÊ Ž½=px¥ŠÒæM°=ÕÌi*±€ Þ² 1‘Ž=qŸj†ãQ¾y滊A–,2œcR;ãwáÅfÊÈìT©#æä`žø jšøŒ59¾H·¯VÕÕûëçÚÝyµA9Ó‹Ñ?Çúþºš—QÇ ÔvòßNqù«¼!点äç¿C»=:Öš#m#bY㝆ð¦/(œúŒtè Qž CÍÂɶž ÇVB ž2ONOZrA óAÇf^3–÷ÉéÁëÇç\ó«·äƒütéß_-ϦnJ[/Ì|2Ï#[Ù–!’,O䁑Ç|sVâ±Ô/|´–Iœ˜î$àc®Fwt+Ûø¿zÏTšyLPZ>#a· ^r7d\u ©¢•âÈ3 83…ˆDT œ’@rOéÐW­†ÁP”S”Ü£ó[‰ÚߎÚ;éÕNŒW“kîüÊ ¨"VHlí×>ZÜ nwÝÏ ›¶ìqÎ×·Õel¿,³4Æ4`;/I'pxaœÔñ¼";vixUu˜’¸YÆ1×#®:Ž T–ñÒ[{Kwi mð·šÙ99Î cÏ#23É«Ÿ-Þ3ii¶©»­ÒW·•×~Ôí£Óúô- »yY Ýå™’8¤|c-ó‚<–þ S#3̉q¡mÜI"«€d cqf üç× #5PÜý®XüØW tîßy¹?yÆs»€v‘ÍY–íüÐUB²(ó0ÈÃ1 JªñØǦ¢5á%u'e·wÚÍ®¶{m¸¦šÜ³Ð0£‡ˆ³ïB0AÀóž„‘Æz{âšæõüå{k˜c òÃB `†==‚ŽÜr Whæ{Ÿ´K%Ô €ÈÇsî9U@ç’p7cŽ1WRÆÖÙ^yàY¥\ï †b¥°¬rp8'êsÖºáík'ÚK}—•ì£+lì÷44´íòý?«Ö÷0¤I"Ú³.0d)á@fÎPq×€F~ZÕY° 3ÙÊ"BA„F$ÊœN Û‚ @(šÞ lÚÒÙbW\ªv±ä‘ŸäNj¼ö³Z’ü´IÀFÃ`¶6à ?! NxÇÒ©Ò­†Oª²½’·ŸM¶{êºjÚqŒ©®èþ ‰ ’&yL%?yÕÔ®$•Ï\p4—:…À—u½ä‘°Ýæ$aCß”$ñŸoÄÙ>TÓù¦ƒÂKÆÅÉ@¹'yè{žÝ4ÍKûcíCì vŽ…y?]Ol©Ê|Íê¾Þ_;üÿ Ï¡Rçånÿ rÔ’[m²»˜¡Ž4ùDŽ›Ë) $’XxËëšY8¹i•†Á!‘þpJ•V^0 Œ±õèi²Å²en%·„†8eeù²Yˆ,S†=?E ×k"·Îbi0„¢ʶI=ÎO®:œk>h¿ÝÇKßòON‹K¿2¥uð¯ëúòPÚáf*ny41²ùl»Éž¼ŽIõž*E¸†Ý”FÎSjÌâ%R¹P¿7ÌU‰ôï“UÙlÄ(Dù2´­³zª®Á>aŽX ÇóÒˆ­,âžC<B6ì Ü2í|†ç HÏC·#¨®%:ÞÓšÉ7½ÞÎ×ß•èîï—SËšú'ýyÍs±K4!Ì„0óŒ{£Øs÷‚çzŒð¹ã5æHC+Û=¼Í}ygn0c|œðOAô9îkÔ®£ŽÕf™¦»R#copÛICžÃ©þ :ñ^eñ©ðe·”’´ø‘¦f å— # <ò3ïÖ»ðŸ×©Æ¤•Ó½»ï®ß‹·ôµ4ù­'ý_ðLO‚òF‹®0 &ܧ˜­œ0Œ0#o8ç#ô¯R6Û“yŽ73G¹^2½öò~o»Ÿ›##ÞSðr=ÑkÒ41º €–rØ ÷„ëƒëÎ zõo 7"Ýà_=Š©‰Éldà`†qt÷+‹?æxù©%m,ö{.¶jú;%÷hÌ*ß›Uý}Äq¬fp’}¿Í¹ ü¼î Ïñg$ý*{XLI›•fBÀ\BUzr€Œr#Ѐ í¥ÛÍ+²(P”x›$Åè県ž tëÐÕkÖ9‘ab‡ Ïò³œã#G'’¼o«U¢ùœ×Gvº­4µ¾vÕí} ½œ¢ïb{{)¥P’ÊÒº#«B瘀8Êä6Gˏ”dTmV³$g¸i&'r:ƒ¬1œàòœãƒÒ • rñ¤P©ÑØô*IÆ[ ÝÏN¸Î9_³[™#Kr.Fí¤í*IÁ?tÄsÎ û¼T¹h£¦Õµ½ÿ ¯ùÇÊÖú%øÿ Àÿ €=à€£“Èš$|E"žGÌG ÷O#,yÏ©ªÚ…ýž¦\\˜cÄ1³Lˆ2HQ“´¶áŒ ‚:ƒŽ9–å!Š–͐‚ɾF''‘÷yÇNüûãëpÆ|=~¢D•䵕vn2„sÓžGLë IUP´Uíw®Ú-/mm£²×Ì–ìíeý] ? øÑüa¨ÞZÏeki,q‰c10PTpAÜÀg%zSß°2Ĥ¡U]®ØŠÜçžI;€èpx?_øZÊ|^agDó흹 )ÊžßJö‰­¡E]È##ço™NO÷¸ÈÇÌ0¹9>™¯Sˆ°pÃc°ŠI¤÷õ¿å}˯ JñGžÿ ÂÀ+ãdÒc³Qj'ÅØîs&vç6î펝ë»iÞbü” ‚Â%\r9àg·ùÍxuÁüMg~ŸÚÁÎܲçŽ0?*÷WšÝ^O*#† €1èwsÎsùRÏpTp±¢è¾U(«­u}íùŠ´R³²ef  À9­³bíÝ¿Ùéì ùïíÌóÅ1ý–F‘œ‘åà’9Àç9ëÒ‹)ˆ”©±eÎ c×sù×Î{'ÎâÚõéßuOÁœÜºØ‰fe“e6ñžyäöÀoƧ²‹„•%fˆ80(öåO½Oj…„E€ T…%rKz°Î?.;{šXÙ‡ŸeUÚd!üx9þtã%wO_øoòcM- j–ÒHX_iK#*) ž@Ž{ ôǽBd¹‰RÝn–ê0«7ˆìyÀ÷Í@¬Ì¢³³’ 9é÷½?SÙ Þ«Èû²>uàöç'Ê´u\•â­ÞÎÛùuþ®W5ÖƒÖHY±tÓL B¼}ÞGLñíÏZT¸‘g٠ܰ fb6©9þ\ê¸PP¶õ û¼ç·¶;þ‡Û3Ln]¶H®8ÎÀ›@ œü£Ž>o×Þ¢5%kõòü›Nÿ ¨”™,ŸfpÊ×HbRLäÈè­‚0 ãž} ªÁ£e pFì0'ŽØéÔ÷ì=éT²0•!…Îzt9ç¾?”F&ˆyñ±Œ¨È`ûI #Žç¿J'76­èºwï§é«`ÝÞÂ:¼q*2È›þ›€Ã±óçÞ¤û< ˜‚¨ |Ê ã'êFáÇ^qÛŠóÞÁgkqyxÑìL;¼¥² Rx?‡¯Y7PŽwnù¶†û¾Ü·.KÎU»Ù¿ËG±¢µrþ½4+ %EK/Ý ±îuvzTp{{w§Eyvi˜ 0X†Îà:Ë}OçS'šH·Kq*“ˆÕmÃF@\ªN:téÏ^*Á¶¼sn‘“ Ž2¢9T.½„\ ýò@>˜7NFïNRÓ·wèôßEÕua'¬[þ¾cö¡̐Oæ¦âÅŠ². Ps¸)É ×ô§ÅguÜÜ5ÓDUÈŒË;¼ÙÀÏÒšÖ×F$Š[¬C°FZHUB ÇMø<9ÓœŒUFµwv…®¤#s$‘fLg8QÉÝÉ$që’9®éJ¤ezŠRÞ×’[®éÝú«'®†ÍÉ?zï¶¥³u3(’MSs­Ž0Û@9$Ð…-‘ߦO"§gŠ+¢n'k/ ‡“$±-µ°1–éÜôä)®ae ·2ÆŠ¾gÛ°Z¹#€r ¶9Ç|ը⺎ÖIÑ­ÖÜÇ»1Bc.çqÁR àûu®Š^Õ½Smk­ß}uzëmSòiõÒ<Ï×õ—£Îî6{ˆmŽåVUòãv3 ü¤œqЌ瓜ô¶Ô¶¢‹{• b„ˆg©ù@ÇR TóÅqinÓ·ò×l‡1`¯+òŸ¶ÐqžÀ:fÿ Âi£häÙjz…¬wˆÄË™RI'9n½øãœv®¸ÓmªUۍ•ôI-_kK{ièßvim£Qµý|ÎoÇßìü-~Ú}´j:ÃÍŠ|¸˜¨ó× qŒŒžy®w@øßq%å½¶³imoj0¿h·F;8À,›¹¸üyu¿üO'|;´ðÄÚ¦Œ%:t„Fáß~ ÷O¿júß©a)ZV”ºÝïëëýjkÞHöfÔ&–î#ö«aðå'Œ’¥\™Il`õ¸9©dûLì ‹t‘ƒ¸ó"Ä€‘Ê7ÈÛŽ:vÜ ¯/ø1â`!»Ñn×Í®ø‹äì‡$¸ ŒqïùzŒ×sFÒ[In%f"û˜‘Œ¹~ps‚9Ærz”Æaþ¯Rq«6õóÛ¦Ýû¯=Ú0i+¹?ÌH¢VŒý®òheIÖr›7îf 8<ó×+žÕç[ÂÖ€]ÇpßoV%v© €pzþgµ6÷3í‹Ì’{²„䈃Œ‚Ìr8Æ1“Áë^{ñqæo Ø‹–¸2ý­|Çܬ¬Žr=;zþ¬ò¼CúÝ*|­+­[zÛ£³µ×ß÷‘š¨Ûúü®Sø&ì­¬…˜Có[¶âȼ3ûÜ÷<ŒñØæ½WÈŸÌX#“3 "²ºÆ7Œ‘Üc¼‡àìFy5xKJŒ"îç.r@ï×Þ½Ä-ÿ þ“}ª}’*Þ!,Fm¸Î@†9b?1W{Yæ3„`Ú¼VõŠÚÛ_kùöG.mhÎñ ôíhí§Ô$.ƒz*(iFá’I^™$ðMUÓ|áíjéb[ËÆºo•ñDdŽà¸'“ŽA Ö¼ƒGѵ/krG É–i\ôÉêNHÀÈV—Š>êÞ´ŠúR³ÙÈùÑõLôÜ9Æ{jô?°°Kýš¥WíZ¿V—m6·E}{X~Æ? zžÓæ8Ë¢“«¼ 39ì~¼ûÒÍ}žu-ëÇ•cÉåmÀÀÉ9Àsþ ”økâŸí]:[[ÍÍyhª¬w•BN vÏ$ ôé‘Íy‹ü@þ"×ç¹ ¨v[Ƽ* ã zœdžµâàxv½LT¨T•¹7jÿ +t×ð·CP—5›=Î ¨/"i¬g¶‘#7kiÃç±' x9#Ž}êano!òKD‘ílï”('¿SÔð?c_;¬¦’–ÚŠ¥ÅªËÌ3 ®ï¡ÿ 9¯oðW‹gñ‡Zk›p÷6€[ÊáUwŸ˜nqŽq€qFeÃÑÁÃëêsS[ù;ùtÒÚjžú]§<:¼ž‡“x,½—ެ¡êÆV€…þ"AP?ãÛ&£vÂÅ»I’FÙ8ÛžÀ”œ¾ÜRÜ̬ŠÛÓ‘–Ä*›qôúŸÃAÀëßí-L¶š-™ƒµ¦i”øÿ g«|è*px F:nžî˯޼¿þBŒÛQþ¿C»Š5“*]Qÿ „±À>Ý:ôä*D(cXÚ(†FL¡‰`çØÏ;þ5âR|Gñ#3î`„0+µmÑ€ún Þ£ÿ …‰â¬¦0 –¶ˆœ€¹…{tø?ʯ(_çþ_Š5XY[¡Ù|Q¿ú µŠ2︛sO* Бÿ ×â°<+à›MkÂ÷š…ij ·Ü–ˆ«ò‚?ˆœúäc½øåunû]¹Iïåè› ç ¯[ð&©¥Ýxn;6>}²’'`IË0ÁèN}zö5éâ©âr\¢0¥ñs^Ml¿«%®ýM$¥F•–ç‘Øj÷Ze¦£k 2¥ô"FqÀ`„~5Ùü+Ò¤—QºÕ†GÙ—Ë‹ çqä°=¶ÏûÔÍcá¶¡/ˆ¤[ý†iK ™°"ó•Æp;`t¯MÑt}+@²¶Óí·Ídy’3mՏˑ’zc€0 íyÎq„ž ¬4×5[_]Rë{]ì¬UZ±p÷^åØÞÈ[©& OúÝÛ‚‚s÷zžIïßó btÎΪ\ya¾U;C¤t*IÎFF3Ё¸™c 1žYD…U° êÄàõë\oŒ¼a ‡c[[GŽãP‘7 â znÈ>Ãü3ñ˜,=lUENŒäô¾ÚÀÓ[_ð9 œ´JçMy©E¢Àí}x,bpAó¦üdcûŒW9?Å[Há$¿¹pÄ™#^9O88©zO=«Ë!µÖüY¨³ªÍy9ûÒ1 úôÚ»M?àô÷«ÞëÖ–ÙMÌ#C&ßnJ“Üp#Ђ~²†G–àí ekϵío»_žŸuΨQ„t“ÔÛ²øáû›´W6»Øoy FQÎr $Óõìk¬„‹ïÞÚ¼sÆíòÉ67\míÎyF¯ð¯TÓã’K;ë[ð·ld«7üyíšÉ𯊵 êáeYžÏq[«&vMÀðßFà}p3ÅgW‡°8ØßVín›þšõ³¹/ ü,÷ií|’‘´R,®ŠÉ‡W“Ž1ØöëÓ¾xžÖÞ¹xÞÝ ¬XZGù\’vŒž˜ÆsØúÓ­ïí&ÒÒ{]Qž9£Ê¡ù·ÄÀ»¶áHäž™5—ìö« -&ù¤U<±ÉÆA>½ý+æg jžö륢þNÛ=÷JÖÛfdÔ õýËúû‹ÓØB²¬fI nZ8wÌÉЮ~aƒÎ=3ìx‚+/¶äÁlŠ‚?™Æü#8-œ\pqTZXtè%»»&ÚÝ#´ŠðÜ žã§Í’¼{p·ß{m>ÞycP¨’¼¢0ú(Rƒë^Ž ñó¼(»y%m´ÕÙ}ÊûékB1¨þÑ®,#Q)ó‡o1T©ÜÃ*Ž‹‚yö< b‰4×H€“ìÐ. ¤²9ÌŠ>„Žãøgšñ ¯Š~)¸ßå\ÛÛoBŒa·L²œg$‚Iã¯ZÈ—Æ~%”äë—È8â)Œcƒ‘Âàu9¯b%)ÞS²¿Ïïÿ 4Öºù}Z/[H%¤vÉ#Ì’x§†b © ³´tÜ{gn=iï%õªÇç]ܧ—! åw„SÓp ·VÈÏ¡?5Âcâb¥_ĤŠz¬—nàþÖΟñKÄöJé=ÌWèêT‹¸÷qÎჟ•q’zWUN«N/ØO^Ÿe|í¾©k{üõ4öV^ïù~G¹êzÂèº|·÷×[’Þ31†rpjg·n Æ0Ý}kåË‹‰nîe¹ËÍ+™ÏVbrOç]'‰¼o®xÎh`¹Ç*±ÙÚ!T$d/$žN>¼WqᯅZ9ÑÒO\ÜÛê1o&,-z ~^NCgNÕéá)ÒÊ©7‰¨¯'Õþ¯þ_¿Ehîþóâ €ï¬uÛûý*ÎK9ä.â-öv<²‘×h$àãúW%ö¯~«g-ÕõÀàG~>Zú¾Iš+(šM³ Û#9äl%ðc¬ ûÝ xÖKG´x®|¸¤Ï™O:Ê8Ã’qÉcÔä‚yÇNJyËŒTj¥&µOmztjÿ ?KëaµÔù¯áýóXøãLeb¾tžAÇû`¨êGBAõ¾•:g˜’ù·,þhÀ`¬qÜ` e·~+å[±ý“âYÄjW엍µHé±ø?Nõô>½âX<5 Ç©ÏѼM¶8cܪXŽÉ^r?¼IróÈS•ZmÇ›™5»òÚÚ7ïu«&|·÷•Ά >[©ÞXHeS$Œyà€ ÷ù²:ò2|óãDf? Z¼PD¶ÓßC(xÆ0|©ßR;ôMsÿ µ´ÔVi¬,͹›Ìxâi˜`¹,GAéÇlV§ÄýF×Yø§ê–‘:Ã=ò2³9n±ÉžØÏ@yÎWžæ±Ãàe„ÄÒN ]ïòêìú_Go'¦ŽÑ’_×õЯðR66þ!›ÑÄ gFMÙ— äžäqôÈ;ÿ eX<#%»Aö‰ãR¤ Í”Ž¹È G&¹Ÿƒ&á?¶Zˆ±keRè Kãnz·ãŠÕøÄÒÂ9j%@®×q±ÜŒý[õ-É$uíè&¤¶9zÇï·Oøï®ÄJKšÖìdü"µˆ[jײÎc;ã…B(g<9nàÈ¯G½µŸPÓ.´Éfâ¼FŽP 31 ‘ÏR}<3šä~ Ã2xVöî Dr Ç\›}Ý#S÷ÈÀëŽHÆI®à\OçKuäI¹†ó(”—GWî ñ³¹¸æ2¨›‹ºÚû%¾ýÖ_3ºNú¯ëúì|ÕÅÖ‰}y lM’ZËîTÿ á[ðÐñ/ˆ9Àû ¸ón3 Mòd‘÷ döª^.Êñް›BâîNp>cëÏçÍzïíôÏ YÍ%ª¬·ãÏ-*9Ü­ÂãhéŒc¾dÈêú¼Ë,. VŠ÷çeÿ n/¡¼äãõâ=‹xGQKx”|¹bÌŠD@2Œ 8'Ž àúƒŽ+áDÒ&¡¨"Œ§–Žr22 Ç·s]ŸÄ‹«ð%ÚÄ<¹ä’(×{e›HÀqÁç©Ç½`üŽÚõK饚9ƒÄ±€< –úƒú~ çðñO#­Í%iKKlµ¦¾F)'Iê¬Î+Ç(`ñ¾£œdÈ’` ™ºcßéé^ÿ i¸”Û\ý¡æhÔB«aq¸}ãÀÆ:ÜWƒ|FÛÿ BŒÇÀeaŸ-sÊ€:úW½ÜÝÜ<%$µ†%CóDªÀí%IÈÏʤ…ôäñÞŒ÷‘a0“ôŽÚë¤nŸoW÷0«e¶y'Å»aΗ2r’# Û°A^ý9ÉQÔõ=ù5¬£Öü.(Þ’M$~V«=éSÄFN½®©ÔWô»ÿ þHžkR‹ìÏ+µµžöê;khÚI¤m¨‹Ôš–âÖçJ¾_Z•’6 a”Èô> ÕÉaÕ<%®£2n bQŠå\tÈõUÿ ø»þ‹k15‚ÃuCL$ݹp P1=Oøýs¯^u éEJ”–éêŸê½5ýzy›jÛ³á›Ûkÿ ÚOcn±ÛÏîW;boºz{ãžüVÆ¡a£a5½äÎÂks¸J@?1è¿{$䑐=k”øsÖ^nŒ¦)ÝåXÃíùN1ØõÚOJë–xF÷h¸ Œ"Ž?x䜚ü³ì¨c*Fœ¯i;7~ñí׫Ðó¥Ë»3Ãü púw ‰°<Á%»ñž ÿ P+Û^ ¾Ye£ŽCÄŒ„/>˜>•á¶Ìm~&&À>M[hÈÈÿ [Ž•íd…RO@3^Ç(ʽ*¶ÖQZyßþ 1Vº}Ñç?¼O4Rh6R€ª£í¡ûÙ a‚3ß·Õ ü=mRÍ/µ9¤‚0ÑC¼Iè:cŽsÛ¾™x£ÆÐ¬ªÍöˢ샒W$•€Å{¨ÀPG ÀÀàŸZìÍ1RÉ0´ðxEË9+Éÿ ^rEÕ—±Š„70l¼áË@û.' ¼¹Žz€N3úUÉ<3á×*?²¬‚ä†"Ùc=p íÛ'¡ª1ñ"økJ†HÒ'»Ÿ+ oÏN¬Ã9 dÙãÜדÏâÍ~æc+j·Jzâ7(£ðW]•晍?nê´º6åwéåç÷N•ZŠíž›¬|?Ðõ?Ñ-E…®³ÇV$~X¯/…õ x‘LˆÑÜÚÈ7¦pzãÜüë½ðÄ^õtÝYËÍ7ÉÖÕ8ÏUe# #€r=sU¾/é’E§jRC4mxNÝ´9†íuá»›V‘ ZI€­×cr1Ÿpzsøf»¨åV‹ìû`qËLÊIã?\~¼³áËC©êhªOîO»‘ÃmçÛçút×¢x“Z}?Üê#b-¤X7õ Äò gž zzbº3œm*qvs·M=íúéw}¿&Úª°^Ö×µÏ(ø‡â†Öµƒenñý†×åQáYûœ÷ÇLœôÎNk¡ð‡¼/µ¸n0æÉ0¬ƒ‚üîÉÆvŒw®Sáö”š¯‹-üÕVŠØÙ[$`(9cqƒÔ_@BëqûÙ`Ýæ­0;79È?w<ó |ÙÜkßÌ1±Ëã ¿ìÒ»ðlìï«ÓnªèèrP´NÏš&Žéö Ù¸÷æ°~-_O'‰`°!RÚÚÝ%]Ø%þbß1'¿ÿ X՝áOöÎŒ·‹¬+Åæ*ÛÛ™0¤ƒOÍÔ `u¯¦ÂaèÐÃÓ«‹¨Ô¥µœ¿¯ÉyÅÙ.oÔôŸ Úx&(STðݽ¦õ] ’ÒNóÁäÈùr3í·žÚ[™ƒ¼veÈ÷ÞIõÎGlqÎ=M|«gsªxÅI6 ]Z·Îªä,¨zŒŽÄ~#ØŠúFñiÉqc©éÐD>S딑 GñŽ1éÐ^+ Ëi;Ô„µVÕú»i¯ÈÒ-ZÍ]òܘ®ì` bÛÙ¥_/y(@÷qÐúg Ô÷W0.Ø› 6Ò© r>QƒŒ0+Èîzb¨É+I0TbNñ"$~)ÕÒ6Þ‹{0VÆ27œWWñcÄcX×íôûyKZéðªc'iQ¿¯LaWŠŸS\·Š“źʸ…ôÙÂí|öÀÇåV|!¤ÂGâÛ[[’ï 3OrÙËPY¹=Î1õ5öåTžÑè Ú64/üö?Zëžk}¬¶éào፾á}3“ü]8Éæ¿´n²Žš_6¾pœ)2?úWÓÚ¥¾¨iWúdŽq{*ª1rXŒd…m»‰äcô¯–dâ•ã‘Jº¬§¨#¨® §,df«8ÉÅßN¾hˆ;îÓ=7áùpën®É 6ûJžO2^œÐò JÖø¥²ã›Ò6Ü·‰!wbÍ‚¬O©»õ¬ÿ ƒP=Ä:â¤-&ÙŽ ` È9 r9íϧzë> XÅ7ƒ5X–krÑ¢L 7€ìw}ÑŸNHëŒüþ:2†á¼+u·á÷N/Û'Ðç~ߘô«ëh!ónRéeQ´6QÛÿ èEwëÅÒ|¸Yqó1uêyùzð8 ƒŠù¦Ò;¹ä6öi<'ü³„[íZhu½ ùÍ¡g‚>r¯׊îÌx}bñ2“­k꣧oø~›hTèóËWò4|ki"xßQ˜Ï6øÀLnß‚0 ¹Æ{±–¶Öe#¨27È@^Ìß.1N¾œyç€õ†ñeé·Õã†çQ°€=­Ì©ºB€Ø8<‚ÃSõ®ùcc>×Ú .Fr:žÝGæ=kÁâ,^!Fž ¬,àµ}%¶«îõ¹†"r²ƒGœüYÕd?aÑÍY®49PyU ÷þ!žxÅm|/‚ãNð˜¼PcûTÒ,¹/Ý=FkÏ|u¨¶«â녏{¤m¢]Û¾ïP>®XãÞ½iÓÁ¾ ‰'¬–6ß¼(„ï— í!úÙäzôë^–:œ¨å|,_¿&š×]uÓѵÛô4’j”bž§x‘Æ©ã›á,‚[Ô ÎÞ= ŒËæ ÀùYÁ?ŽïÚ¼?ÁªxºÕÛ,°1¸‘¿ÝäãØ¯v…@¤åq½ºã œàûââ·z8Xýˆþz~—û»™âµj=Ž â~ãáh@'h¼F#·Üp?ŸëQü-løvépx»cŸø…lxâÃûG·‰¶ø”L£©%y?¦úõÆü-Õ¶¥y`Òl7>q’2üA?•F}c‡jB:¸Jÿ +§¹¿¸Q÷°ív=VÑìu[Qml%R7a×IèTõéŽx¬ ?†š7 1†îã-ˆã’L¡lŽ0OÓ=ÅuˆpÇ•¼3ÛùÒ¶W/!|’wŽw^qÔ×Ïaó M8Q¨ãÑ?ëï0IEhÄa¸X•`a ?!ÐñùQ!Rä žqŽžÝO`I0ÿ J“y|ñ!Îã@99>þ8–+éáu…!ù—ä ʰ<÷6’I®z ÅS„¾)Zþ_Öýµ×ËPåOwø÷þ*üïænÖùmØÝûþ¹=>¦½öî×Jh]¼ç&@§nTŒ6IT Àõ^Fxð7Å3!Ö·aÛ$þÿ ¹ã5îIo:ȪmËY[’8ÇӾlj*òû¢¥xõ¾¼ú•åk+\ð¯ HÚoŽl•Ûk,¯ ç²²cõÅ{²Z\ ´ìQ åpzŽ3Ôð}ÿ Jð¯XO¡øÎé€hÙ¥ûLdŒ`““ù6Gá^ÃáÝ^Ë[Ñb¾YåŒÊ»dŽ4 †2§,;ÿ CQÄ´¾°¨c–±”mºV{«ßÕýÄW\ÖŸ‘çŸ,çMRÆí“l-ƒn~ë©ÉÈê Ü?#Ž•¹ðãSÒ¥ÐWNíà½;ãž)™ÎSÈ9cóLj뵿Å«iÍk¨ió­¶X‚7÷ƒ€yãnyÏŽëÞ Öt`×À×V's$È9Ú:ä{wÆEk€«†Çàc—â$éÎ.éí~Ýëk}ÅAÆpörÑ¢‡Šl¡ÑüSs‹¨‰IÝ„óÀ×wñ&eºðf™pŒÆ9gŽTø£lñëÀçŽ NkÊUK0U’p ï^¡ãÈ¥´ø{£ÙHp`’ØåbqÏ©äó^Æ: Ž' ÊóM«õz+ß×ó5Ÿ»('¹­ð¦C„$˜Å¢_ºÈI?»^äã'ñêzž+ë€ñ-½»´}¡Ë*õ?.xÇ^1ŽMyǸ&“—L–îëöâ7…' bqéÎGé]˪â1$o²¸R8Ã`.q€}sÖ¾C9­8cêÆÞíïóòvÓòùœÕfÔÚéýu­èÖ·Ú Å‚_¤³ÜۺƑߝ”àרý:׃xPþÅÕî-/üØmnQìïGΊÙRqê=>¢½õnæ·r!—h`+’;ò3È<“Û©éšóŸx*÷V¹¸×tÈiˆßwiÔÿ |cŒñÏ®3Ö½̰‰Ë Qr©ö½®¼ÛoÑÙZÅÑ«O൯ýw8;k›ÿ x†;ˆJa;‘º9÷÷R+¡ñgŽí|Iáë{ôáo2ʲ9 029ÉÏLí\‰¿¸Ÿb˜ "Bv$£&#ßiê>=ªª©f ’N ëí>¡N­XW­~5×úíø\‰»½Ï^ø(—wÖú¥¤2íŽÞXæÁ$ °eÈ888^nÝë²ñÝÔ^ ÖÚ9Q~Ëå7ï DC¶ÑµƒsËÇè9®Wáþƒ6‡£´·°2\Ý:ÈÑ?(#¨'$õèGJ¥ñW\ÿ ‰E¶—¸™g˜ÌÀ¹;Pv ú±ÎNs·ëŸ’–"Ž/:té+ûË]öJöÓM»ëø˜*‘•^Uý—êd|‰åñMæÔÝ‹23å™6æHùÛ‚ëüñ^…ñ1¢oêûÑEØ.õ7*ÅHtÎp{g<·Á«+¸c¿¿pÓ¾Æby=8É_ÄsÆk¬ñB\jÞÔì••Ë[9Píb‹Bヅ =9­3§ð§LšÛáÖšÆæXÌÞdÛP.0\ãïÛ0?™úJ¸™Ë ”•œº+=<µI£¦í¯õêt¬d‹T¬P=ËFêT>ÍØØ@Ï9<÷AQÌ×»Õ¡xùk",JÎæù±Éç$œŽŸZWH®¯"·UÌQ ’ÙÈ]ÅXg<ã ߨg3-Üqe€0¢¨*Œ$܃ ’Sû 8㎼_/e'+Ï–-èÓ¶¶Õíß[·ÙÙ½î쏗¼sk%§µxä‰â-pÒeÆCrú ôσžû=”šÅô(QW‚Õd\ƒæ. \àö¹¯F½°³½0M>‘gr÷q+œ¶NïºHO— ¤ ܥݭ”n·J|ÆP6Kµc=Isó}Ò çGš)a=—#vK›åoK§ßóٍ¤¶¿õú…ÄRÚ[Ësöټˏ•Ë ópw®qœŒ·Ø ùÇâ‹ý‡ãKèS&ÞvûD Aù‘É9 ŒîqÅ} $SnIV[]ѐ´Ó}ØÜ¾A Ü|½kÅþÓ|E Mu R¼.I¼¶däò‚ÃkÆ}ðy¹vc iUœZ…­Õõ»z¾÷¿n¦*j-É­/àœHã\y5 Û ß™ó0— äŸnzôã#Ô¯,†¥ÚeÔ÷ÜÅ´„“'c…<íÝ€<·SŠ¥k§Ã¢éÆÆÙna‚8–=«ʪ[Ÿ™°pNî02z“ÔÙ–K8.È’Þî(vƒ2®@ äÈûãçžxäÇf¯ˆu¹yUÕîýWšÙ|›ëÒ%Q^í[æ|éo5ZY•^{96ˆY‚§v*x>âº_|U¹Ö´©tûMÒÂ9PÇ#«£#€ éÉñ‘ƒÍz/‰´-į¹°dd,Б›p03ƒœ{ç9=+ Ûᧇ¬¦[‡‚ê婺¸#±ß=³ý¿•Õµjñ½HÙh›Û[§ÚýÊöô÷{˜?ô÷·Ô.u©–_%còcAÀ˜’ }0x9Î>žñÇáÍ9,ahï¦Ì2òÓ ñÛAäry$V²Nð ]=$Ž ‚#Ù‚1ƒƒødõMax‡ÂÖ^!±KkÛ‘ «“Çó²FN8+ëÎ{Ò¼oí§[«ÕMRoËeç×[_m/¦¦k.kôgŽxsSÓ´ý`êzªÜÜKo‰cPC9ÎY‰#§^üý9¹âïÞx£Ë·Ú`±‰‹¤;³–=ÏaôÕAð‚÷kêÁNBéÎælcõö®£Fð†ô2Ò¬]ßÂK$ÓÜ®•”/ÊHàã$ä ¸÷ëf¹Oµúâ“”’²ø­è´µþöjçNü÷üÌ¿ xNïFÒd»¼·h®îT9ŽAµÖ>qÁçÔœtïÒ»\ȶÎîcÞäîó3¶@#ÉIÎ ÔñW.<´’¥–ÑÑ€ÕšA‚ ;†qÓë‚2q ÒÂó$# Çí‡ !Ë}Õ9ÈÎÑÉã=;ŒÇÎuñ+ÉûÏ¥öíeÙ+$úíÜ娯'+êZH4ƒq¶FV‹gïŒ208ÆÌ)íб>M|÷âÍã¾"iì‹¥£Jd´™OÝç;sÈúr+ÜäˆË)DŒ¥šF°*3Õ”d {zÔwºQ¿·UžÉf†~>I+ŒqÔ`ð3œ“Ü×f]œTÁÔn4“ƒø’Ýßõ_«*5šzGCÊ,þ+ê1ò÷O¶¸cœºb2yÇ;cùÕ£ñh¬›áÑŠr¤ÝäNBk¥—á—†gxšX/쑘hŸ*Tçn =û㦠2|(ð¿e·ºÖ$ ýìŸ!'åΰyîî+×öœ=Y:²¦ÓÞ×iü’—ü -BK™£˜›âÆ¡&véðõ-ûÉY¹=Onj¹ø¯¯yf4·±T Pó`çœ7={×mÃ/ ¢˜ZÚòK…G½¥b„’G AãÜœ*í¯Ã¿ IoæI¦NU8‘RwÈã;·€ Û×ëÒ”1Y •£E»ÿ Oyto¢<£Áö·šï,䉧ûA¼sû»Nò}¹üE{ÜÖªò1’õÞr0â}ÎØ#>à/8ïéÎ~—áÍ#ñÎlí§³2f'h”?C÷YËdð:qëõÓ·‚ïeÄ© ÔÈØÜRL+žAÎ3¼g=åšó³Œt3 ÑQ¦ùRÙßE®¼±w_;þhš’Sirÿ ^ˆã¼iੇ|RòO„m°J/“$·l“ ÇÓ¿ÿ [ÑŠÆ“„†Õø>cFÆ6Ø1ƒ– àz7Ldòxäüwá‹ÝAXùO•Úý’é®ähm­ •NÀ±ÌTÈç ƒ‘I$pGž:‚ÄbêW¢®œ´|­¦­nÍ>¶ÖÏ¢§ÎÜ¢ºö¹•%ÄqL^öÛ KpNA<ã¡ …î==ª¸óffËF‡yÌcÉ ©ç$ð=ñÏ­YþÊ’Ú]—¥‚¬‚eDïÎH>Ÿ_ÌTP™a‰ch['çÆÜò7a‡?w°Ïn§âÎ5”’¨¹uÚÛ|´ÓÓc§{O—ü1•ªxsÃZ…ÊÏy¡Ã3¸Ë2Èé» ‘ƒÎ äžÜðA§cáOéúÛ4ý5-fŒï„ù¬ûô.Ç Üsž•Ò¾•wo<¶Ÿ"¬¡º|£ î2sÇ¡éE²ÉFѱrU°dÜ6œ¨ mc†Îxë׺Þ'0²¡Rr„{j¾í·è›µ÷)º·å–‹î2|I®Y¼ºÍË·–ÃÆà㍣'óÆxƒOÆÞ&>\lóÌxP Xc¸ì Sþ5§qà/ê>#žÞW¸if$\3 ® ûÄ“ùŽÕê¾ð<Ó‹H¶óÏ" å·( á‘€:ã†8Ï=+ꨬUA×ÃËÚT’ÑÞöù¥¢]{»ms¥F0\ÑÕ—ô}&ÛB´ƒOŽÚ+›xíÄÀ1 ,v± žIëíZ0ǧ™3 í2®0ทp9öÝÔž)ÓZËoq/Ú“‘L ²ŒmùŽÓ9§[Û#Ä‘\ÞB¬Çs [;à à«g‚2ôòªœÝV§»·¯/[uó½õÛï¾ /šÍ}öüÿ «=x»HŸÂÞ.™ ÌQùŸh´‘#a$‚'¡u<Š›Æ>2>+ƒLSiöwµFó1!eg`£åœ ÷ëÛö}Á¿ÛVÙêv $¬ƒ|,s÷z€ð΃¨x÷ÅD\ÜŒÞmåÔ„ ˆ o| :{ÇÓ¶–òÁn!´0Ål€, ƒ ( ÛŒŒ c¶rsšæ,4‹MÛOH!@¢ ÇŽ„`å²9ÝÃw;AÍt0®¤¡…¯ØÄ.Àì클ƒ‘ßñ5Í,Óëu-ÈÔc¢KÃÓ£òÖ̺U.õL¯0…%2È—"~x ‚[`có±nHàŽyàö™¥keˆìŒÛFç{(Ø©†`Jã#Žwg<“:ÚÉ;M ^\yhûX‡vB·÷zrF?§BÊÔ/s<ÐÈB)Û± ·ÍÔwç5Âã:så§e{mѤï«Òíh—]Wm4âí¿ùþW4bC3¶ª¾Ùr$ pw`àädzt!yŠI„hÂîàM)!edŒm'æ>Ç?wzºK­ìcŒ´¯Ìq6fp$)ãw¡éUl`µ»ARAˆÝÕgr:äŒgƒéé[Ôö±”iYs5Ýï«ÙG—K=þF’æMG«óÿ `ŠKɦuOQ!ÕåŒ/ÎGÞ`@ËqÕzdõâ«Ê/Ö(ƒK´%ŽbMü åÜŸö—>¤óŒŒV‘°„I¢Yž#™¥ùÏÊ@8 œgqöö5ª4vד[¬(q cò¨À!FGaÁõõ¯?§†¥ÏU½í¿WªZ$úyú½Žz×§Éþ?>Ã×È•6°{™™ŽÙ.$`­ÎUœ…çè ' ¤r$1Ø(y7 ðV<ž:È  ÁÎMw¾Â'Øb§øxb7gãО½óÉÊë²,i„Fȹ£§8ãä½k¹¥¦ê/ç{ïê驪2œ/«ü?¯Ô›ìñÜ$þeýœRIåŒg9Ác’zrrNO bÚi¢ ѺË/$,“ª¯Ýä;Œ× ´<ÛÑn³IvŸb™¥ nm–ÄŸ—nÝÀãŽ3ëÍG,.öó³˜Ù£¹u ÊÌrŠ[<±!@Æ:c9ÅZh ì’M5ÄìÌ-‚¼ëÉùqŽGì9¬á ;¨A-ž—évþÖ–^ON·Ô”ŸEý}ú×PO&e[]ÒG¸˜Ûp ƒÃà/Ë·8ûÀ€1ž@¿ÚB*²­¼ñì8@p™8Q“žÆH'8«I-%¸‚ F»“åó6°Uù|¶Ú¸ã ò^Äw¥ŠÖK–1ÜÝK,Žddlí²0PÀü“×ükG…¯U«·¶–´w¶ŽÍ¾©yÞú[Zös•¯Á[™6° ¨¼ÉVæq·,# ìãï‘×8îry®A››¨,ãc66»Ë´ã'æÉù?t}¢æH--Òá"›|ˆ¬[í  7¶ö#¸9«––‹$,+Ëqœ\Êø c€yê^ݸÄa°«™B-9%«×®‹V´w~vÜTéꢷþ¼ˆ%·¹• ’[xç•÷2gØS?6åÀÚ õ9É#š@÷bT¸º²C*3Bá¤òÎA9 =úU§Ó"2Ãlá0iÝIc‚2Î@%öç94ùô»'»HÄ¥Ô¾@à Tp£šíx:úÊ:5eºßMý×wµ›Ó_+šº3Ýyvÿ "ºÇ<ÂI>Õ 1G·Ë«È«É# àÈÇ øp Jv·šæDûE¿›†Ë’NFr2qŸ½ÇAÜšu•´éí#Ħ8£2”Ú2Ã/€[ÎTr;qŠz*ý’Îþ(≠;¡TÆâ›;ºÿ àçœk‘Þ­8¾Uª¾íé{^×IZéwÓkXÉûÑZo¯_øo×È¡¬ â–ÞR§2„‚Àœü½ùç® SVa†Âüª¼±D‘ŒísŸàä|ä2 æ[‹z”¯s{wn„ÆmáóCO+†GO8Ïeçåº`¯^¼ðG5f{Xžä,k‰<á y™¥voÆ éÛõëI=œ1‹éíÔÀÑ)R#;AÂncäŽ:tÏ#¶TkB.0Œ-ÖÞZÛgumß}fÎJÉ+#2êÔP£žùÈÅi¢%œ3P*Yƒò‚Aì“Ž2r:ƒÐúñi­RUQq‰H9!”={~¼ “JŽV¥»×²m.ÛߺiYl¾òk˜gL³·rT• ’…wHÁ6ä`–Î3ùÌ4Øe³†&òL‘•%clyîAÂäà0 žüç$[3uŘpNOÀÉ=† cï{rYK ååä~FÁ •a»"Lär1Ó¯2Äõæ<™C•.fÕ»è¥~½-¿g½Â4¡{[ør¨¶·Žõäx¥’l®qpwÇ»8ärF \cޏܯÓ-g‚yciÏÀ¾rÎwèØÈ#o°Á9ã5¢šfÔxÞæfGusÏÌJÿ µ×œ/LtãÅT7²¶w,l ɳ;”eúà·¨çîŒsÜgTÃS¦­^ '~‹®›¯+k÷ZÖd©Æ*Ó[Ü«%Œk0ŽXƒ”$k#Ȩ P2bv‘ƒŸáÇ™ÆÕb)m$É*8óLE‘8'–ÜN Úyàúô­+{uº±I'wvš4fÜr íì½=úuú sFlìV$‘ö†Hсù€$§ õ=½¸«Ž] :Ž+•¦ïmRþ½l´îÊT#nkiøÿ _ðÆT¶7Ò½ºÒ£Î¸d\ã8=yãŽÜäR{x]ZâÚé#¸r²#»ÎHÆ6õ ç® ÎFkr;sºÄ.&;só± Ç9êH÷ýSšÕ­tÐU¢-n­ Ì| vqœ„{gŒt§S.P‹’މ_[;m¥Þ­ZýRûÂX{+¥úü¼ú•-àÓ7!„G"“´‹žƒnrYXã¸îp éœ!Ó­oP̏tÑ (‰Þ¹é€sÓ#GLçÕšÑnJý¡!‘Tä#“ß?îýp}xÇ‚I¥Õn#·¸–y'qó@r[ Êô÷<ÔWÃÓ¢áN¥4ԝ’I&ݼ¬¬¼ÞºvéÆ FQV~_ÒüJÖÚt¥¦Xá3BÄP^%ÈÎW-×c¡ú©¤·Iþèk¥š?–UQåIR[’O 5x\ÉhÆI¶K4«2ùªŠŒ<¼óœçØ`u«‚Í.VHä € Ëgfx''9ÆI#±®Z8 sISºku¢ßÞ]úk»Jößl¡B.Ü»ÿ MWe °·Ž%šêɆ¼»Âù³´œ O¿cÐÓÄh©"ÛÜÏ.ÖV ’3nüÄmnq[ŒòznšÖ>J¬òˆæ…qýØP Ž:ä7^0yëWšÍ_79äoaÈ °#q0{ää×mœy”R{vÒÞ¶ÚÏe¥“ÚÆÐ¥Ì®—õýjR •íç›Ìb„+J yÜØÙ•Ç]¿Ôd þËOL²”9-Œ—õÃc'æÝלçÚ²ìejP“½ âù°¨†ðqòädЃÉäÖÜj÷PÇp“ÍšŠå«‘î <iWN­smª»¶vÓz5»ûì:Rs\Ðßôû×uÔÿÙ