User:Dave Young/Prototyping 3.1: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
No edit summary
Line 1: Line 1:
==asciinoise==
A modified Perlin noise generator built in Python that creates patterns made out of ascii characters and outputs as html. The value returned from the perlin noise algorithm selects a character from an ascii list arranged according to pixel-density. For example, the first character in the list is a . and the final character is a Q - the latter character appearing more dense on-screen than the full-stop.


b
Refresh me [http://www.asciinoise.tk asciinoise!]
b
k
A
U
H
W
R
Q
.
.
.
`
-
'
:
^
=
+
/
/
/
=
:
-
Q
N
D
@
U
U
8
8
A
O
Y
Z
P
X
g
g
g
g
g
g
g
X
X
X
X
X
X
g
g
4
d
V
h
g
g
g
g
h
4
g
G
Y
A
8
U
$
$
@
K
D
W
M
R
Q
Q
.
Q
0
M
W
H
@
8
A
O
O
O
A
&
U
@
H
D
W
W
<br />
b
b
k
A
U
K
B
M
Q
.
.
`
`
-
'
:
^
=
+
/
/
/
=
:
-
Q
M
D
K
$
8
8
&
A
k
Y
Z
P
X
g
E
E
E
g
g
g
g
g
X
X
X
X
g
g
E
d
V
h
g
g
g
g
V
4
g
G
Y
A
8
U
$
$
@
K
D
W
N
R
0
Q
Q
Q
0
M
W
H
@
8
A
O
k
O
O
&
8
$
K
D
B
W
<br />
b
b
k
A
U
K
B
N
R
Q
`
`
-
_
'
:
^
=
+
/
/
+
=
:
-
.
M
B
H
@
&
&
A
O
k
b
G
P
X
g
4
4
4
E
E
E
E
E
E
g
X
X
g
g
E
4
d
V
h
g
h
h
V
4
X
G
Y
O
&
U
$
$
@
K
H
B
N
M
R
0
0
0
R
N
B
H
$
8
A
O
Y
k
k
A
&
U
@
K
H
D
<br />
Y
Y
k
A
U
@
D
W
M
R
-
-
-
_
'
;
^
=
+
+
+
=
^
:
-
.
R
W
D
H
A
O
O
k
b
Z
P
X
g
E
d
d
d
d
d
4
4
4
4
4
X
X
g
g
E
4
d
V
V
h
V
d
4
E
X
Z
Y
O


&
8
$
$
$
K
H
D
W
N
M
R
M
M
N
B
D
@
U
&
A
O
b
b
Y
k
O
&
8
U
@
@
<br />
O
O
A
8
$
K
D
W
N
M
_
_
_
'
:
;
^
=
+
+
;
:
'
_
.
Q
M
W
D
H
Y
Y
b
Z
G
P
X
g
E
4
V
V
V
V
V
d
d
d
d
d
X
X
X
g
g
E
4
d
d
d
4
E
g
X
G
b
k
O
&
8
U
$
$
@
K
H
B
W
N
N
B
B
D
H
@
U
8
A
O
k
G
G
Z
b
Y
k
O
A
&
8
<br />
8
U
U
@
K
D
B
N
M
R
'
'
:
:
;
^
^
=
+
+
`
`
.
.
0
M
W
D
H
K
P
P
X
X
g
E
4
d
V
V
V
V
V
V
V
V
V
V
V
V
P
P
X
X
g
g
E
E
4
4
X
X
P
G
Z
Y
k
A
&
&
U
U
$
$
@
K
H
D
B
B
@
$
$
U
8
A
O
k
Y
b
X
X
X
P
G
Z
b
Y
Y
k
<br />
H
H
D
B
W
N
M
R
0
0
;
;
;
;
^
^
=
=
+
+
M
N
N
W
B
H
K
@
$
U
d
d
d
V
V
h
g
g
S
S
V
V
V
V
V
V
d
d
d
d
G
P
P
P
P
X
X
g
g
g
Z
Z
b
b
Y
k
O
A
&
8
U
U
U
$
$
@
K
K
H
H
O
O
O
k
Y
b
Z
Z
G
G
E
E
E
g
g
X
P
P
G
G
<br />
R
R
R
0
0
Q
.
.
.
.
^
^
^
=
=
=
+
+
+
+
$
$
$
U
U
8
&
A
A
O
q
q
q
q
m
m
6
6
6
6
d
d
d
d
d
d
d
d
4
4
G
G
G
G
G
G
P
P
P
P
k
k
k
O
O
A


&
==Source==
&
<source lang="python">
8
#!/usr/bin/python2.7
8
#Perlin noise implementation for python by The_Hatstand
U
#Modified from http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
U
U
U
$
$
$
@
@
@
G
G
G
P
P
X
X
g
g
E
d
d
d
4
4
4
E
E
E
g
<br />
`
`
`
`
-
-
-
_
_
_
+
+
+
+
+
+
+
+
/
/
k
k
Y
Y
Y
b
b
b
b
Z
F
F
F
5
5
5
5
5
5
5
E
E
E
E
E
E
E
E
E
E
Z
Z
Z
Z
Z
Z
Z
Z
Z
G
&
&
&
&
&
8
8
8
8
8
U
U
U
U
U
U
U
$
$
$
4
4
4
4
d
d
d
d
d
V
V
V
V
V
V
V
d
d
d
d
<br />
:
:
:
:
:
:
:
:
:
:
/
/
/
/
/
/
/
/
/
/
P
P
P
P
P
P
X
X
X
X
3
3
3
3
3
3
3
y
y
y
g
g
g
g
g
g
g
g
g
g
b
b
b
b
b
b
b
b
b
b
8
8
8
8
U
U
U
U
U
U
8
8
8
U
U
U
U
U
U
U
h
h
h
h
h
h
g
g
g
g
h
h
h
h
h
h
h
h
h
h
<br />
Z
b
Y
&
@
B
R
.
_
:
;
;
;
^
^
=
+
+
/
/
/
+
^
_
Q
B
U
k
G
X
g
g
4
d
g
q
p
5
3
y
y
y
3
5
p
q
g
d
4
g
g
g
g
X
P
P
G
Z
b
b
b
b
Y
Y
k
A
&
8
8
U
U
U
U
U
U
U
U
U
8
8
8
8
&
O
b
P
g
d
h
g
g
g
g
g
g
g
g
g
h
h
<br />


Z
############################################################################
b
#..........................................................................#
k
#..######..######..######..##..##......##..##..######..##..######..######..#
&
#..##..##..##......##......##..##......##..##..##..##..##..##......##......#
$
#..##..##..##......##......##..##......###.##..##..##..##..##......##......#
B
#..######..######..##......##..##......##.###..##..##..##..######..####....#
R
#..##..##......##..##......##..##......##..##..##..##..##......##..##......#
.
#..##..##......##..##......##..##......##..##..##..##..##......##..##......#
_
#..##..##..######..######..##..##......##..##..######..##..######..######..#
:
#..........................................................................#
;
############################################################################
;
;
^
^
=
+
+
/
/
/
+
^
_
Q
W
$
O
Z
P
g
g
E
d
h
q
6
F
2
3
y
y
3
5
p
q
g
d
4
g
g
X
X
X
P
G
Z
Z
b
b
b
Y
Y
k
O
A
&
8
U
U
U
U
U
U
U
U
8
8
8
8
8
8
A
k
b
P
g
d
h
g
S
S
g
g
g
g
g
g
h
h
<br />
b
b
k
&
$
D
M
.
-
_
^
^
^
^
=
+
+
/
/
/
/
/
^
'
.
N
K
8
k
b
X
g
E
4
V
S
m
p
5
2
3
3
2
F
6
q
h
d
4
E
P
P
P
G
G
Z
b
b
Y
Y
Y
Y
k
O
A
A
&
8
U
$
8
8
8
8
8
8
8
8
8
8
&
A
O
Y
Z
P
E
d
h
g
S
S
S
S
g
g
g
g
g
g
<br />
Y
k
O
8
@
D
M
Q
.
-
=
=
=
=
+
+
/
/
"
"
/
+
^
'
.
R
D
$
&
O
X
X
g
E
d
h
S
m
6
p
5
5
F
6
q
g
V
d
E
g
Z
Z
Z
b
b
Y
Y
k
k
O
k
O
O
A
A
&
8
U
U
$
&
&
&
&
&


&
import math
&
import random
A
A
A
O
k
Y
b
G
g
4
V
h
g
S
S
S
S
S
S
S
g
g
g
<br />
A
&
8
$
H
W
M
Q
.
`
+
+
+
/
/
"
"
"
|
|
=
=
;
'
.
0
W
H
$
8
P
X
X
E
4
V
h
S
q
m
m
m
q
S
g
V
4
E
g
X
k
k
k
k
O
O
A
A
&
&
O
O
A
A
&
8
8
U
U
$
O
O
O
O
O
O
O
O
O
k
b
b
Z
P
X
E
d
V
g
S
q
q
q
q
q
S
S
S
S
S
<br />
@
K
H
D
W
M
Q
.
`
-
"
"
"
"
|
|
|
|
)
)
:
:
_
`
.
R
W
D
K
@
X
X
g
g
4
d
V
h
g
S
h
V
V
d
4
g
X
P
G
G
&
&
&
&
8
8
8
U
U
U
O
A
A
A
&
&
8
8
U
U
b
b
b
b
b
b
b
b
b
b
P
X
X
g
E
d
V
h
g
S
m
m
m
m
m
m
q
q
q
q
<br />


M
#--Perlin Noise Functions ----------------------------------------------
M
R
0
Q
.
`
-
'
'
)
)
)
)
)
)
\
\
\
\
.
.
.
0
R
N
B
H
K
@
g
g
g
E
4
d
d
V
h
h
X
X
P
G
G
Z
b
Y
Y
k
$
$
$
$
$
@
@
@
@
K
O
O
O
O
A
A
A
&
&
&
P
P
P
P
P
P
P
P
P
P
4
4
4
d
V
h
g
g
S
q
6
6
6
6
6
6
6
6
6
6
<br />
-
-
-
_
'
:
;
;
^
^
<
<
<
<
<
<
<
<
<
<
N
N
W
W
D
H
K
@
$
$
E
E
E
4
4
d
d
V
V
V
O
O
O
O
A
A
&


&
#first make a generator that takes a returns a random number based on a 2dimensional input
8
def rawNoise(x, y):
8
n = x+y*57
H
n = (n<<13) ^ n
H
return ( 1.0 - ( (n * (n * n * 44560482149 + 13091204281) + 1376312589)&0x7fffffff) / 1073741824.0)
H
H
H
H
D
D
D
D
k
k
k
k
k
k
O
O
O
O
E
E
E
E
E
E
E
E
E
E
h
h
h
h
g
g
S
S
q
q
p
p
p
p
p
p
p
p
p
p
<br />
=
=
=
+
+
/
/
/
"
"
>
>
>
>
>
>
>
>
>
>
@
@
@
@
$
$
U
U
8
8
4
d
d
d
d
d
V
V
V
V
$
$
$
$
@
@
@
@
K
K
B
B
B
B
B
B
W
W
W
W
b
b
b
b
b
Y
Y
Y
Y
Y
V
V
V
V
V
V
V
V
V
V
S
S
S
S
q
q
q
q
m
m
F
F
F
F
F
F
F
F
F
F
<br />
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
&
&
&
&
&
&
&
&
A
A
V
V
V
V
V
V
V
V
V
V
D
D
D
D
D
D
D
D
D
D
N
N
N
N
N
N
N
N
N
N
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
g
g
g
g
g
g
g
g
g
g
m
m
m
m
m
m
m
m
m
m
5
5
5
5
5
5
5
5
5
5
<br />
A
&
U
H
N
.
'
=
"
\
\
\
<


<
#creates a smoothing algorithm to the raw noise (based on averaging neighbouring input-coords)
<
def smoothNoise(x, y):
>
corners = (rawNoise(x-1, y-1)+rawNoise(x+1, y-1)+rawNoise(x-1, y+1)+rawNoise(x+1, y+1))/16
>
sides = (rawNoise(x-1, y)+rawNoise(x+1, y)+rawNoise(x, y-1)+rawNoise(x, y+1))/8
)
center = rawNoise(x, y)/4
)
return (corners + sides + center)
)
)
)
\
/
:
.
M
H
U
&
A
O
O
Y
Z
P
g
E
d
V
V
d
4
X
Z
k
8
@
H
B
B
B
W
W
W
W
N
N
N
N
N
N
W
D
K
U
A
k
b
Z
Z
G
G
X
g
4
d
h
g
S
S
S
S
S
q
q
q
m
m
m
m
m
6
6
p
p
F
F
5
5
<br />
&
8
$
H
N
.
'
=
"
)
\
\
<
<
<
>
>
)
)
)
)
>
\
/
;
.
M
H
$
&
A
O
k
Y
Z
P
g
E
d
V
V
V
4
g
G
k
&
$
H
D
B
B
W
W
W
W
N
N
N
N
M
N
W
D
K
$
&
O
Y
b
Z
Z
G
P
X
E
4
V
h
g
g
g
S
S
S
S
q
q
q
m
q
q
m
m
6
6
p
p
F
F
<br />
8
U
@
D
M
.
'
=
"
)
\
\
<
<
<
>
>
)
)
)
)
>
\
/
;
`
R
B
@
U
O
O
k
Y
Z
P
X
E
4
d
V
V
4
g
G
Y
A
U
@
H
B
B
W
W
W
W
N
N
N
N
R
M
N
W
H
@
U
&
O
k
Y
b
b
Z
P
X
E
4
d
V
h
h
h
h
h
g
g
g
S
S
g
g
g
S
S
q
q
m
m
6


<br />
#creates a cosine wave interpolation algorithm to further smooth the results
@
def cosineInterpolation(a, b, x):
@
ft = x*3.1415927
H
f = (1-math.cos(ft))*.5
W
return (a*(1-f)+b*f)
R
.
'
^
/
|
\
\
<
<
<
>
>
>
>
)
<
\
|
+
;
`
0
W
H
@
k
k
Y
b
Z
P
g
E
4
d
V
V
4
g
P
b
O
&
U
$
W
W
W
W
W
N
N
N
N
N
0
0
R
N
B
H
@
U
8
&
O
O
k
Y
b
Z
P
X
g
g
4
4
4
4
d
d
d
V
V
V
d
d
d
d
V
V
h
h
g
g
<br />
D
B
W
M
Q
`
:
^
/
"
\
\
\
<
<
<
>
>
>
>
|
"
+
^
'
.
0
N
D
H
b
b
b
Z
P
X
g
E
4
d
d
4
E
g
P
b
k
A
8
U
N
N
N
N
N
M
M
M
M
M
Q
Q
0
R
M
W
D
H
@
@
&
&
A
A
O
k
b
b
Z
G
P
P
X
X
X
X
X
g
g
g
X
X
X
g
g
g
E
E
E
4
<br />
R
R
0
.
`
_
;
=
/
"
\
\
\
\


<
#applies smoothing algorithms to create a more harmonic stream of numbers
<
def interpolatedNoise(x, y):
<
int_x = int(x)
<
fractional_x = x-int_x
>
>
;
;
:
_
.
Q
M
W
D
K
G
G
P
P
X
g
E
4
d
d
g
g
X
P
Z
b
k
A
&
8
R
R
R
R
R
0
0
0
0
0
.
.
.
Q
0
M
N
W
B
D
U
U
8
8
&
A
O
O
k
k
Y
Y
Y
Y
Y
Y
b
b
b
b
Z
Z
Z
Z
Z
G
G
G
G
G
<br />
`
`
-
_
:
;
=
+
"
"
\
\
\
\
\
\
<
<
<
<
.
.
Q
0
M
W
D
H
@
@
g
g
E
E
4
4
d
V
V
V
Z
Z
Z
b
Y
k
A
&
8
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Q
0
R
R
M
N
$
$
$
U
U
8
8
&
&
&
8
8
8
8
8
8
8
8
&


&
int_y = int(y)
k
fractional_y = y-int_y
k
k
k
k
k
k
Y
Y
Y
<br />
;
;
^
^
=
+
/
"
|
|
\
\
\
\
\
\
\
\
\
\
D
D
D
H
K
@
$
U
8
&
d
V
V
V
V
h
h
g
g
g
O
O
O
A
&
&
8
U
U
U
_
_
_
_
_
_
_
_
_
_
.
.
.
.
.
.
Q
Q
0
0
@
@
@
$
$
$
$
U
U
U
H
H
H
H
H
H
H
H
H
H
&
&
&
&
A
A
A
A
A
A
<br />
/
"
"
"
"
|
|
)
)
)
\
\
\
\
\
\
\
\
\
\
&
&
&
A
A
O
O
k
k
k
g
g
g
S
S
S
S
S
S
q
U
U
U
$
$
$
@
@
@
@
;
;
;
;
;
;
;
;
;
;
.
.
.
.
.
.
.
.
.
.
@
@
@
@
@
@
@
$
$
$
N
N
N
N
N
N
N
N
N
N
8
8
8
8
8
8
8
8
8
8
<br />
)
)
\
\
\
\
\
\
\
\
)
)
)
)
)
)
)
)
)
)
b
b
b
b
b
Z
Z
Z
Z
Z
q
q
q
q
q
m
m
m
m
m
K
K
K
K
K
K
H
H
H
H
=
=
=
=
=
=
=
=
=
=
.
.
.
.
.
.
.
.
.
.
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
U
U
U
U
U
U
U
U
U
U


<br />
v1 = smoothNoise(int_x, int_y)
-
v2 = smoothNoise(int_x+1, int_y)
-
v3 = smoothNoise(int_x, int_y+1)
_
v4 = smoothNoise(int_x+1, int_y+1)
'
;
i1 = cosineInterpolation(v1, v2, fractional_x)
=
i2 = cosineInterpolation(v3, v4, fractional_y)
/
|
)
\
<
\
\
\
\
\
\
\
)
)
)
|
/
;
`
M
H
8
k
Z
G
G
P
X
E
d
h
S
q
m
m
q
S
V
g
Z
k
8
@
H
H
D
B
N
0
.
_
:
^
+
+
+
=
^
;
:
_
-
`
.
.
.
.
Q
R
N
B
D
K
@
@
@
K
H
B
W
M
R
0
Q
Q
Q
0
R
N
B
H
K
$
U
<br />
-
-
_
'
;
=
/
|
)
\
\
\
\
\
\
)
)
)
)
)
)
|
/
;
`
M
H
8
k
Z
G
G
P
X
E
d
h
g
q
m
m
m
S
V
E
G
k
&
$
K
H
H
D
W
R
.
-
'
;
^
=
=
=
^
:
'
_
`
`
.
.
.
.
Q
R
N
W
D
H
K
K
K
H
D
B
N
M
0
Q
Q
.
.
Q
0
M
W
D
H
@
$
<br />
`
-
_
'
:
^
+
"
|
)
|
|
|
|
|
|
|
|
"
"
"
"
=
:
.
M
H
8
O
b
G
G
P
X
E
d
V
g
S
q
m
m
S
h
E
P
Y
A
8
$
@
@
H
B
N
0
.
`
_
:
^
^
;
:
'
_
-
`
.
.
`
.
.
Q
0
M
W
B
D
H
D
D
D
B
N
M
R
Q
.
.
`
`
.
.
0
R
N
B
D
H
<br />
`
`
-
_
:
;
=
+
/
"
/
/
/
/
/
/
+
+
+
+
+
=
;
_
.
N
H
U
A
k
P
P
P
g
E
4
V
h
g
S
m
m
q
h
d
X
Z
Y
A
&
U
U
$
K
D
W
R
Q
.
.
:
:
'
'
_
`
.
.
.
Q
`
`
.
.
Q
0
M
N
W
B
N
N
N
M
R
Q
.
.
`
`
'
'
_
-
`
.
Q
0
R
M
<br />
.
.
`
-
_
'
;
^
=
=
^
^
^
^
^
^
^
^
^
;
:
'
_
.
0
W
K
U
A
O
X
X
X
g
E
d
V
h
g
g
6
m
q
g
V
E
X
Z
b
k
&
&
8
$
@
H
B
N
M
R
_
_
_
-
`
.
.
.
Q
Q
-
-
-
`
.
Q
0
R
M
M
Q
.
.
.
`
-
_
'
'
:
=
=
^
;
:
'
_
-
`
.
<br />
.
.
.
.
`
-
_
'
:
:
'
'
'
'
'
'
'
'
'
'
.
.
Q
R
N
D
@
8
A
O
E
E
E
4
d
V
h
h
g
g
6
m
q
S
h
d
E
g
P
G
A
A


&
return cosineInterpolation(i1, i2, fractional_y)
8
U
$
K
H
D
B
-
-
-
`
`
.
.
.
Q
Q
'
'
_
_
-
`
.
.
.
Q
'
:
:
;
;
^
=
=
+
+
"
"
"
/
+
=
^
^
;
;
<br />
0
0
Q
Q
.
.
.
`
`
-
`
`
`
`
`
`
`
`
`
`
N
N
W
D
K
@
U
&
O
O
d
d
V
V
h
h
g
g
S
S
6
m
m
q
S
h
V
d
4
E
A
A
A
&
8
U
$
@
@
K
-
-
-
`
`
.
.
.
.
.
;
;
:
:
'
'
_
_
-
-
|
|
|
|
)
)
\
\
<
<
\
\
\
)
)
|
|
"
"
/
<br />
M
R
R
R
R
0
0
Q
Q
Q
.
.
.
.
.
.
.
.
.
.
@
$
$
U
8
&
A
O
k
Y
g
g
g
S
S
S
q
q
q
q
6
m
m
q
q
S
g
h
h
V
A
A
&
&
8
8
U
U
$
$
-
-
-
-
-
`
`
`
`
`
=
=
=
^
^
^
;
;
;
:
v
v
v
v
v
%
%
%
x
x
>
>
>
>
>
<
<
\
\
\
<br />
N
N
N
N
N
N
M
M
M
M
0
0
0
0
0
0
0
0
0
0
O
O
O
O
k
Y
Y
b
b
b
m
m
m
m
m
m
6
6
6
6
m
m
m
m
m
q
q
S
S
S
&
8
8
8
8
8
U
U
U
U
_
_
_
_
_
_
_
_
_
-
+
+
+
+
+
+
+
+
=
=
s
s
s
s
s
s
s
{
{
{
i
i
i
i
)
)
)
)
)
)


<br />
#perlin noise algorithm
W
def perlinNoise2d(x, y, frequency, numOctaves):
W
total = 0;
W
p = 1;
W
n = numOctaves - 1
W
W
W
W
W
W
R
R
R
R
R
R
R
R
R
R
b
b
Z
Z
Z
Z
Z
Z
Z
Z
p
p
p
p
p
p
p
p
p
p
m
m
m
m
m
m
m
m
m
m
8
8
U
U
U
U
U
U
U
U
'
'
'
'
'
'
'
'
'
'
"
"
"
"
"
"
"
/
/
/
I
I
I
I
I
I
I
I
I
I
i
i
i
i
i
i
i
i
i
i
<br />
.
.
.
.
Q
R
M
N
W
B
B
B
W
W
W
N
N
M
M
M
M
M
N
B
K
U
A
k
b
Z
G
G
P
g
4
V
g
q
6
p
p
p
p
p
p
6
6
6
m
m
m
m
S
h
4
X
b
O
&
8
U
U
@
H
B
M
Q
`
_
'
:
:
:
;
^
=
+
/
/
"
"
|
)
<
i
x
r
*
I
?
!
?
I
}
{
s
l
x
%
v
<br />
.
.
.
Q
0
R
M
N
W
B
B
B
B
W
W
W
N
N
M
M
M
M
W
D
K
U
A
k
b
Z
Z
G
P
X
E
V
g
q
m
6
p
p
p
6
6
6
m
m
m
m
m
m
S
h
4
X
Z
k
A
8
8
U
$
K
B
M
0
.
-
_
'
:
:
;
^
=
+
/
/
"
"
|
)
<
i
x
r
{
I
?
!
?
?
}
*
s
l
x
%
v
<br />
.
.
Q
Q
0
M
N
W
W
B
D
D
D
B
B
B
W
W
N
N
N
N
W
D
K
U
&
k
b
Z
b
Z
G
P
g
4
V
g
S
q
6
6
m
m
m
m
q
q
q
q
6
m
q
g
d
g
G
Y
O
A
&
8
U
@
H
W
R
Q
.
`
'
'
:
;
;
^
=
+
/
/
|
)
\
>
i
x
r
{
}
I
!
!
?
I
*
{
r
c
x
%
<br />
Q
0
0
R
M
N
W
B
B
D
H
H
H
H
D
D
D
B
B
B
W
W
B
H
@
U
&
O
Y
b
Y
Y
b
Z
P
g
4
d
h
h
q
q
q
q
q
S
S
S
g
g
6
m
q
g
V
4
X
G
b
Y
&


&
for i in range(n):
8
freq = (1^i)*frequency
$
amp = p^i
K
total += interpolatedNoise(x*freq, y*freq)*amp
D
        total = total/n
W
M
0
Q
:
:
:
;
;
^
=
+
+
/
\
\
<
)
v
c
r
{
}
I
!
!
?
I
}
{
s
r
l
c
<br />
M
M
M
N
W
W
B
D
H
H
@
@
@
K
K
K
H
H
H
H
B
B
D
H
@
U
8
A
O
k
k
k
Y
b
Z
G
X
g
E
4
S
S
S
S
S
g
g
g
g
g
6
6
m
S
h
d
E
X
G
G
&
&
8
U
@
H
B
W
M
M
;
;
;
;
^
=
=
+
/
/
)
)
i
v
x
l
s
*
}
I
!
!
?
I
}
*
{
s
r
l
<br />
B
B
B
D
D
H
H
K
K
@
$
$
$
$
$
@
@
@
@
@
B
D
D
H
K
$
U
&
A
A
A
O
O
k
Y
b
Z
G
P
X
S
S
S
S
S
g
g
g
g
g
6
m
m
S
g
V
d
E
g
X
8
8
U
$
@
H
D
B
W
N
=
=
=
=
+
+
/
/
"
"
%
%
x
c
r
s
*
}
I
?
?
?
I
I
}
*
{
s
r
r
<br />
K
K
@
@
@
$
$
U
U
U
U
U
U
U
U
U
U
$
$
$
D
D
D
H
K
@
$
U
U
8
A
A
A
O
O
k
Y
b
b
Z
q
q
q
q
q
q
S
S
S
S
m
m
q
S
g
h
V
d
4
4
@
@
K
K
H
D
B
W
N
N
"
"
"
"
|
|
)
)
)
)
r
s
s
{
*
}
I
?
?
!
}
}
}
*
*
{
s
s
r
r
<br />
8
8
8
8
8
&
&
&
&


&
return total
8
8
8
8
8
8
8
8
8
8
D
D
D
D
H
H
K
@
@
@
&
&
A
A
A
O
O
k
k
k
6
6
6
6
6
6
6
6
m
m
q
q
S
S
g
g
h
V
V
V
B
B
B
W
W
N
N
M
M
R
<
<
<
<
<
>
>
>
>
>
I
I
I
?
?
!
!
]
]
[
{
{
{
s
s
s
r
r
r
l
<br />
O
O
O
O
O
O
O
O
k
k
&
&
&
&
&
&
&


&
#--DO STUFF ---------------------------------------------------------
&
#set headers
&
print """Content-type: text/html\n\n"""
B
B
B
D
D
D
D
H
H
H
&
&
&
A
A
A
A
A
O
O
F
F
F
F
F
F
F
F
F
F
S
S
S
g
g
g
h
h
h
h
R
R
R
R
0
0
0
0
Q
Q
i
i
v
v
v
v
v
v
v
v
[
[
[
[
[
1
1
1
1
1
r
r
r
l
l
l
l
l
l
l
<br />
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
&
&
&
&
&
&
&
&
&


&
#css/html
B
print """<html><head><style type="text/css">body{background:#000000; font-family: Monospace; line-height:8px; letter-spacing: -1px; font-size: 8px;color:#FFFFFF;}</style></head>"""
B
print "<body>"
B
B
B
B
B
B
B
B
&
&
&
A
A
A
A
A
A
A
2
2
2
2
2
2
2
2
2
2
g
g
g
g
g
g
g
g
g
h
.
.
.
.
.
.
.
.
.
.
x
x
x
x
x
x
x
x
x
x
t
t
t
t
t
a
a
a
a
a
c
c
c
c
c
c
c
c
c
c
<br />
K
@
@
$
8
&
A
k
Y
Y
b
b
Y
Y
k
O
O
A
A
&
&
&
8
8
$
@
K
H
D
B
B
B
D
H
K
@
U
8
&
&
A
A
k
b
X
4
g
m
F
2
2
2
2
5
p
6
m
S
S
g
g
h
d
X
b
&
K
W
0
.
.
`
-
:
=
"
\
i
%
c
c
c
l
s
*
I
!
[
t
a
a
a
t
[
!
I
*
s
l
c
<br />
K
@
@
$
8
&
A
k
Y
Y
b
Y
Y
Y
k
O
O
A
A
&


&
#ascii list arranged according to onscreen character-density
&
chars = ['.', '`', '-', '_', "'", ':', ';', '^', '=', '+', '/', '"', '|', ')', """\\""", '<', '>', ')', 'i', 'v', '%', 'x', 'c', 'l', 'r', 's', '{', '*', '}', 'I', '?', '!', ']', '[', '1', 't', 'a', 'e', 'o', '7', 'z', 'j', 'L', 'u', 'n', 'T', "#", 'J', 'C', 'w', 'f', 'y', '3', '2', '5', 'F', 'p', '6', 'm', 'q', 'S', 'g', 'h', 'V', 'd', '4', 'E', 'g', 'X', 'P', 'G', 'Z', 'b', 'Y', 'k', 'O', 'A', '&', '8', 'U', '$', '@', 'K', 'H', 'D', 'B', 'W', 'N', 'M', 'R', '0', 'Q']
&
8
U
@
K
H
D
B
B
B
D
H
K
@
U
8
&
&
&
A
k
b
P
4
g
m
p
5
2
2
5
F
p
6
q
S
g
g
h
V
4
X
Y
8
K
N
0
.
.
`
_
:
=
"
<
i
%
x
c
l
r
s
*
I
!
[
t
a
a
a
t
[
!
I
*
s
l
c
<br />
@
@
@
$
U
&
A
O
k
Y
Y
Y
Y
k
k
O
O
A
A
&
A
A
&
8
U
$
@
K
H
H
B
D
D
H
K
@
U
8
&
&
&
&
O
Y
G
E
V
S
m
p
F
F
p
6
m
q
S
g
h
V
d
4
g
G
k
U
H
N
0
.
-
-
'
;
+
|
<
i
%
x
l
l
r
s
*
I
!
[
1
t
a
a
t
[
!
I
*
s
r
l


<br />
charlen = len(chars) #length of chars[]
@
@
@
$
U
8
A
O
O
k
Y
Y
Y
k
k
O
O
A
A
A
O
A
A
&
8
U
$
@
K
K
D
D
H
K
K
$
U
8
8
&
8
&
A
k
Z
X
4
V
S
q
m
m
q
S
g
h
V
d
d
4
P
P
Z
k
&
@
B
R
Q
.
'
:
;
=
/
)
>
i
%
x
r
r
s
{
}
?
!
[
1
t
t
t
1
[
!
I
}
{
s
r
<br />
@
@
$
$
U
8
&
A
O
O
Y
Y
Y
k
k
O
O
O
A
A
O
O
A
A
&
8
U
U
$
$
H
H
H
K
@
$
$
U
8
8
8
8
&
O
Y
G
X
E
d
V
V
V
V
d
4
E
E
g
X
X
k
O
A
U
K
B
M
Q
.
-
=
=
+
"
)
<
)
v
x
c
s
{
{
*
I
?
]
[
1
t
1
[
[
]
?
I
*
{
s
r
<br />
$
$
$
U
U
8
&
&
A
A
Y
Y
Y
Y
k
k
k
O
O
O
O
O
O
A
A
&
8
8
U
U
H
H
K
K
@
@
$
U
U
U
8
8


&
_octaves = random.randint(2, 4) #Calculates how many octaves the noise should be calculated over: 1 < octaves < 5
A
_frequency = random.uniform(0.1, 0.75) #Changes the "visual complexity" of the noise: 0.1 < frequency < 1
k
_modifier = random.randint(0, charlen/2) #Modifies the +/- range the Noise operates over
b
_threshold = random.randint(0, 20) #Shifts the noise into a new range +/- _modifier
G
P
g
g
P
P
P
P
G
Z
Z
b
b
Y
K
K
H
B
N
0
.
`
_
'
|
|
)
\
>
i
v
x
c
l
*
}
}
I
?
!
]
[
1
1
!
!
?
I
}
*
{
s
r
r
<br />
$
$
U
U
8
8
&
&
&
A
b
b
b
b
Y
Y
Y
Y
Y
k
O
O
A
A
A
&
&
8
8
8
H
H
K
K
K
@
@
$
$
$
8
8
&
A
O
k
Y
Z
Z
G
O
O
O
A
A
&
&
8
8
8
0
0
Q
.
`
-
'
;
^
=
)
)
i
i
%
x
c
l
r
r
?
?
?
!
!
]
[
1
1
1
*
*
*
{
s
s
r
l
c
c
<br />
U
U
U
U
8
8
8
&
&
&
Z
Z
Z
Z
Z
Z
b
b
b
b
A
A
A
A
&


&
#the x,y loop
&
for y in range(100):
&
    for x in range(100):
8
        #PerlinNoise2d args = xpos, ypos, freq, persistence, octaves
8
        n = int((perlinNoise2d(x, y, _frequency, _octaves)*_modifier)+_threshold)
H
        if(n > charlen):
H
            print chars[charlen]
H
        else:
H
            print chars[n]
K
K
K
@
@
@
8
&
&
&
A
O
k
k
Y
Y
K
K
K
K
K
H
H
H
H
D
:
:
;
;
^
=
+
/
"
"
c
c
c
l
l
r
s
s
{
{
]
]
]
[
[
[
1
1
t
t
l
l
l
c
c
x
x
%
%
%
<br />
8
8
8
8
8
8
8
8
8
&
G
G
G
G
G
G
G
G
G
G
&
&
&
&
&
&
&
8
8
8
H
H
H
H
H
H
H
H
K
K
&


&
    print "<br />"
&
&
A
A
O
O
O
O
N
N
M
M
M
M
M
M
M
M
|
|
|
)
)
)
\
\
<
<
{
{
{
{
*
*
*
}
}
}
1
1
1
1
1
t
t
t
t
t
v
v
v
v
i
i
i
i
i
i
<br />
8
8
8
8
8
8
8
8
8
8
P
P
P
P
P
P
P
P
P
P
8
8
8
8
8
8
8
8
8
8
H
H
H
H
H
H
H
H
H
H
&
&
A
A
A
A
A
A
A
A
Q
Q
Q
Q
Q
Q
Q
Q
.
.
)
)
)
)
)
)
)
)
)
)
I
I
I
I
I
I
I
I
I
I
t
t
t
t
t
t
t
a
a
a
>
>
>
>
>
>
>
>
>
>
<br />
$
$
$
U
U
U
U
8
8
8
8
8
&
A
O
Y
b
Z
G
P
P
P
G
Z
b
Y
O
A
&
8
8
8
8
U
$
@
K
K
H
H
H
H
H
K
@
$
U
8
&
&
A
&
8
$
K
B
N
R
Q
.
.
.
`
'
;
+
|
<
)
i
i
v
v
x
c
r
{
*
I
I
?
?
?
!
]
[
1
t
t
a
a
t
1
!
I
s
c
v
)
>


<br />
#close html
$
print "</body>"
$
</source>
$
$
U
U
U
8
8
8
8
8
&
A
O
k
b
Z
G
P
P
P
G
Z
b
Y
O
A
&
&
8
8
8
U
$
@
@
K
H
H
D
H
H
K
@
$
U
8
&
&
&
&
8
$
K
B
N
R
Q
.
.
`
-
'
;
+
|
<
)
i
i
v
%
x
c
r
{
*
I
I
I
I
?
?
!
]
[
1
t
t
t
t
[
!
}
s
c
v
)
>
<br />
$
$
$
$
$
U
U
U
U
U
U
8
8
&
A
O
Y
b
Z
Z
P
G
G
Z
b
Y
O
A
&
&
8
8
U
U
$
@
@
K
H
H
D
D
H
K
K
@
$
U
8
&
8
8
U
@
H
B
M
0
Q
.
-
-
_
:
^
/
)
<
)
i
v
v
%
x
c
r
s
*
}
I
}
}
}
I
?
!
!
]
[
[
1
[
]
?
*
r
c
v
)
>
 
<br />
@
@
@
@
$
$
$
$
$
U
U
U
U
8
&
A
O
k
Y
b
G
G
Z
b
Y
k
O
A
A
&
8
U
U
U
$
@
@
K
H
H
D
D
D
H
K
@
$
$
U
U
$
@
K
H
B
N
R
Q
.
.
'
'
:
^
+
"
\
>
)
i
v
v
%
x
c
l
s
{
*
*
{
{
{
*
*
}
I
I
?
?
]
!
?
}
{
l
x
v
)
>
<br />
K
K
K
K
K
@
@
@
@
@
U
U
U
8
&
&
A
O
k
k
Z
Z
b
b
Y
k
O
A
&
&
U
U
$
$
$
@
K
K
H
H
B
B
B
D
H
H
K
@
@
$
D
B
B
W
M
0
Q
.
`
-
^
^
=
/
"
)
<
)
i
v
i
i
v
%
x
c
l
r
s
s
l
l
r
r
s
s
{
{
*
*
I
I
}
{
r
c
%
i
)
>
<br />
H
H
H
H
H
H
K
K
K
K
U
U
U
8
8
&
A
A
O
O
Y
Y
Y
k
k
O
A
A
&
&
$
$
@
@
@
K
K
H
H
H
W
W
W
B
B
D
D
H
H
H
R
0
0
Q
.
.
-
_
'
'
/
"
"
|
\
<
)
i
v
%
)
)
i
i
v
%
x
c
c
l
x
x
x
x
c
c
l
l
l
r
{
{
s
r
l
x
%
i
)
>
 
<br />
D
D
D
D
D
D
D
D
D
D
8
8
8
8
&
&
A
A
O
O
O
O
O
O
A
A
&
&
&
8
K
K
K
K
K
H
H
H
H
H
M
M
N
N
N
W
W
W
B
B
_
_
_
'
'
:
;
^
=
=
\
\
<
<
>
)
i
v
%
%
<
<
>
>
)
)
i
i
v
v
v
v
v
v
v
%
%
%
%
x
r
r
l
l
c
x
v
i
i
)
<br />
W
W
B
B
B
B
B
B
B
B
&
&
&
A
A
A
O
O
O
O
&
 
&
&
&
&
8
8
8
8
8
H
H
H
H
H
D
D
D
D
D
R
R
R
R
R
M
M
M
M
M
+
+
+
/
/
"
"
|
|
|
)
)
i
i
v
v
%
%
x
x
)
)
)
)
\
\
\
<
<
<
)
)
)
)
)
)
i
i
i
i
c
c
c
x
x
%
v
v
i
i
<br />
N
N
N
W
W
W
W
W
W
W
O
O
O
O
O
O
O
k
k
k
8
8
8
8
U
U
U
U
U
U
D
D
D
D
D
B
B
B
B
B
Q
Q
Q
0
0
0
0
0
0
0
<
<
<
<
<
<
>
>
>
>
%
%
%
%
x
x
x
c
c
c
"
"
"
"
"
"
|
|
|
|
>
>
>
>
>
>
>
>
>
>
x
x
x
%
%
%
v
v
v
v
<br />
N
N
N
N
N
N
N
N
N
N
k
k
k
k
k
k
k
k
k
k
$
$
$
$
$
$
$
$
$
$
B
B
B
B
B
B
B
B
B
B
.
.
.
.
.
.
.
.
Q
Q
v
v
v
v
v
v
v
v
v
v
c
c
c
c
c
c
c
c
c
c
+
+
+
+
+
+
+
+
+
/
 
<
<
<
<
<
<
<
<
<
<
%
%
%
%
%
%
%
%
v
v
<br />
B
B
B
W
W
W
N
N
N
N
N
N
W
B
H
$
8
A
O
k
k
k
k
O
A
&
8
U
U
$
$
$
$
@
K
H
D
D
B
B
B
W
W
N
M
R
0
Q
Q
.
.
.
`
_
;
+
)
>
i
v
%
%
%
%
x
x
c
c
c
c
l
c
x
%
i
>
)
|
/
+
+
+
+
/
"
|
)
\
\
<
<
<
<
>
>
)
i
v
v
%
 
<br />
B
W
W
W
W
N
N
N
N
M
N
N
W
B
H
@
U
&
O
k
k
k
k
O
A
&
8
U
U
$
$
@
@
K
K
H
D
B
B
W
W
W
N
N
M
R
0
Q
.
.
.
.
`
_
;
+
|
<
i
v
%
%
%
%
x
x
x
c
c
c
c
c
x
v
i
<
)
"
/
+
=
=
+
+
/
"
|
)
)
\
\
\
\
<
>
>
)
i
i
v
<br />
W
W
W
N
N
N
N
M
M
M
N
N
W
B
H
@
U
&
A
O
k
k
O
O
A
&
8
U
U
$
K
K
K
H
D
D
B
W
W
N
N
N
M
M
R
0
Q
.
.
.
.
.
`
_
;
+
|
<
)
i
v
v
%
%
%
x
x
x
x
c
x
x
%
i
)
<
)
"
/
+
;
;
;
^
=
+
/
/
"
"
|
|
|
)
)
\
<
<
>
>
<br />
N
N
N
N
M
M
M
M
R
R
N
N
W
B
H
@
$
8
 
&
A
O
O
A
A
&
8
U
U
$
$
D
D
B
B
W
W
N
M
M
R
R
R
R
0
Q
Q
.
.
.
`
.
`
-
'
;
+
"
\
<
)
v
v
v
v
v
%
%
%
x
x
v
i
i
>
<
)
"
/
+
=
_
_
_
'
'
:
;
^
^
^
+
+
/
/
"
"
|
|
)
)
<br />
M
M
M
M
M
M
R
R
R
R
W
W
B
D
H
K
$
U
8
&
&
8
8
8
U
$
$
@
@
K
N
N
M
M
R
R
0
0
Q
Q
Q
Q
Q
.
.
.
`
`
-
-
-
-
_
:
^
+
"
)
\
<
i
i
i
i
i
i
v
v
v
v
\
\
\
)
"
/
+
^
;
;
.
.
.
.
.
`
`
-
-
_
^
^
^
^
=
=
+
+
/
/
<br />
M
M
M
M
R
R
R
R
R
R
B
B
D
H
K
@
$
U
8
8
@
@
@
K
K
H
H
D
D
D
Q
Q
Q
Q
.
.
.
.
.
.
.
.
.
.
`
`
-
-
_
_
'
'
:
;
=
+
"
|
\
\
>
>
>
>
)
)
)
)
)
)
=
=
=
^
;
:
'
_
-
-
M
M
M
M
R
R
0
0
0
Q
:
:
;
;
;
^
^
^
=
=
<br />
M
M
M
M
R
R
R
R
R
R
H
H
K
K
@
$
$
U
8
8
W
W
W
W
N
N
N
M
M
M
`
`
-
-
-
-
_
_
_
_
`
`
-
-
-
-
_
_
_
'
^
^
=
=
+
/
|
)
)
\
\
\
\
<
<
<
<
 
<
<
<
`
`
`
.
.
.
Q
0
0
R
D
D
D
D
D
B
B
B
W
W
:
:
:
;
;
;
;
^
^
^
<br />
M
M
M
M
M
M
M
M
M
R
@
@
$
$
$
U
U
8
8
8
Q
Q
Q
Q
.
.
.
.
.
.
:
:
:
:
:
:
:
;
;
;
_
_
_
_
_
_
_
'
'
'
/
/
/
"
"
|
)
)
\
\
)
)
)
)
)
)
)
)
)
)
W
W
W
B
B
B
D
D
D
H
$
$
$
$
@
@
@
@
@
@
;
;
;
;
^
^
^
^
^
^
<br />
M
M
M
M
M
M
M
M
M
M
U
U
U
8
8
8
8
8
&
&
_
_
_
_
_
_
_
_
_
_
^
^
^
=
=
=
=
=
=
=
_
_
_
_
'
'
'
'
'
'
|
|
)
)
)
)
\
\
\
\
"
"
"
"
"
"
"
"
"
"
U
U
U
U
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
=
=
=
=
=
=
=
=
=
=
<br />
N
N
N
N
N
N
N
N
N
N
&
&
&
&
&
&
 
&
&
&
&
;
;
;
;
;
;
;
;
;
;
+
+
+
+
+
+
+
+
+
+
'
'
'
'
'
'
'
'
'
'
\
\
\
\
\
\
\
<
<
<
/
/
/
/
/
/
/
/
/
/
k
k
k
k
k
k
k
k
k
k
A
A
A
A
A
A
A
A
A
A
+
+
+
+
+
+
+
+
+
+
<br />
-
-
-
`
.
Q
0
R
M
N
N
N
W
B
D
K
$
U
8
&
&
&
U
K
B
R
.
_
:
^
=
=
=
=
=
+
+
+
/
/
/
/
+
+
=
^
;
:
'
'
'
'
:
;
=
+
"
)
\
<
<
<
\
\
)
|
"
"
/
/
/
+
^
_
.
N
H
8
O
Y
b
b
b
Y
Y
k
k
O
O
O
O
A
8
@
B
R
.
'
^
+
<br />
-
-
-
`
.
Q
0
R
M
M
N
N
W
B
H
K
$
U
8
 
&
A
&
U
@
D
M
.
-
'
;
^
^
^
=
=
=
+
+
+
+
/
/
+
+
=
^
;
:
:
'
'
'
:
;
=
+
"
|
\
\
<
<
\
\
)
|
|
"
/
/
/
+
^
_
.
M
H
U
O
Y
b
b
b
Y
Y
k
k
k
O
O
O
A
8
@
B
R
.
_
;
=
<br />
-
-
`
`
.
Q
0
R
M
M
W
W
B
D
H
@
$
8
&
&
A
A
8
$
H
N
0
.
-
'
^
^
^
^
^
=
=
=
+
+
+
+
+
=
=
^
;
:
:
'
'
:
:
;
=
+
"
|
)
\
<
<
\
\
)
)
|
"
"
/
+
=
;
_
.
M
H
$
&
O
b
b
b
b
Y
Y
k
k
k
k
O
A
8
$
D
M
.
-
:
;
<br />
-
`
`
.
.
Q
0
R
R
M
D
D
H
K
@
$
U
8
&
A
O
A
&
U
K
B
M
0
.
`
;
;
;
;
;
^
^
^
^
=
+
+
=
=
^
^
;
:
:
'
:
:
;
^
=
+
"
|
)
)
\
\
\
\
)
|
|
"
"
"
^
;
'
-
Q
M
D
$
8
A
Z
Z
Z
b
b
Y
Y
Y
k
k
A
A
8
$
H
N
0
.
-
'
<br />
.
.
.
.
Q
0
R
R
M
M
@
@
@
$
U
8
 
&
A
O
O
A
A
&
U
@
H
W
M
0
Q
:
:
:
:
;
;
;
;
;
^
=
=
=
=
^
^
;
:
:
:
;
;
^
=
+
/
"
|
)
)
)
)
)
)
|
|
"
"
/
/
_
_
`
.
R
W
H
$
8
&
Z
Z
Z
Z
b
b
b
Y
Y
Y
&
&
8
$
H
W
M
Q
.
`
<br />
0
0
0
R
R
M
M
N
W
W
8
8
8
&
A
A
O
k
k
Y
&
&
8
$
@
H
B
N
M
R
:
:
:
:
:
:
:
:
;
;
=
=
=
^
^
^
;
;
:
:
=
=
=
+
/
"
"
|
)
)
|
|
"
"
"
/
/
/
+
+
Q
Q
0
M
W
D
@
U
&
A
Z
Z
Z
b
b
b
b
Y
Y
Y
8
8
U
@
H
B
N
R
0
Q
<br />
W
W
W
W
B
B
B
D
D
D
k
k
k
k
Y
Y
b
b
Z
Z
$
$
@
K
H
D
B
N
N
M
'
'
'
:
:
:
:
:
:
:
=
=
^
^
^
^
;
;
;
;
/
/
/
"
"
|
|
)
)
\
+
+
+
+
=
=
=
=
^
^
B
B
D
H
@
$
8
&
O
O
b
b
b
b
b
b
Y
Y
Y
Y
$
$
@
K
H
B
W
M
R
R
<br />
K
K
K
K
K
@
@
@
@
$
Z
Z
G
G
G
G
P
P
P
P
D
D
D
B
B
W
N
M
M
M
:
:
:
:
:
:
:
:
:
:
^
^
^
^
^
^
^
;
;
;
|
|
|
)
)
)
\
\
\
\
;
;
;
;
;
;
:
:
:
:
8
8
&
 
&
A
O
k
Y
b
b
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
H
H
H
D
D
B
W
N
M
M
<br />
8
8
8
8
8
8
8
8
&
&
g
g
g
g
g
g
g
g
E
E
N
N
N
M
M
M
R
R
R
R
:
:
:
:
:
:
:
:
:
:
^
^
^
^
^
^
^
^
^
^
\
\
\
<
<
<
<
<
<
<
_
_
_
_
_
_
_
_
_
_
b
b
b
Z
Z
G
G
G
P
P
k
k
k
k
k
k
k
k
k
k
B
B
B
B
W
W
W
N
N
N
<br />
O
O
O
O
O
O
O
O
O
O
4
4
4
4
4
4
4
4
4
4
0
0
0
0
0
0
0
0
0
0
:
:
:
:
:
:
:
:
:
:
^
^
^
^
^
^
^
^
^
^
>
>
>
>
>
>
>
>
>
>
`
`
`
`
`
`
`
`
`
`
X
X
X
g
g
g
g
g
g
g
k
k
k
k
k
k
O
O
O
O
W
W
W
W
N
N
N
N
N
N
<br />
_
-
`
Q
M
B
K
U
A
O
k
k
Y
b
Z
P
X
E
4
4
d
4
g
G
Y
8
K
B
M
0
Q
Q
.
.
.
-
_
'
:
:
:
:
:
;
;
;
;
^
^
^
^
^
=
+
/
|
)
\
<
>
>
>
 
<
)
"
=
;
'
-
`
`
.
Q
M
D
$
A
b
P
g
E
E
g
X
P
G
b
Y
k
O
O
O
A
&
U
@
H
D
W
N
<br />
_
-
`
.
R
B
K
U
&
O
k
k
Y
b
Z
G
X
g
E
4
d
4
g
G
Y
&
@
B
M
0
0
Q
Q
.
.
`
-
_
'
'
:
:
:
:
:
:
;
;
;
;
^
^
=
+
/
"
)
\
<
>
>
>
<
)
"
+
;
'
-
`
`
.
Q
M
B
$
A
Y
G
X
g
g
g
X
G
Z
b
Y
k
O
O
A
&
8
$
@
H
B
W
N
<br />
_
-
`
.
R
W
H
$
8
&
O
O
k
Y
b
G
P
X
g
E
4
4
g
G
Y
&
$
D
W
M
R
R
0
0
Q
.
.
`
-
_
_
_
_
_
_
_
'
'
'
'
;
;
^
=
+
/
|
)
\
\
)
>
<
\
|
/
^
:
'
_
-
`
.
0
W
K
8
O
b
Z
P
P
P
G
Z
Y
k
O
A
A
&
8
8
$
@
H
B
W
N
M
<br />
-
-
`
.
R
N
D
K
$
8
O
O
k
Y
b
Z
G
P
X
g
4
E
g
G
Y
A
U
K
D
W
N
N
N
M
R
0
Q
Q
.
.
.
.
.
.
`
`
`
`
`
`
;
;
;
^
=
+
/
"
|
)
)
)
>
 
<
)
"
+
^
;
:
_
-
`
Q
M
B
K
U
A
O
b
b
Y
Y
k
O
A
&
8
U
$
@
@
K
D
B
N
M
R
0
<br />
`
`
.
Q
R
N
B
H
@
$
O
O
k
k
Y
b
Z
G
P
P
E
E
X
G
b
O
&
$
K
H
D
D
D
B
W
W
N
M
M
R
0
0
Q
Q
Q
Q
Q
Q
Q
.
;
;
;
^
=
+
/
"
"
|
)
)
>
<
\
|
"
+
=
^
'
_
-
.
0
M
B
K
$
U
A
&
&
8
8
U
$
@
K
K
D
D
B
W
N
M
R
0
Q
.
<br />
.
.
Q
0
M
N
B
H
K
K
k
k
k
Y
Y
b
Z
G
G
P
g
g
X
G
b
k
A
8
U
$
@
@
@
@
K
H
H
D
D
D
M
M
M
M
R
R
R
R
R
R
^
=
=
=
+
/
"
"
|
|
)
)
)
>
<
)
|
"
/
/
'
'
_
`
.
0
M
W
D
H
K
K
K
H
H
D
B
B
W
W
M
M
M
R
0
Q
.
.
.
.
<br />
R
R
R
M
N
W
D
H
H
K
Y
Y
Y
b
b
Z
Z
G
G
G
X
X
P
G
Z
Y
k
A
&
&
&
&
8
8
8
U
U
U
$
$
N
N
N
N
N
N
N
N
M
M
/
/
"
"
|
|
|
)
)
\
)
)
)
>
 
<
\
)
)
|
|
_
_
-
`
.
.
0
R
M
N
M
M
M
R
R
R
0
0
Q
Q
Q
Q
Q
.
.
.
`
`
-
-
<br />
W
W
W
B
B
D
H
H
K
K
Z
Z
Z
Z
Z
G
G
G
G
P
P
G
G
Z
Z
b
Y
k
k
O
k
k
k
O
O
O
O
O
A
A
N
N
N
N
N
N
N
N
N
N
\
\
\
<
<
<
<
>
>
>
>
>
>
>
<
<
\
\
\
)
-
-
-
`
.
.
Q
Q
0
0
`
`
`
`
`
-
-
-
-
_
`
`
`
`
-
-
-
_
_
_
<br />
H
H
H
H
H
K
K
K
K
@
G
G
G
G
P
P
P
P
P
P
G
Z
Z
Z
Z
b
b
b
Y
Y
b
b
b
b
b
b
b
b
b
b
N
N
N
N
N
N
N
N
N
N
i
i
i
i
i
i
v
v
v
v
>
>
>
>
<
<
<
<
\
\
`
`
.
.
.
.
.
.
Q
Q
;
;
;
;
;
;
;
;
^
^
_
_
_
_
_
_
_
'
'
'
<br />
@
@
@
@
@
@
@
@
@
@
P
P
P
P
X
X
X
X
X
X
Z
Z
Z
Z
Z
Z
b
b
b
b
G
G
G
G
G
G
G
G
G
G
N
N
N
N
N
N
N
N
N
N
x
x
x
x
x
x
x
x
x
x
 
<
<
<
<
<
<
<
<
<
<
.
.
.
.
.
.
.
.
.
.
+
+
+
+
+
+
+
+
+
+
'
'
'
'
'
'
'
'
'
'
<br />
_
-
`
.
Q
M
W
D
K
@
@
$
$
8
A
k
b
Z
P
X
X
X
X
P
P
G
G
Z
Z
Z
Z
Z
Z
Z
Z
G
G
G
G
G
P
G
Z
Y
A
8
@
H
B
N
N
M
0
.
'
=
|
>
v
x
c
c
x
%
v
i
)
>
>
<
<
<
\
|
/
^
:
_
`
.
.
.
.
-
_
:
^
=
+
/
/
/
/
+
=
^
;
;
:
:
<br />
_
-
`
.
Q
M
W
D
K
@
@
$
$
8
A
O
Y
Z
G
P
X
X
P
P
P
G
G
Z
Z
Z
Z
Z
Z
Z
Z
Z
G
G
G
G
P
G
Z
Y
O
8
@
H
B
W
N
N
R
.
_
^
"
 
<
i
%
c
x
x
%
v
i
)
)
>
<
>
<
\
)
/
=
;
_
-
`
.
.
`
-
'
:
^
+
/
"
"
/
/
+
+
=
^
;
:
:
<br />
-
-
`
.
Q
R
W
B
H
K
@
$
$
8
&
O
Y
b
G
G
P
P
P
P
G
G
Z
Z
Z
b
b
Z
Z
Z
Z
Z
G
G
G
G
P
P
G
b
k
&
U
@
H
D
W
W
M
Q
`
:
+
|
<
)
x
x
x
%
v
i
i
)
>
>
)
)
>
\
|
/
=
;
'
_
-
_
_
'
;
^
+
/
"
|
"
"
"
/
+
=
=
^
;
;
<br />
-
`
`
.
Q
R
N
B
D
H
$
$
U
8
&
O
k
Y
Z
Z
P
P
G
G
G
Z
Z
Z
b
b
Z
Z
Z
Z
Z
Z
G
G
G
G
X
X
P
Z
Y
O
&
U
$
@
B
B
N
R
.
_
;
+
|
)
c
c
x
x
%
v
i
i
)
)
%
%
v
)
<
\
|
/
=
=
:
;
;
^
+
/
"
|
)
\
|
"
"
"
/
+
=
=
^
^
<br />
.
.
.
Q
0
M
N
B
D
D
$
$
U
8
&
A
O
Y
b
b
G
G
G
Z
Z
Z
b
b
b
b
Z
Z
G
G
G
G
G
G
P
P
g
g
X
P
Z
Y
O
A
&
8
B
W
N
R
.
`
'
^
+
/
l
l
c
c
x
x
%
v
v
v
l
c
c
x
v
)
>
\
)
)
+
+
/
"
|
)
\
 
<
>
>
|
|
"
"
/
/
+
+
=
=
<br />
Q
Q
Q
0
R
N
W
B
D
D
U
U
8
8
&
A
O
k
Y
Y
Z
Z
Z
Z
b
b
b
b
Y
Y
P
P
P
P
P
P
X
X
X
X
E
g
g
X
P
Z
b
Y
k
O
M
M
R
Q
.
-
'
;
^
=
s
s
s
r
r
l
l
c
c
c
s
s
s
r
l
c
%
v
i
i
)
)
)
\
\
<
>
)
i
i
"
"
"
/
/
/
+
+
=
=
<br />
R
R
M
M
N
W
B
B
D
D
8
8
&
&
A
A
O
k
k
k
b
b
b
b
b
Y
Y
Y
Y
Y
g
g
g
g
g
g
E
E
E
E
E
E
g
g
X
P
G
Z
b
b
.
.
.
`
_
'
;
^
=
+
}
}
}
}
*
*
*
{
{
{
}
}
*
*
{
s
r
r
l
l
<
<
>
>
)
)
i
i
v
v
/
/
+
+
+
+
=
=
=
=
<br />
W
W
W
B
B
D
D
H
H
H
&
A
A
A
A
O
O
k
k
k
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
d
d
d
d
d
d
d
d
d
d
E
E
g
g
X
X
P
P
G
G
:
:
;
;
^
=
+
/
/
"
]
]
]
]
]
!
!
!
!
!
?
?
?
I
I
}
}
*
*
*
)
i
i
i
i
v
v
v
%
%
=
=
=
=
^
^
^
^
^
^
<br />
H
H
H
H
H
H
K
K
K
K
O
O
O
O
O
O
k
k
k
k
Y
Y
Y
k
k
k
k
k
k
k
h
h
h
h
h
h
h
h
h
h
g
g
g
g
g
X
X
X
X
X
"
"
"
|
|
|
)
)
)
\
a
a
a
a
a
a
t
t
t
t
!
!
!
!
!
?
?
?
?
?
v
v
v
v
v
v
v
%
%
%
;
;
;
;
;
;
:
:
:
:
<br />
 
@
@
@
@
@
@
@
@
@
@
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
S
S
S
S
S
S
S
S
S
S
g
g
g
g
g
g
g
g
g
g
<
<
<
>
>
>
>
>
>
>
7
7
7
7
7
o
o
o
o
o
]
]
]
]
]
]
]
]
]
]
v
v
v
v
v
%
%
%
%
%
'
'
'
'
'
'
'
'
'
'
<br />
.
.
Q
0
M
N
B
H
K
@
@
@
$
U
8
&
A
O
O
k
k
k
k
k
k
k
k
k
k
k
k
k
Y
Z
P
g
4
V
g
S
S
S
S
g
h
V
4
E
E
g
g
X
Z
A
K
R
-
=
)
>
)
i
v
c
s
}
]
t
e
7
z
7
7
o
e
a
t
1
[
]
]
]
!
?
}
{
r
c
x
%
%
v
i
>
\
|
+
^
:
'
<br />
.
.
Q
0
M
W
B
H
K
@
$
$
$
U
8
&
A
O
k
k
k
k
k
k
k
k
k
k
k
k
k
k
Y
Z
P
g
4
V
h
g
S
S
g
h
V
d
4
E
g
g
g
X
Z
A
K
M
-
^
|
<
)
)
v
x
r
}
!
1
e
o
7
7
7
o
e
a
t
1
[
]
]
]
!
I
}
{
r
c
x
%
v
i
)
>
)
"
+
^
:
'
<br />
0
0
R
M
N
B
D
K
@
$
U
U
8
8
&
A
O
k
Y
Y
k
k
k
k
k
k
k
k
k
k
O
O
k
b
G
X
E
4
V
h
g
g
h
V
d
4
E
g
g
X
X
P
b
A
@
N
.
;
/
)
)
)
v
x
r
*
?
[
t
e
7
7
o
o
e
a
t
1
[
[
!
!
?
I
*
s
l
c
x
%
>
>
<
)
"
+
^
:
_
-
<br />
M
M
N
W
B
H
K
$
U
U
 
&
&
A
A
O
k
Y
Y
b
b
k
k
k
Y
Y
Y
Y
Y
Y
Y
A
A
O
k
b
G
X
g
E
4
V
V
d
d
4
E
g
X
X
P
P
G
Y
A
@
W
.
_
^
/
)
)
v
x
l
{
I
!
[
1
o
o
o
e
a
t
1
1
[
[
I
}
}
*
s
r
c
x
%
v
|
"
/
+
^
:
_
-
.
.
<br />
D
D
H
K
@
$
U
8
&
&
O
O
k
k
Y
b
b
Z
Z
G
k
k
k
k
k
k
k
k
k
k
&
&
A
O
k
b
Z
P
X
X
4
4
E
E
g
X
X
P
G
G
Y
Y
O
8
K
N
Q
-
:
^
i
i
v
x
l
s
}
?
!
]
e
e
a
a
t
1
1
[
[
]
r
r
r
l
x
%
v
i
)
>
:
:
'
_
-
.
Q
0
R
M
<br />
U
U
U
8
&
A
A
O
k
k
Y
b
b
b
Z
Z
G
G
P
P
O
O
O
O
O
O
O
O
O
O
8
&
&
A
O
k
Y
b
Z
G
g
g
X
X
X
P
G
G
Z
Z
8
8
$
K
B
M
.
-
'
:
%
x
x
l
r
{
}
I
!
!
t
t
1
1
[
[
]
]
!
!
i
i
)
>
>
<
\
)
|
|
0
0
0
R
M
N
B
D
H
H
<br />
k
k
k
Y
Y
b
b
Z
Z
G
Z
Z
Z
G
G
G
P
P
P
X
&
 
&
&
&
&
&
&
&
&
&
8
8
&
&
A
O
O
k
Y
Y
P
P
P
P
G
G
Z
Z
Z
Z
D
D
B
N
R
Q
`
_
'
:
r
r
s
{
*
}
I
?
!
]
]
]
]
!
!
!
?
?
I
I
+
+
+
=
=
^
^
;
:
:
K
K
@
@
$
U
8
8
&
&
<br />
P
P
P
P
X
X
g
g
g
g
P
P
P
P
P
P
X
X
X
X
$
$
$
$
$
$
$
$
$
$
8
8
8
&
&
A
A
A
O
O
G
G
G
Z
Z
Z
Z
b
b
b
Q
Q
.
.
`
_
'
:
;
^
}
}
I
I
?
!
!
]
[
[
I
I
I
}
}
}
}
*
*
*
.
.
.
.
.
.
.
Q
Q
Q
Y
Y
Y
Y
b
b
Z
Z
G
G
 
<br />
4
4
d
d
d
d
d
d
d
V
P
P
P
X
X
X
X
X
X
X
K
K
K
K
K
K
K
K
K
K
8
8
8
8
&
&
&
&
&
A
Z
Z
Z
Z
Z
b
b
b
b
b
:
:
:
;
;
^
^
=
=
+
]
[
[
[
[
1
1
1
1
t
{
{
{
{
{
s
s
s
s
s
B
B
B
B
D
D
D
D
D
D
E
E
E
E
E
E
4
4
4
4
<br />
h
h
h
h
h
g
g
g
g
g
X
X
X
X
X
X
X
X
X
X
D
D
D
D
D
D
D
D
D
D
8
8
8
8
8
&
&
&
&
&
b
b
b
b
b
b
b
b
b
b
+
+
+
/
/
/
/
/
/
/
t
t
a
a
a
a
a
a
a
a
r
r
r
r
r
r
r
r
r
r
U
U
U
U
U
U
U
U
U
U
g
g
g
g
g
g
g
g
g
g
<br />
b
b
Z
G
X
E
d
V
h
g
g
g
g
h
V
d
4
E
g
X
X
X
G
Z
k
A
U
@
H
D
B
D
D
H
K
@
$
U
8
8
8
&
 
&
A
A
O
k
Y
b
b
b
Y
O
U
H
M
.
'
=
/
"
|
)
>
%
r
}
!
1
a
e
a
t
1
]
?
}
{
r
l
l
c
v
<
/
_
0
B
@
8
&
A
O
Y
Z
X
E
V
g
S
<br />
Z
Z
G
P
X
E
d
V
g
g
S
g
g
h
V
d
4
E
g
g
X
X
G
Z
k
A
U
@
H
D
B
D
D
H
K
@
$
U
8
8
8
8
&
&
A
O
k
Y
Y
b
b
Y
O
U
H
M
.
'
=
/
"
|
)
>
%
l
*
!
1
t
a
a
t
[
!
I
*
{
r
l
c
x
v
\
+
_
0
B
@
8
A
A
O
Y
G
X
4
V
g
S
<br />
G
G
P
X
g
4
V
h
g
S
S
S
g
g
h
V
d
4
E
E
X
P
G
Z
k
A
8
$
K
H
B
B
D
D
H
K
@
$
U
U
8
8
8
&
&
A
O
k
k
Y
k
k
A
$
D
M
.
'
^
+
"
|
)
>
v
l
{
?
]
1
1
1
[
]
?
}
{
s
l
c
%
v
>
)
=
-
0
B
@
8
k
k
Y
Z
P
g
d
h
S
q
<br />
X
X
g
E
4
d
h
g
S
q
S
S
S
g
h
h
V
d
4
4
P
G
G
b
k
A
8
$
@
K
B
B
B
D
H
H
K
@
$
$
U
U
U
8
8
&
A
A
O
O
A
A
8
@
B
R
.
_
;
=
"
|
)
>
i
c
s
}
?
!
!
!
?
I
*
{
r
l
x
x
<
<
|
+
:
.
M
D
$
8
Z
Z
G
X
E
d
h
S
q
m
<br />
 
4
4
4
d
V
h
g
S
q
m
S
S
S
g
g
h
V
d
d
d
Z
Z
b
Y
O
A
8
$
@
K
W
W
B
B
D
H
H
K
K
@
@
@
$
$
U
U
8
8
&
&
U
$
@
D
N
0
.
_
:
^
|
|
)
<
i
%
l
s
*
}
{
{
{
s
l
c
x
v
i
i
=
=
;
_
.
R
B
@
8
A
g
E
E
d
V
g
q
m
6
p
<br />
h
h
h
g
S
S
q
m
6
6
g
g
g
h
h
V
V
d
d
d
k
k
O
O
&
8
U
$
@
K
W
W
W
B
B
D
D
H
H
H
K
K
K
K
@
@
$
$
$
U
D
B
W
N
0
.
-
'
;
^
|
)
\
<
)
v
x
l
r
s
%
%
%
v
i
)
>
<
\
\
.
.
0
M
B
K
U
&
k
Y
g
g
g
S
m
6
p
F
5
2
<br />
q
q
q
m
m
6
6
p
p
F
V
V
V
V
d
d
d
4
4
4
&
8
8
U
U
$
@
K
H
H
W
W
W
W
B
B
B
D
D
D
D
D
D
H
H
H
K
K
K
K
0
0
Q
.
`
-
'
;
^
=
)
)
\
<
>
i
v
%
x
c
)
)
|
|
"
/
/
+
+
=
@
@
$
8
&
k
b
G
P
X
p
F
F
5
5
2
3
y
f
f
<br />
p
p
p
p
F
F
F
5
5
5
4
4
4
E
E
E
E
E
g
g
@
K
K
K
H
H
D
D
B
B
W
W
W
W
W
W
B
B
B
B
B
B
B
B
B
B
D
D
D
D
_
_
_
'
:
;
^
=
+
+
\
\
\
 
<
>
>
)
i
v
v
:
:
:
:
'
'
_
_
_
_
G
G
P
X
g
E
4
d
V
h
f
f
f
w
w
C
C
J
J
J
<br />
5
5
5
5
2
2
2
2
2
2
X
X
X
X
X
X
X
X
X
X
B
B
B
W
W
W
W
W
N
N
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
=
=
=
=
+
+
/
/
"
"
\
<
<
<
<
>
>
>
)
)
.
.
Q
Q
Q
Q
Q
Q
0
0
S
S
S
q
q
m
m
6
6
p
T
T
T
T
T
n
n
n
n
n
<br />
3
3
3
3
3
3
3
3
3
3
G
G
G
G
G
G
G
G
G
G
M
M
M
M
M
M
M
M
M
M
W
W
W
W
W
W
W
W
W
W
N
N
N
N
N
N
N
N
N
N
"
"
"
"
|
|
|
|
|
|
<
<
<
<
<
<
<
<
 
<
>
N
N
N
N
N
N
N
N
N
N
2
2
2
2
2
2
2
2
3
3
L
L
L
L
L
L
L
L
L
L
<br />
5
5
5
5
2
2
2
3
3
3
3
3
2
p
m
g
d
E
P
G
G
Z
b
k
&
$
K
B
N
M
R
R
R
M
M
M
N
N
W
W
W
W
W
W
N
N
N
N
N
N
N
M
R
Q
`
_
;
+
"
|
)
)
)
)
)
\
\
<
<
<
<
<
)
/
^
'
.
0
M
W
B
B
K
8
k
X
V
m
5
3
y
y
f
w
J
#
n
u
L
j
<br />
5
5
5
5
5
2
2
3
3
3
3
3
5
p
m
g
d
E
X
G
G
Z
b
k
&
$
K
B
N
M
M
M
M
M
M
N
N
W
W
W
W
W
W
W
W
W
W
W
N
N
N
M
R
Q
.
_
;
=
/
"
|
|
)
)
)
\
\
\
<
<
<
\
)
/
^
'
.
0
M
W
W
B
K
U
k
P
V
q
F
2
3
y
y
f
C
J
T
n
u
L
<br />
F
F
F
5
5
5
2
2
2
2
2
2
F
p
q
g
d
E
X
P
Z
Z
Y
k
 
&
U
K
D
W
N
N
N
N
N
W
W
W
B
B
B
D
D
D
D
D
D
B
B
B
B
N
N
M
0
.
-
'
^
=
/
|
|
|
)
)
)
\
\
\
\
\
\
|
/
^
'
`
Q
R
N
W
B
H
U
O
G
4
g
6
F
2
2
2
3
f
w
C
#
T
T
<br />
p
p
F
F
F
F
5
5
5
5
F
F
p
m
S
h
d
E
X
P
b
b
Y
O
&
U
@
H
B
W
B
B
B
B
D
D
D
H
H
H
K
K
K
K
K
K
K
K
K
K
W
W
N
R
Q
.
_
:
;
^
"
|
|
|
|
|
)
)
)
)
)
|
"
+
^
'
`
.
0
M
W
B
H
$
A
b
X
d
g
q
p
p
p
F
5
3
y
f
w
w
<br />
6
6
p
p
p
p
p
F
F
F
6
m
q
S
h
d
4
g
X
P
b
Y
k
O
&
8
$
K
H
D
K
K
K
@
@
@
@
$
$
$
U
U
U
U
U
U
$
$
$
$
W
N
M
R
Q
.
`
_
'
:
"
"
"
"
"
|
|
|
|
|
"
"
+
=
;
_
`
.
0
R
B
B
H
@
&
k
G
g
4
V
S
S
q
m
6
p
F
5
5
2
<br />
m
m
m
m
6
6
6
6
6
6
g
g
h
V
d
E
g
P
G
G
Y
Y
k
O
A
8
U
$
@
K
8
8
8
&
&
&
&
&
A
A
&
&
 
&
&
&
&
8
8
8
8
M
M
R
0
Q
.
`
-
_
'
/
/
/
/
/
"
"
"
"
"
=
=
^
;
'
-
`
.
Q
0
D
D
H
@
8
A
Y
Z
P
X
V
V
V
h
g
g
S
q
q
m
<br />
q
q
q
q
q
q
q
q
q
q
E
E
E
g
X
P
G
Z
b
b
Y
Y
k
O
O
A
&
8
U
U
Y
Y
Y
Y
Y
b
b
b
b
b
A
A
A
A
A
A
A
A
A
A
0
Q
Q
.
.
`
-
-
_
'
+
+
+
+
+
+
/
/
/
/
:
:
'
_
-
`
.
.
Q
0
H
H
K
@
U
&
O
k
b
Z
E
E
E
E
4
4
d
d
V
V
<br />
g
g
g
g
g
g
S
S
S
S
G
G
Z
Z
b
b
Y
Y
k
k
Y
Y
k
k
O
O
A
A
&
&
X
X
X
X
X
X
X
X
X
X
A
A
A
A
A
A
A
A
A
A
`
`
`
-
-
_
_
'
'
'
=
=
=
=
=
=
+
+
+
+
`
`
`
.
.
.
Q
0
0
0
@
@
@
$
U
8
&
A
O
k
P
P
P
X
X
X
X
g
g
g
<br />
h
h
h
h
h
h
h
h
h
h
k
O
O
O
O
O
A
A
A
A
Y
Y
Y
Y
k
k
k
k
O
O
d
d
d
d
d
d
d
d
d
d
A
A
A
A
A
A
A
A
A
A
'
'
'
:
:
:
:
;
;
;
=
=
=
=
=
=
=
=
=
=
Q
Q
Q
Q
0
0
0
R
R
R
$
$
$
U
U
8
8
&
&
 
&
Z
Z
Z
Z
G
G
G
G
G
G
<br />
V
V
V
V
V
V
V
V
V
V
&
&
&
&
&
8
8
8
8
8
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
g
g
g
g
g
g
g
g
g
g
A
A
A
A
A
A
A
A
A
A
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
R
R
R
R
R
R
R
M
M
M
U
U
U
U
8
8
8
8
8
8
b
b
b
b
b
b
b
b
b
b
<br />
S
S
S
g
g
h
h
V
V
V
V
d
4
E
X
Z
Y
O
&
8
8
8
8
&
A
A
O
k
Y
Y
Y
Y
b
G
X
E
d
V
g
S
S
S
h
V
E
X
Z
Y
O
A
A
&
U
@
B
M
.
_
:
^
=
=
^
^
^
^
^
^
^
^
^
^
;
:
_
`
.
Q
R
M
M
M
N
W
B
H
K
$
U
U
8
8
8
&
A
O
k
k
Y
b
<br />
S
S
g
g
g
h
h
V
V
V
d
d
4
g
P
Z
Y
O
&
8
U
8
8
 
&
&
A
O
k
k
Y
Y
b
b
G
X
E
4
V
g
g
S
S
g
V
4
X
G
b
k
O
A
A
8
@
D
M
Q
-
'
;
^
^
^
^
^
^
^
^
^
^
^
^
;
:
_
-
.
Q
0
R
R
M
M
N
B
D
K
@
$
U
U
U
8
8
&
A
O
k
Y
Y
<br />
h
h
h
h
h
V
V
d
d
d
4
4
E
X
G
b
k
A
&
8
U
U
U
8
&
&
A
O
O
k
b
b
Z
G
X
E
4
V
h
g
m
q
S
h
d
E
X
G
b
Y
O
A
&
$
H
W
R
.
-
_
^
^
^
^
^
^
^
^
^
^
=
=
^
;
:
_
`
.
.
Q
0
0
R
M
N
W
D
H
K
@
$
$
$
U
8
&
&
A
O
O
<br />
V
V
d
d
d
4
4
4
E
E
g
g
X
G
Z
Y
O
&
8
U
$
$
U
U
8
8
&
A
A
O
Z
Z
G
P
g
E
d
V
h
g
6
6
m
S
h
d
E
g
P
G
k
O
A
8
@
D
N
0
.
.
=
=
=
=
=
^
^
^
^
^
/
/
+
=
^
:
'
-
`
`
.
.
Q
Q
R
M
N
W
B
B
K
K
K
@
@
$
U
8
8
8
<br />
E
E
E
E
g
g
g
X
X
X
G
Z
Z
b
k
O
 
&
8
U
$
$
$
U
U
8
8
&
&
A
A
X
X
g
E
4
d
V
h
g
S
p
p
6
m
S
g
V
d
E
E
O
O
&
8
$
H
B
M
R
0
+
+
+
=
=
=
=
=
=
=
"
"
"
/
+
=
;
:
'
'
`
`
`
.
.
Q
0
R
R
M
B
B
D
D
H
H
K
K
@
@
<br />
P
P
P
P
G
G
G
G
G
Z
k
k
O
A
&
8
U
$
@
K
U
U
8
8
8
&
&
A
A
A
d
d
V
V
h
g
S
q
m
m
F
p
p
6
m
q
g
h
V
V
&
8
U
$
K
H
B
N
M
R
/
/
/
/
/
/
/
/
/
/
)
)
)
|
"
/
+
=
=
^
_
_
_
-
-
`
.
.
.
Q
N
N
N
N
W
W
B
B
B
D
<br />
b
b
b
Y
Y
Y
Y
Y
Y
Y
8
U
U
$
$
@
K
H
H
D
&
&
A
A
A
A
O
O
O
O
q
q
m
m
6
6
p
F
F
5
p
p
p
6
m
m
q
S
g
g
K
K
K
H
B
W
N
M
R
0
)
)
)
)
)
)
)
)
)
)
<
\
\
\
)
|
|
"
"
"
:
:
'
'
_
_
-
-
-
`
0
R
R
R
R
M
M
M
M
N
<br />
A
A
A
A
A
A
A
A
A
A
H
H
H
H
D
D
B
B
B
W
k
k
k
k
Y
Y
Y
Y
Y
Y
2
2
2
3
3
3
y
y
f
f
6
6
6
6
m
m
q
q
S
S
N
N
M
M
R
0
0
Q
.
.
>
>
>
>
>
>
>
>
>
>
>
>
 
<
<
<
\
\
\
)
)
:
:
:
:
:
'
'
'
'
_
Q
Q
Q
Q
Q
Q
Q
0
0
0
<br />
8
8
8
8
8
U
U
U
U
U
W
W
W
N
N
N
N
N
M
M
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
J
J
J
J
J
J
J
#
#
#
m
m
m
m
m
q
q
q
q
q
.
.
.
.
.
`
`
`
-
-
i
i
i
i
i
i
i
i
i
i
>
>
>
>
>
>
>
>
<
<
;
;
;
;
:
:
:
:
:
:
.
.
.
.
.
.
.
.
.
.
<br />
$
$
$
$
$
$
$
$
$
$
R
R
R
R
R
R
R
R
R
R
P
P
P
P
P
P
P
P
P
P
n
n
n
n
n
n
u
u
u
u
q
q
q
q
q
q
q
q
q
q
_
_
_
'
'
'
'
'
'
'
%
%
%
%
%
%
%
%
%
%
)
)
)
)
)
)
)
)
)
)
;
;
;
;
;
;
;
;
;
;
.
.
.
.
.
.
.
.
.
.
<br />
O
O
A
A
&
8
U
$
$
@
@
@
K
H
D
B
W
M
R
R
R
R
N
B
K
U
A
Y
G
P
X
X
E
V
q
F
y
C
T
u
L
u
n
#
C
y
2
p
m
q
q
S
V
g
Y
U
B
0
`
'
:
:
;
=
"
)
>
i
%
x
x
x
x
%
%
v
i
i
)
)
)
)
>
<
)
"
/
=
^
;
;
;
:
:
'
_
-
-
`
`
<br />
O
O
A
A
&
8
U
$
$
@
@
@
K
H
D
B
N
M
R
R
0
R
M
W
H
U
A
Y
Z
G
P
X
E
V
S
p
3
w
#
n
u
u
n
#
C
y
2
p
6
q
q
S
V
g
b
8
D
R
.
_
:
:
;
=
/
|
<
)
v
%
x
x
x
%
%
v
i
i
)
)
)
)
>
 
<
)
"
/
=
^
;
:
:
:
'
_
_
-
`
`
.
<br />
A
A
&
&
8
U
U
$
@
@
K
K
H
H
B
W
N
M
R
R
0
0
R
N
D
@
8
O
Y
b
G
P
g
4
g
m
5
y
C
J
u
n
T
J
w
y
2
p
6
m
q
S
V
E
Z
&
K
N
Q
.
'
'
:
^
+
"
)
<
)
i
%
%
%
v
v
i
i
)
)
>
>
>
<
\
)
"
+
=
^
;
_
_
_
-
-
`
.
.
.
.
<br />
&
&
8
8
U
$
$
@
K
K
H
H
D
B
W
N
M
R
0
0
Q
Q
0
M
B
H
$
8
A
O
G
G
X
E
V
S
6
5
3
f
T
T
#
J
w
y
2
F
6
m
S
g
V
E
G
O
$
D
M
0
_
_
'
:
^
+
"
)
\
<
v
v
i
i
i
)
)
>
>
<
\
\
)
|
"
/
=
^
;
;
`
.
.
.
.
.
Q
0
0
0
<br />
U
U
$
$
@
@
K
K
H
H
B
W
W
N
N
M
R
0
Q
Q
.
Q
0
R
N
B
K
@
U
8
G
G
P
g
d
h
q
6
F
5
#
J
C
w
f
3
5
F
p
6
g
h
d
g
G
k
8
K
D
W
-
-
_
'
;
^
+
"
|
)
)
)
)
>
>
>
<
<
 
<
\
"
"
/
/
+
^
;
:
'
'
0
0
R
R
R
M
M
N
N
N
<br />
@
K
K
K
K
H
H
D
D
D
M
M
R
R
0
Q
Q
.
.
.
Q
Q
0
R
N
W
D
H
K
@
P
X
g
E
d
h
S
m
6
p
w
w
w
f
3
2
5
F
p
6
4
4
E
P
Z
k
&
$
K
H
-
-
_
'
:
;
=
+
/
/
<
<
<
<
<
\
\
\
)
)
;
;
;
:
'
'
_
-
`
`
B
B
B
B
D
D
D
H
H
H
<br />
D
D
D
D
B
B
B
W
W
W
.
.
.
.
.
.
`
`
`
-
0
0
R
M
N
W
B
D
H
H
E
4
4
d
h
g
S
m
6
6
y
y
y
3
2
5
F
F
p
6
P
P
G
b
k
A
8
$
@
K
_
'
'
:
:
;
^
=
=
+
)
)
)
)
)
)
|
|
|
|
.
.
.
.
.
Q
Q
0
0
0
$
$
$
$
$
U
U
U
U
U
<br />
N
N
N
N
N
N
N
N
M
M
-
-
-
_
_
_
_
'
'
'
M
M
M
N
N
W
B
B
D
D
h
g
g
S
S
q
m
6
6
p
2
2
2
5
5
F
F
p
p
p
k
k
O
A
&
8
U
$
@
K
:
:
:
;
;
^
^
=
=
=
|
|
|
|
|
"
"
"
"
"
N
N
N
W
W
W
B
B
B
B
A
O
O
O
O
O
O
O
O
k
<br />
R
R
R
R
R
R
R
R
R
R
:
:
:
:
;
;
;
;
;
;
W
W
W
W
W
B
B
B
D
D
m
6
6
6
6
p
p
p
F
F
F
F
F
F
F
p
p
p
p
p
U
U
U
$
$
@
@
K
K
K
^
^
^
^
=
=
=
=
=
+
"
"
"
/
/
/
/
/
/
/
@
@
@
@
@
$
$
$
$
$
b
b
b
Z
Z
Z
Z
Z
Z
Z
<br />
 
0
0
0
0
0
0
0
0
0
0
^
^
^
^
^
=
=
=
=
=
B
B
B
B
B
B
B
D
D
D
F
F
5
5
5
5
5
5
5
5
p
p
p
p
p
p
p
p
p
p
K
K
K
K
H
H
H
H
H
H
=
=
+
+
+
+
+
+
+
+
/
/
/
/
/
/
/
/
/
/
&
&
&
&
&
&
&
A
A
A
P
P
P
P
P
P
P
P
P
P
<br />
B
B
W
W
N
M
R
R
0
0
Q
Q
.
.
`
_
:
;
^
=
=
=
^
:
-
.
0
M
W
B
D
D
@
8
k
P
d
S
p
5
2
5
5
5
5
F
F
p
p
p
p
6
q
h
E
G
k
8
@
H
H
D
B
N
0
.
_
:
^
+
+
+
+
+
+
+
+
+
+
+
+
+
^
'
.
R
B
@
8
A
O
O
O
k
Y
b
G
P
P
X
<br />
W
W
W
N
N
M
R
0
0
Q
Q
Q
.
.
`
_
'
;
^
=
=
^
;
'
-
.
0
M
W
B
D
D
@
8
k
P
4
S
6
F
5
5
5
F
F
F
p
p
6
6
6
6
q
h
E
G
k
8
@
H
H
H
B
N
R
.
-
'
;
=
=
=
=
=
=
=
=
=
=
=
+
=
;
_
.
M
D
$
&
A
O
k
k
Y
b
Z
G
P
X
X
<br />
N
N
N
N
M
R
0
0
Q
Q
0
Q
Q
.
`
-
'
:
;
^
^
;
:
'
-
.
0
M
W
B
D
D
K
8
O
G
E
h
q
6
p
p
p
p
6
6
m
m
m
m
m
q
g
V
g
G
k
8
$
K
K
K
H
B
M
0
.
-
'
:
:
:
:
:
:
:
:
:
:
;
;
:
_
`
0
W
K
U
A
O
Y
Y
b
b
Z
G
P
X
g
g
<br />
M
M
M
R
R
0
Q
Q
.
.
0
Q
Q
.
.
-
_
'
:
;
:
:
'
-
`
.
R
M
W
B
D
H
K
U
A
b
X
4
h
S
q
q
q
q
q
S
S
S
g
g
S
g
h
4
X
Z
k
 
&
$
@
$
$
@
H
B
N
R
Q
.
`
`
`
`
`
`
`
`
`
`
`
`
.
.
R
W
H
$
&
k
Y
Z
Z
G
P
P
X
g
E
4
4
<br />
R
R
R
0
0
Q
Q
.
.
.
0
0
Q
Q
.
`
-
_
_
'
_
_
-
`
.
Q
R
N
W
B
D
H
K
U
&
Y
G
X
4
d
h
h
h
h
V
V
V
d
d
d
h
V
d
E
X
Z
k
A
8
U
&
&
8
U
@
H
B
W
M
R
M
M
M
M
M
M
M
M
M
M
N
N
W
D
@
8
A
Y
Z
G
X
X
X
g
E
E
4
d
d
d
<br />
0
0
0
0
Q
Q
.
.
.
.
0
0
0
Q
Q
.
.
`
`
-
.
.
.
.
0
R
M
N
W
B
H
H
@
$
8
O
Y
Z
P
X
E
E
E
E
E
E
g
g
g
g
d
d
4
g
P
Z
Y
O
A
&
Y
k
k
O
&
8
$
@
K
H
K
K
K
K
K
K
K
K
K
K
$
U
8
&
O
Y
Z
P
g
E
E
E
4
4
4
d
V
V
V
h
<br />
0
0
Q
Q
Q
Q
.
.
.
.
R
R
0
0
0
Q
.
.
.
.
Q
0
0
R
R
M
N
W
B
B
K
K
@
$
8
&
O
k
b
b
P
P
P
P
G
G
G
G
G
G
4
4
E
g
X
G
Z
Y
k
k
G
G
G
Z
b
Y
k
O
A
A
A
A
A
A
A
A
A
A
A
A
Z
Z
Z
G
X
g
4
d
V
h
d
d
d
V
V
V
h
h
h
g
<br />
0
0
Q
Q
Q
Q
Q
Q
Q
Q
R
R
R
R
R
0
0
0
Q
Q
M
M
M
N
N
W
W
B
B
B
@
@
$
$
U
8
 
&
A
O
O
b
b
b
b
Y
Y
Y
Y
Y
Y
E
E
E
g
X
P
P
G
Z
Z
E
E
g
g
X
X
P
P
G
G
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
d
V
V
h
h
g
S
q
m
m
V
V
V
h
h
h
h
h
g
g
<br />
0
0
0
0
0
0
Q
Q
Q
Q
M
M
M
M
R
R
R
R
R
R
W
W
B
B
B
B
B
D
D
D
$
$
$
$
U
U
8
8
&
&
O
O
O
O
O
O
O
O
O
O
E
E
E
g
g
g
X
X
X
P
V
d
d
d
d
d
4
4
4
4
E
E
E
E
E
E
E
E
E
E
6
6
6
p
p
p
F
F
F
5
h
h
h
h
h
h
h
g
g
g
<br />
0
0
0
0
0
0
0
0
0
0
M
M
M
M
M
M
M
M
M
M
D
D
D
D
D
D
D
D
D
D
$
$
U
U
U
U
U
U
U
U
A
A
A
A
A
A
A
A
A
A
E
E
E
E
E
E
g
g
g
g
h
h
h
h
h
h
h
h
h
h
d
d
d
d
d
d
d
d
d
d
2
2
2
3
3
3
3
3
3
3
h
h
h
h
h
h
h
h
h
h
<br />
;
;
;
'
_
-
.
.
Q
0
0
0
0
R
R
R
M
M
M
M
M
M
N
N
W
W
B
D
D
D
D
H
H
H
K
@
@
$
$
U
U
U
U
U
8
8
8
&
&
&
&
A
A
k
Y
Z
G
X
g
E
E
E
E
4
d
V
V
h
g
g
g
g
g
g
h
h
h
h
V
V
V
V
h
S
q
6
F
2
3
y
y
y
3
2
F
p
m
q
g
g
<br />
^
;
;
:
_
-
.
.
Q
0
R
R
R
R
R
M
M
M
M
N
N
N
N
W
W
B
D
D
H
H
H
H
H
H
K
@
@
$
$
U
$
$
$
U
U
U
8
8
8
&
&
 
&
A
O
k
b
Z
P
X
g
E
E
E
4
4
d
V
h
h
g
S
g
g
g
g
g
h
h
h
h
h
h
g
S
m
p
F
2
3
y
y
y
3
2
F
p
m
q
g
g
<br />
^
;
;
:
'
-
`
.
.
Q
M
M
M
M
M
N
N
N
N
W
B
B
B
D
D
H
H
K
K
@
H
H
H
K
K
@
@
$
$
U
K
K
K
@
@
@
$
$
$
$
U
U
8
&
A
k
Y
b
Z
G
g
g
E
E
4
4
d
V
V
h
q
q
q
S
S
S
g
g
g
g
S
S
q
m
6
F
2
3
y
f
3
3
2
5
F
6
m
S
g
g
<br />
;
;
:
:
_
-
`
.
.
.
W
W
W
W
W
B
B
B
B
B
K
K
K
K
@
@
$
$
U
U
H
H
H
K
K
@
@
$
$
$
B
B
B
D
D
D
H
H
H
H
K
@
@
$
U
&
A
O
k
Y
g
g
g
E
E
4
d
d
V
V
6
6
6
m
m
m
m
q
q
q
m
m
6
p
F
2
3
y
f
w
5
5
F
p
6
m
S
g
h
h
<br />
:
'
'
_
-
`
.
.
.
Q
H
H
H
H
K
K
K
K
K
@
U
U
U
U
U
8
8
&
&
&
D
D
D
D
H
H
K
K
K
K
M
M
M
M
M
M
N
N
N
N
H
H
H
K
@
$
U
8
&
&
E
E
E
E
4
4
d
d
V
V
5
5
5
F
F
F
F
F
F
p
p
p
F
5
2
3
y
f
w
C
m
m
q
q
S
g
h
V
d
4
<br />
-
`
`
`
.
.
Q
Q
0
0
8
8
8
8
8
8
8
8
&
 
&
&
&
&
&
A
A
A
O
O
O
N
N
N
N
W
W
W
B
B
B
.
.
.
.
.
.
.
.
Q
Q
D
D
D
H
K
K
@
$
U
U
d
d
d
V
V
V
h
h
g
g
f
y
y
y
y
y
y
y
y
y
F
5
5
2
2
3
y
f
w
w
d
d
d
4
E
E
g
X
P
P
<br />
0
0
0
0
R
R
M
M
N
N
Y
Y
Y
Y
Y
Y
Y
b
b
b
A
A
O
O
O
O
O
k
k
k
Q
Q
Q
Q
Q
0
0
0
0
0
'
'
'
'
_
_
_
_
_
_
D
D
H
H
K
K
@
@
$
$
S
S
S
S
q
q
q
m
m
m
#
#
#
#
#
J
J
J
J
J
5
5
5
5
2
3
3
y
y
f
Z
b
b
b
Y
Y
k
k
O
O
<br />
B
B
B
B
B
D
D
D
H
H
g
g
g
g
g
g
g
g
g
g
O
O
O
O
O
k
k
k
k
k
_
_
_
_
_
_
_
-
-
-
^
^
^
^
^
^
^
^
^
^
K
K
K
K
@
@
@
$
$
$
F
F
F
F
F
F
5
5
5
5
L
L
L
L
L
L
L
L
L
L
F
F
F
F
5
5
5
2
2
2
$
$
$
$
@
@
@
K
K
K
<br />
$
$
$
$
$
$
$
$
$
$
V
V
V
V
V
h
h
h
h
h
O
O
O
O
O
O
O
k
k
k
=
=
=
=
=
=
=
=
=
=
/
/
/
/
/
/
/
/
/
/
$
$
$
$
$
$
U
U
U
U
f
f
f
f
f
f
f
f
f
f
o
o
o
o
o
o
o
o
o
o
6
6
p
p
p
p
p
p
p
F
M
M
M
M
M
M
M
M
M
R
<br />
&
&
&
&
&
 
&
&
&
&
&
q
q
q
q
q
q
q
q
q
q
O
O
O
O
O
O
O
O
O
O
"
"
"
"
"
"
"
"
"
"
|
|
|
|
|
|
|
|
|
|
8
8
8
8
8
8
8
8
8
8
J
J
J
J
J
J
J
J
J
J
a
a
a
a
a
a
a
a
a
a
m
m
m
m
m
m
6
6
6
6
.
.
.
.
.
.
.
.
.
.
<br />
"
/
=
:
`
0
B
K
8
A
A
O
k
b
G
g
d
h
S
m
m
m
S
h
d
g
P
b
Y
O
O
A
8
@
W
0
-
;
/
|
)
)
)
)
)
)
)
)
)
)
)
|
/
^
_
.
N
D
$
8
8
&
O
Z
g
h
6
3
w
#
#
T
T
u
L
z
o
e
a
t
t
t
e
7
u
#
f
2
p
m
m
q
h
E
Z
&
K
N
Q
`
<br />
/
+
^
'
`
R
B
K
U
&
O
O
k
b
P
g
d
h
S
m
m
m
q
g
V
E
P
Z
Y
k
O
A
8
@
B
0
-
;
+
"
)
)
)
)
)
)
)
)
)
)
)
|
/
^
_
.
M
D
@
U
8
&
O
b
g
h
m
2
f
J
#
#
T
n
L
j
7
o
a
a
t
a
e
z
u
#
f
2
p
6
q
S
h
E
Z
&
K
N
Q
`
<br />
=
=
;
_
.
R
B
@
U
&
k
k
b
Z
X
E
V
g
q
m
6
6
m
S
h
4
g
P
Z
b
O
O
 
&
$
D
R
.
'
^
+
)
)
)
)
)
)
)
)
)
)
)
|
"
=
'
.
R
W
H
@
U
8
A
Y
P
d
S
p
2
y
J
J
#
T
n
L
j
7
o
o
a
e
o
j
n
J
f
2
p
6
h
V
4
P
Y
8
D
M
.
`
<br />
:
:
_
`
Q
N
D
@
8
&
Z
Z
G
P
g
d
h
S
q
m
p
p
6
q
g
V
4
g
X
P
O
A
8
$
D
N
Q
-
'
;
)
)
)
)
)
)
)
)
)
)
)
|
"
=
:
`
Q
M
B
D
$
U
&
k
Z
g
V
q
6
F
w
w
C
J
#
T
u
L
j
z
z
z
j
u
#
w
3
5
p
m
g
g
P
Y
&
@
W
0
.
-
<br />
.
.
.
0
N
D
K
U
&
A
X
X
g
4
d
h
S
q
6
p
p
p
6
m
S
h
V
4
E
g
&
8
U
@
D
N
0
.
-
'
)
)
)
)
)
)
)
)
)
)
|
"
/
=
:
-
.
0
M
N
$
U
8
O
b
P
E
V
g
q
f
f
f
w
C
J
#
T
n
u
T
T
J
C
f
2
F
6
q
S
Y
k
A
8
K
W
R
.
-
'
<br />
N
N
W
D
K
$
8
A
k
Y
V
V
h
g
S
q
6
p
F
F
6
6
m
q
S
g
h
d
4
4
@
K
H
D
N
R
Q
.
-
_
\
\
\
\
\
\
\
\
\
\
/
/
+
^
:
_
`
.
0
R
8
8
&
O
Y
G
X
E
d
V
y
y
y
f
f
w
C
J
#
#
2
2
5
p
6
q
g
h
d
4
K
H
D
W
R
.
`
'
;
^
<br />
U
U
8
&
A
k
Y
b
Z
G
m
m
6
6
p
F
5
2
3
3
q
q
q
S
g
h
V
d
d
4
N
N
M
R
Q
.
`
_
'
'
\
\
\
\
\
\
\
\
\
\
=
^
^
;
'
_
`
.
.
Q
A
O
O
Y
b
G
X
g
E
4
3
3
y
y
f
f
w
w
C
C
V
d
d
4
E
g
P
G
Z
Z
.
.
`
-
'
;
=
+
"
|
<br />
 
Z
Z
Z
G
P
X
g
g
E
E
2
2
3
3
y
y
f
f
w
w
h
h
h
h
V
V
d
4
4
4
`
`
-
-
_
'
:
;
^
^
\
\
\
\
\
\
\
\
\
\
:
:
'
'
_
-
`
.
.
.
b
b
b
Z
G
P
X
g
E
E
y
y
y
y
f
f
f
w
w
w
k
k
O
O
A
&
8
8
U
U
+
/
/
"
|
)
\
>
>
)
<br />
d
d
d
d
V
V
h
h
h
h
C
C
C
C
C
J
J
J
J
#
4
4
4
4
4
4
E
E
E
E
=
=
=
=
+
+
/
/
/
"
\
\
\
\
\
\
\
\
\
\
-
-
-
-
`
`
.
.
.
.
P
P
X
X
X
g
g
E
E
E
f
f
f
f
f
f
f
f
f
w
D
D
B
B
B
B
W
W
W
N
i
i
v
v
v
%
x
x
x
c
<br />
q
q
q
q
q
q
q
q
q
q
T
T
T
T
T
T
T
T
T
T
g
g
g
g
g
g
g
g
g
g
|
)
)
)
)
)
)
)
)
)
\
\
\
\
\
\
\
\
\
\
.
.
.
.
.
.
.
.
.
.
E
E
E
E
E
E
E
4
4
4
f
f
f
f
f
f
f
f
f
f
Q
Q
Q
Q
Q
.
.
.
.
.
r
r
r
r
r
s
s
s
s
s
<br />
H
H
@
8
k
G
E
V
S
m
6
6
p
F
2
y
w
J
T
n
n
T
#
w
3
p
q
V
4
g
X
P
Z
A
@
N
`
;
/
)
\
\
\
\
\
\
\
\
\
\
\
\
)
"
+
^
:
_
`
.
.
.
0
N
H
U
O
Z
X
E
4
4
d
h
S
6
F
2
y
f
f
y
5
q
4
b
U
B
0
.
`
`
_
;
/
\
)
x
r
{
<br />
H
K
@
8
k
G
g
V
S
m
6
6
p
5
2
y
w
J
T
n
n
n
#
w
3
F
q
h
4
E
X
P
Z
A
@
N
.
:
/
|
\
\
\
\
\
\
\
\
\
\
\
\
)
"
+
^
:
_
`
.
.
.
0
N
H
U
O
Z
X
g
E
4
d
V
g
m
p
5
3
y
f
y
5
q
4
b
U
B
R
.
`
-
'
;
/
\
)
x
r
s
<br />
K
@
$
&
k
G
g
V
g
q
p
p
F
5
3
f
C
#
T
n
n
T
#
C
y
F
m
g
V
4
X
P
b
O
$
W
.
'
=
/
\
\
\
\
\
\
\
\
\
\
\
)
|
"
+
^
:
_
-
`
.
.
Q
M
D
@
&
Y
G
P
X
g
E
4
V
g
q
6
F
5
2
5
6
g
g
Y
U
B
R
.
-
_
:
^
/
\
)
x
l
s
<br />
$
U
8
O
Y
P
E
V
g
S
F
5
5
3
y
w
C
#
T
n
T
T
J
w
y
5
6
S
h
V
G
G
Y
A
$
B
0
-
:
^
)
)
)
)
)
)
)
)
)
)
)
)
|
/
+
^
:
'
-
`
.
.
Q
R
W
K
U
A
k
b
G
G
P
X
E
d
h
g
q
m
6
m
g
4
G
O
$
B
R
.
'
:
;
+
"
<
i
x
l
r
 
<br />
A
O
k
b
G
g
4
h
g
q
2
3
3
y
f
C
J
#
T
n
J
J
C
f
3
F
6
q
g
h
b
Y
O
8
@
B
R
.
_
:
)
)
)
)
)
)
)
)
)
)
|
"
"
/
=
^
:
'
_
-
`
.
.
0
N
B
K
U
&
A
k
Y
Y
Z
G
X
g
4
d
d
d
4
g
G
k
U
H
N
0
.
=
=
+
"
)
>
i
x
l
r
<br />
G
G
P
X
E
d
h
S
q
m
f
f
f
w
C
J
#
T
n
n
f
f
y
2
5
p
m
S
g
h
&
8
U
@
D
N
0
.
-
'
|
|
|
|
|
|
|
|
|
|
/
/
+
+
=
;
:
'
_
_
`
`
.
Q
R
N
B
H
@
@
A
A
A
O
k
Y
Z
G
P
P
Y
Y
O
&
$
D
N
0
.
`
"
|
)
\
>
i
%
c
l
r
<br />
d
V
V
h
g
q
m
6
p
F
C
C
C
J
J
#
T
n
n
n
F
F
p
6
m
q
S
g
h
V
D
D
B
N
M
Q
.
-
_
'
"
"
"
"
"
"
"
"
"
"
=
=
=
^
^
;
:
'
'
_
`
`
.
.
Q
R
M
W
B
B
U
U
8
8
&
A
O
O
k
k
H
H
D
W
M
0
.
-
_
'
>
>
)
i
v
%
c
l
r
r
<br />
p
p
p
F
F
5
2
3
3
y
#
#
#
T
T
T
n
n
n
u
S
S
g
g
h
V
V
d
4
4
Q
Q
.
.
`
-
_
'
:
;
/
/
/
/
/
/
/
/
/
/
^
^
;
;
;
:
:
'
'
'
`
`
.
.
.
Q
0
0
R
M
$
$
$
$
U
U
8
8
8
&
.
.
`
-
_
'
;
^
=
+
%
%
x
x
c
l
r
r
s
s
<br />
f
f
f
w
w
w
C
C
C
C
n
n
n
n
n
n
u
u
u
u
4
4
4
E
E
E
g
g
g
g
:
:
:
:
;
^
^
=
=
=
+
+
+
+
+
+
+
+
+
+
:
:
:
:
:
'
'
'
'
'
`
`
`
.
.
.
.
.
.
Q
@
@
@
@
@
@
$
$
$
$
=
=
+
+
/
"
"
|
|
)
r
r
r
s
s
s
{
{
{
{
<br />
T
T
T
T
T
T
T
T
T
T
u
u
u
u
u
u
u
u
u
u
P
P
P
P
P
P
P
P
P
P
+
+
+
/
/
/
/
/
/
/
=
=
=
=
=
=
=
=
=
=
'
'
'
'
'
'
'
'
'
'
`
`
`
`
`
.
.
.
.
.
K
K
K
K
K
K
K
K
K
K
\
\
\
 
<
<
<
<
<
<
<
*
*
*
*
*
*
*
*
*
*
<br />
Z
G
X
4
h
6
2
w
#
n
n
n
n
n
u
u
u
u
u
u
u
n
T
C
3
p
g
d
g
P
G
Z
Y
&
K
N
.
'
=
/
"
"
"
/
/
+
+
+
=
=
=
=
^
^
;
;
:
:
'
'
'
'
'
_
_
-
-
`
`
`
`
.
.
Q
0
M
W
D
H
K
K
H
B
M
.
_
^
"
\
>
>
)
i
v
%
c
r
s
{
*
<br />
Z
Z
P
E
h
m
5
f
J
T
n
n
n
n
n
n
u
u
u
u
u
n
#
w
3
p
S
d
g
P
G
Z
Y
&
K
N
.
'
^
/
"
"
"
/
/
/
+
+
=
=
=
=
=
^
^
;
:
:
'
'
'
'
'
_
_
-
-
`
`
`
`
.
.
Q
0
M
W
B
H
H
K
H
B
M
Q
-
^
/
)
<
>
>
)
i
v
x
l
r
{
{
<br />
b
b
G
g
d
S
p
2
f
C
T
T
T
T
T
n
n
n
n
n
n
T
#
w
3
p
S
V
E
X
Z
b
k
8
K
N
Q
_
;
=
"
"
"
"
/
/
+
+
+
=
=
=
=
=
^
^
;
:
:
:
'
'
'
_
_
_
-
-
`
`
`
.
.
.
0
M
N
B
D
H
K
H
D
N
Q
-
:
+
|
)
\
\
<
>
)
v
%
c
l
r
 
<br />
Y
b
Z
X
4
h
q
p
2
3
#
#
#
#
#
#
#
T
T
T
#
#
C
f
2
6
S
V
4
g
Y
k
A
U
K
N
Q
-
:
;
"
"
"
"
/
/
/
+
+
+
+
+
=
=
=
^
^
;
;
;
'
'
'
'
_
_
-
-
-
-
.
.
.
Q
0
R
N
W
B
D
K
H
D
N
0
.
_
;
+
/
"
"
|
)
\
<
)
i
v
%
<br />
Y
b
Z
P
E
d
g
m
p
F
J
J
J
J
J
J
J
J
J
J
w
f
y
2
p
m
g
V
4
g
A
&
U
@
D
M
Q
`
'
:
|
|
"
"
"
"
/
/
/
/
+
+
+
+
=
=
^
^
^
;
'
'
'
'
_
_
_
-
-
-
.
.
.
Q
0
R
M
N
W
B
K
K
D
W
M
Q
`
_
:
^
=
=
+
/
"
|
)
\
<
<
<br />
Z
Z
G
X
E
d
h
S
q
m
w
w
w
w
w
C
C
C
C
C
5
F
p
6
q
g
V
4
g
X
@
K
H
B
N
0
.
-
'
:
|
|
|
|
|
"
"
"
"
"
+
+
+
+
=
=
=
^
^
^
'
'
'
_
_
_
_
_
-
-
Q
Q
Q
0
R
M
N
N
W
W
K
K
H
B
N
R
Q
.
`
-
;
;
;
^
=
=
+
/
"
"
<br />
X
g
g
E
d
V
h
S
q
m
f
f
f
f
f
f
f
f
f
f
g
g
h
V
d
4
g
X
P
G
N
M
M
0
Q
.
-
'
:
;
)
)
|
|
|
|
|
|
|
|
=
=
=
=
=
=
=
^
^
^
_
_
_
_
_
_
_
-
-
-
R
R
R
R
M
N
N
W
W
W
@
K
K
H
B
W
M
R
0
Q
'
'
'
:
:
;
;
^
^
=
<br />
V
V
V
h
h
g
S
q
m
m
y
y
y
y
y
y
y
y
y
y
X
X
X
P
G
G
Z
b
Y
Y
`
`
`
-
_
'
:
;
^
=
)
)
)
)
)
)
)
)
)
|
=
=
=
=
^
^
^
^
^
^
_
_
_
_
-
-
-
-
-
-
N
N
N
N
N
W
W
B
B
B
@
@
@
K
H
D
D
B
W
W
_
_
_
'
'
'
:
:
:
:
<br />
q
q
q
q
m
m
m
6
6
6
3
3
3
3
3
3
3
3
3
3
k
k
k
k
O
O
A
A
A
A
^
^
^
^
=
=
+
+
+
/
\
\
\
\
\
)
)
)
)
)
^
^
^
^
^
^
^
^
^
^
-
-
-
-
-
-
-
-
-
-
B
B
B
B
B
B
B
D
D
D
$
$
$
@
@
@
K
K
H
H
_
_
_
_
_
_
'
'
'
'
<br />
 
p
p
p
p
p
p
p
p
p
p
3
3
3
3
3
3
3
3
3
3
8
8
8
8
8
U
U
U
U
U
"
"
"
"
"
"
"
"
"
"
\
\
\
\
\
\
\
\
\
\
;
;
;
;
;
;
;
;
;
;
-
-
-
-
-
-
-
-
-
`
D
D
D
D
D
D
D
D
D
D
$
$
$
$
$
$
$
$
$
$
_
_
_
_
_
_
_
_
_
_
<br />
W
W
H
$
A
Z
E
h
m
p
F
F
F
5
5
5
2
2
3
3
3
2
F
m
h
E
G
k
&
U
$
$
K
B
R
.
_
^
/
"
|
|
|
)
)
)
)
\
\
\
\
\
)
|
"
/
+
=
^
;
;
;
;
:
'
'
_
-
-
-
`
`
.
.
Q
R
N
W
D
D
H
H
H
H
K
K
@
$
$
$
$
$
@
H
B
M
0
.
-
_
<br />
N
W
D
$
A
Z
g
h
q
6
p
p
F
F
F
5
5
2
2
2
2
2
F
m
h
E
G
k
&
U
$
$
K
B
M
.
_
;
+
"
|
|
|
|
|
)
)
)
)
\
\
\
)
)
"
/
+
=
^
^
;
;
;
:
:
'
_
_
-
-
`
`
.
.
Q
R
N
W
B
D
H
H
H
K
K
@
@
$
$
$
U
U
@
K
B
N
0
.
`
-
<br />
N
W
D
@
&
Y
X
d
g
q
6
6
6
6
p
p
F
F
F
F
5
5
p
q
h
E
G
k
A
8
U
$
@
D
N
Q
`
'
^
=
/
/
"
"
"
"
|
|
|
|
<
\
\
)
|
"
/
+
=
^
^
^
;
;
:
:
'
_
_
_
`
.
.
.
0
R
N
W
B
D
K
K
K
K
@
@
$
$
U
U
8
8
U
@
H
B
M
0
Q
.
<br />
N
N
B
K
U
O
Z
g
4
V
q
q
q
q
m
m
m
6
6
6
p
p
m
S
V
g
G
Y
A
&
U
U
$
H
W
R
.
-
'
:
+
+
+
+
/
/
/
/
/
"
<
<
\
\
)
|
"
/
+
+
^
^
^
;
;
:
:
'
'
_
.
.
.
Q
R
M
N
W
B
D
@
@
@
$
$
U
U
8
8
8
A
A
&
U
@
H
B
N
M
R
 
<br />
N
W
B
H
$
&
Y
G
X
g
h
h
h
g
g
g
g
S
S
S
m
q
S
h
4
g
G
Y
O
A
8
U
$
K
D
N
R
.
.
-
=
=
=
+
+
+
+
+
+
/
<
<
<
\
)
)
|
"
"
/
^
^
;
;
;
:
:
'
'
'
0
0
0
R
M
N
W
B
D
H
8
8
8
8
8
&
&
A
A
A
O
O
A
&
8
$
K
H
D
B
<br />
W
B
D
H
$
8
O
Y
b
G
d
d
d
d
d
V
V
V
V
V
g
h
V
d
E
X
G
b
k
O
U
U
$
@
H
B
N
R
0
Q
+
+
+
+
+
+
+
+
/
/
>
<
<
<
\
\
)
|
|
|
:
:
:
:
:
'
'
'
_
_
M
N
N
W
W
B
D
H
H
K
O
O
O
O
k
k
k
Y
Y
Y
k
k
O
A
&
8
U
@
@
K
<br />
D
D
H
K
$
8
 
&
O
k
Y
E
E
E
E
E
E
4
4
4
4
d
d
4
E
g
P
G
b
Y
Y
$
$
@
K
H
D
W
N
M
R
/
/
/
"
"
"
"
"
"
"
>
>
<
<
<
\
\
)
)
)
_
_
_
_
_
-
-
-
-
-
D
D
D
H
H
K
K
@
@
$
Z
Z
Z
Z
G
G
G
G
G
G
k
k
O
O
A
&
8
U
U
$
<br />
K
@
@
$
U
8
&
A
A
O
X
X
X
g
g
g
g
g
g
g
g
g
g
X
P
G
Z
Z
b
b
K
K
K
H
H
D
B
W
W
N
)
)
)
)
)
)
)
)
)
)
>
>
<
<
<
<
<
\
\
\
.
.
.
.
.
.
.
.
.
.
@
$
$
$
$
U
U
U
8
8
E
E
E
E
E
E
E
E
E
E
O
O
O
A
A
&
&
8
8
8
<br />
U
U
U
U
8
8
 
&
&
&
A
P
P
P
P
X
X
X
X
X
X
P
P
P
G
G
Z
Z
Z
b
b
H
H
H
D
D
D
B
B
B
B
>
>
>
>
>
>
>
>
>
>
<
<
<
<
<
<
<
<
<
<
0
0
0
0
0
0
0
0
0
0
&
&
&
&
 
&
&
&
A
A
A
V
V
V
h
h
h
h
h
h
h
A
A
&
&
&
&
&
8
8
8
<br />
8
8
8
8
&
&
&
&
&
&
P
P
P
P
P
P
P
P
P
P
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
D
D
D
D
B
B
B
B
B
B
i
i
i
i
i
i
i
i
i
i
<
 
<
<
<
<
<
<
<
<
<
M
M
M
M
M
M
M
M
M
M
O
O
O
O
O
O
O
O
O
O
S
S
S
S
S
S
S
S
S
S
&
&
&
8
8
8
8
8
8
8
<br />
.
.
Q
0
N
B
H
$
U
8
&
&
A
A
k
Y
b
Z
G
P
P
P
P
G
G
G
Z
Z
Z
Z
Z
b
b
k
A
8
$
K
H
D
B
B
N
0
`
:
+
)
>
i
v
v
v
i
i
)
)
>
>
<
 
<
<
)
"
=
:
-
.
R
M
N
N
W
B
H
@
U
&
O
O
k
k
Y
Z
P
g
d
h
S
q
q
q
g
V
4
X
Z
k
A
&
<br />
.
.
Q
0
N
B
H
@
U
8
8
&
&
A
O
k
Y
Z
Z
G
G
G
G
G
Z
Z
Z
b
b
b
b
b
Y
k
A
8
$
K
D
B
B
B
N
0
`
:
+
)
>
i
v
v
v
i
i
)
)
>
>
<
<
<
)
"
=
:
-
.
0
R
M
M
N
B
H
@
U
8
A
O
O
k
Y
b
G
g
4
V
g
S
q
S
g
V
E
P
b
k
A
&
<br />
.
.
Q
0
M
B
H
@
$
U
U
U
8
8
&
O
k
Y
Y
b
b
b
Y
Y
Y
Y
Y
k
k
k
Y
Y
k
O
&
U
@
K
D
B
B
W
N
0
`
'
=
|
\
>
v
v
v
i
i
)
)
>
>
>
<
 
<
\
|
+
;
_
.
Q
0
R
R
M
N
B
H
@
$
8
&
A
A
O
Y
Z
P
g
4
d
V
g
g
V
d
g
P
b
O
A
8
<br />
.
.
Q
0
M
W
D
K
@
$
@
@
@
$
U
8
&
A
A
O
A
A
A
A
A
A
&
&
&
&
O
O
A
&
8
$
K
H
D
B
W
N
M
Q
`
'
^
/
)
\
v
v
v
i
i
)
)
)
>
>
<
<
\
|
/
^
:
-
`
.
Q
0
0
R
N
B
D
K
@
$
8
8
&
A
k
b
G
P
g
E
V
d
4
E
P
Z
Y
O
&
8
<br />
.
.
Q
0
R
N
B
D
H
K
D
D
D
H
H
K
@
$
$
U
U
U
U
U
$
$
$
$
$
$
&
 
&
8
U
$
@
H
D
B
B
M
R
0
.
-
'
^
/
"
)
v
v
v
i
i
i
)
)
)
)
<
<
\
)
"
+
;
:
_
-
.
.
.
Q
0
M
N
W
B
D
$
$
U
8
&
O
k
b
Z
G
g
g
X
P
Z
Y
O
&
8
U
<br />
.
.
.
Q
0
M
N
W
B
B
M
M
M
N
N
W
W
B
B
D
K
K
K
K
H
H
H
H
H
H
U
U
$
@
@
H
D
B
B
W
.
.
.
-
'
;
=
/
"
|
v
v
i
i
i
i
)
)
)
)
<
<
\
)
"
/
=
^
;
:
`
`
`
.
.
Q
0
R
M
M
@
@
@
$
U
8
A
O
k
k
Z
Z
b
Y
k
A
&
8
U
$
<br />
.
.
.
.
Q
0
R
R
M
M
.
.
.
.
.
Q
Q
0
0
0
B
B
B
B
B
B
B
B
B
B
@
K
K
K
H
D
B
B
W
W
'
'
:
;
^
+
/
"
|
)
i
i
i
i
i
i
i
)
)
)
\
\
\
)
|
"
/
+
=
^
_
_
-
-
`
.
.
.
.
Q
K
K
@
@
$
U
8
8
&
&
O
O
A
&
&
8
U
$
@
K
<br />
 
`
`
`
.
.
.
.
Q
Q
Q
_
_
_
_
_
_
-
-
-
-
W
W
W
W
N
N
N
N
N
N
H
D
D
D
D
B
B
W
W
W
/
/
/
"
"
|
)
\
<
<
i
i
i
i
i
i
i
)
)
)
)
)
)
)
|
"
"
/
/
+
'
'
_
_
_
-
-
-
`
`
@
@
@
@
$
$
U
U
8
8
U
$
$
$
@
@
K
H
H
H
<br />
-
-
-
-
`
`
`
`
`
.
^
^
^
^
^
^
;
;
;
;
N
N
N
N
N
N
N
N
N
N
B
B
B
B
W
W
W
W
W
W
<
<
<
<
>
>
>
)
)
)
i
i
i
i
i
i
)
)
)
)
)
)
|
|
|
|
"
"
"
"
'
'
'
'
'
'
_
_
_
_
$
$
$
$
$
$
U
U
U
U
H
H
H
H
D
D
D
D
B
B
<br />
_
_
_
_
_
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
M
M
M
M
M
M
M
M
M
M
W
W
W
W
W
W
W
W
W
W
i
i
i
i
i
v
v
v
v
v
)
)
)
)
)
)
)
)
)
)
|
|
|
|
|
|
|
|
|
|
:
:
:
:
'
'
'
'
'
'
$
$
$
$
$
U
U
U
U
U
B
B
B
B
W
W
W
W
W
W
<br />
M
M
M
R
Q
.
.
`
-
_
_
_
'
'
:
;
=
+
+
/
/
/
+
^
:
-
.
Q
R
M
M
M
M
N
N
N
N
N
N
W
W
N
R
.
-
;
"
\
)
v
%
v
v
v
v
i
i
i
i
)
)
)
)
>
<
<
\
)
|
|
|
|
"
/
+
=
^
;
:
:
:
'
_
`
Q
R
W
H
@
$
U
$
$
@
K
H
D
B
W
W
<br />
M
M
R
R
Q
.
.
`
-
_
_
_
'
'
:
;
^
=
+
/
/
/
+
^
:
_
`
Q
0
R
R
R
R
M
M
M
M
M
M
N
N
M
0
.
_
^
"
\
)
v
v
v
v
v
v
i
i
i
)
)
)
)
)
>
 
<
\
\
)
|
|
|
|
"
/
+
=
^
;
;
:
:
'
_
`
.
R
W
D
K
$
$
$
@
@
K
H
D
B
W
W
<br />
M
M
R
0
Q
.
.
`
-
-
_
_
'
:
:
;
^
=
+
+
"
"
/
=
^
'
-
.
.
Q
Q
Q
Q
Q
Q
Q
Q
0
0
0
R
0
.
`
:
=
|
<
i
v
v
v
v
v
i
i
i
)
)
)
)
)
>
>
<
\
)
)
|
|
|
|
|
"
/
+
=
^
;
;
:
:
'
-
.
0
M
B
H
K
K
K
K
H
D
B
W
N
N
M
<br />
R
R
R
0
Q
.
.
`
-
-
'
'
:
:
;
^
=
=
+
+
)
)
|
"
+
^
:
'
-
`
-
-
-
-
-
-
-
-
`
`
.
.
-
'
^
/
)
>
i
%
i
i
i
i
i
)
)
)
)
>
>
>
>
<
<
\
)
)
|
|
)
|
|
"
"
/
+
=
^
^
;
;
:
_
`
.
0
M
W
B
D
D
B
B
W
N
M
M
R
R
<br />
0
0
0
Q
Q
.
.
`
`
-
;
;
;
^
^
=
+
+
/
/
>
>
<
\
|
"
+
=
^
;
^
^
^
^
^
^
^
^
;
;
_
'
:
^
+
|
\
)
v
%
)
)
)
)
)
>
>
>
>
>
<
<
<
<
\
\
)
)
|
|
)
)
|
|
"
"
/
+
+
=
^
^
;
:
_
`
.
Q
R
M
N
N
N
M
M
R
0
0
Q
Q
<br />
 
Q
Q
Q
.
.
.
`
`
-
-
=
=
+
+
/
/
"
"
|
|
v
v
i
i
)
<
\
)
|
|
|
|
|
|
|
|
|
|
|
|
^
^
=
+
"
)
<
)
i
v
>
>
<
<
<
<
<
<
<
<
<
<
<
<
\
\
)
)
)
|
)
)
)
|
|
"
"
/
/
/
=
=
^
;
:
'
-
`
.
.
R
0
0
0
Q
Q
.
.
.
.
<br />
.
.
.
.
`
`
`
-
-
-
|
|
|
|
)
)
\
\
\
\
l
l
l
c
x
%
%
v
i
i
)
)
)
)
)
)
)
)
>
>
+
/
/
"
|
\
 
<
)
i
i
\
\
\
\
\
\
)
)
)
)
<
<
<
<
\
\
\
\
)
)
)
)
)
|
|
|
"
"
"
"
+
+
=
=
^
;
:
'
_
_
.
.
.
.
.
.
.
`
`
`
<br />
`
`
`
-
-
-
-
_
_
_
>
>
>
>
>
)
)
)
)
)
*
*
*
{
{
s
s
s
r
r
x
x
x
x
x
x
x
x
x
x
"
|
|
)
)
\
<
>
>
)
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
\
\
)
)
)
|
|
|
|
|
"
"
/
/
+
+
=
=
^
^
;
;
.
`
`
`
`
`
`
-
-
-
<br />
 
_
_
_
_
_
_
_
_
'
'
%
%
%
%
%
%
%
%
%
%
?
?
?
?
?
?
?
I
I
I
r
r
r
r
r
r
r
r
r
r
)
)
)
)
\
\
\
<
<
<
"
"
"
"
"
"
"
"
"
"
>
>
>
>
>
>
<
<
<
<
)
|
|
|
|
|
|
|
|
|
/
/
/
/
/
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
<br />
'
'
'
'
'
'
'
'
'
'
c
c
c
c
c
c
c
c
c
c
[
[
[
[
[
[
[
[
]
]
s
s
s
s
s
s
s
s
s
s
)
)
)
)
\
\
\
\
\
\
/
/
/
/
/
/
/
/
/
/
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
|
|
|
"
"
"
"
"
/
/
/
/
/
-
-
-
-
-
-
-
-
-
-
<br />
Q
Q
.
.
.
`
-
_
'
'
'
:
;
=
"
\
)
v
x
l
l
l
r
s
*
}
?
!
[
[
1
[
[
]
!
?
I
}
*
{
{
{
s
l
c
%
i
>
<
\
\
)
)
)
|
|
"
/
/
/
/
/
/
"
|
)
\
<
>
>
>
>
>
<
<
\
\
)
)
|
|
|
|
|
|
"
"
"
"
"
"
"
/
+
=
^
:
'
_
_
<br />
 
Q
Q
.
.
.
`
-
_
_
'
'
'
:
^
/
)
>
i
%
c
c
l
l
s
{
}
I
?
]
]
1
[
[
]
!
?
I
}
*
{
{
{
s
r
c
%
i
>
<
\
)
)
)
|
|
"
"
/
/
+
+
/
/
"
|
)
\
<
<
>
>
>
<
<
\
\
)
)
|
|
|
|
|
"
"
"
"
"
/
/
"
"
/
+
=
^
;
'
_
_
<br />
Q
Q
Q
.
.
.
`
-
_
_
-
-
_
:
^
/
)
<
)
i
%
x
x
c
r
s
*
}
I
?
1
1
[
]
!
?
I
}
*
*
{
{
s
r
c
%
v
)
>
<
|
|
|
"
"
/
/
+
+
+
+
+
+
/
"
|
)
\
\
<
\
\
\
)
)
|
|
"
"
/
/
/
/
/
/
/
+
+
+
+
"
"
/
+
=
^
;
:
'
'
<br />
0
0
0
Q
Q
.
.
`
`
-
.
.
.
-
'
;
+
"
|
)
i
v
v
%
x
c
r
s
{
{
1
[
[
]
]
!
?
I
}
}
s
s
r
l
c
%
v
)
>
>
/
/
/
/
+
+
=
=
=
^
=
=
=
+
+
/
"
|
|
)
"
"
"
"
/
/
+
+
+
=
+
+
=
=
=
=
=
=
=
^
"
"
"
/
+
=
^
;
:
:
<br />
M
M
M
R
R
0
0
Q
Q
.
R
R
0
Q
.
-
'
;
^
=
)
)
i
v
%
x
c
l
l
r
[
[
[
]
]
!
?
I
I
}
l
l
l
c
x
v
i
)
>
<
+
=
=
=
=
^
^
^
;
;
;
;
;
^
^
=
+
+
/
/
=
=
=
^
^
^
;
;
;
:
^
^
^
^
^
^
^
^
;
;
"
"
"
/
+
+
=
^
;
;
<br />
 
B
B
B
B
W
W
N
N
N
M
W
W
N
M
0
Q
.
`
-
-
i
i
i
v
%
x
x
c
l
l
[
[
]
]
]
!
?
?
I
I
%
%
v
v
i
)
>
<
\
\
^
^
;
;
;
;
:
:
:
:
'
'
'
'
:
:
;
;
^
^
'
'
'
'
_
_
_
-
-
-
^
^
^
^
^
^
;
;
;
;
"
"
"
/
/
+
+
=
=
^
<br />
$
$
@
@
@
@
K
K
K
K
D
B
B
W
N
M
R
0
0
Q
x
x
x
c
c
l
l
r
r
r
]
]
]
!
!
!
?
?
?
I
<
<
\
\
)
)
|
"
"
"
:
:
:
'
'
'
'
'
'
_
`
`
`
`
-
-
-
_
_
_
.
.
.
.
.
.
.
.
.
Q
=
=
=
=
=
^
^
^
^
^
"
"
"
/
/
/
+
+
=
=
<br />
A
A
A
A
A
A
A
&
&
&
D
D
D
D
B
B
W
N
N
N
s
s
s
{
{
{
*
*
*
*
!
!
!
!
!
?
?
?
?
?
+
+
+
=
=
=
^
^
^
;
_
_
_
_
_
_
_
_
-
-
Q
Q
Q
.
.
.
.
.
.
.
R
R
R
R
R
M
M
M
M
M
+
+
+
+
+
+
+
+
+
+
"
"
"
/
/
/
/
+
+
+
<br />
Z
Z
Z
Z
Z
b
b
b
b
b
H
H
H
D
D
D
D
B
B
B
?
?
?
?
?
?
!
!
!
!
?
?
?
?
?
?
?
?
I
I
_
_
_
_
_
_
_
_
-
-
-
-
-
-
-
-
-
-
-
-
R
R
R
R
R
R
R
R
0
0
W
W
W
W
B
B
B
B
B
B
"
"
"
"
"
"
"
"
"
"
/
/
/
/
/
/
/
/
/
/
<br />
X
X
X
X
X
X
X
X
X
X
H
H
H
H
H
H
D
D
D
D
1
1
1
1
1
1
1
1
1
1
I
I
I
I
I
I
I
I
I
I
.
.
.
.
.
.
.
.
.
.
`
`
`
`
`
`
`
`
`
`
N
N
N
N
N
N
N
N
N
M
H
H
H
H
H
H
H
H
H
H
)
)
)
)
)
)
)
)
)
)
/
/
/
/
/
/
/
/
/
/
<br />
R
M
N
D
@
8
O
b
P
X
g
X
P
G
Y
O
8
$
K
H
H
D
M
.
;
)
v
{
!
1
t
t
1
1
[
]
!
?
?
I
I
}
{
l
i
\
+
:
`
.
Q
Q
Q
.
.
.
.
.
`
`
`
`
.
.
.
0
R
M
N
N
N
N
W
W
B
B
D
D
H
H
H
H
B
M
Q
-
:
+
"
)
\
\
)
)
|
|
"
"
/
/
 
<br />
R
M
N
B
K
8
O
b
G
X
g
g
X
G
b
O
&
U
@
K
H
D
N
.
:
|
i
s
I
]
1
1
1
[
[
]
!
?
I
I
I
}
{
l
v
\
+
:
-
.
Q
Q
.
.
.
.
.
`
`
`
`
`
.
.
.
0
R
M
M
N
N
N
W
W
B
B
D
H
H
H
H
H
B
M
Q
`
:
=
"
)
\
\
)
)
|
|
"
"
/
/
<br />
R
M
N
B
K
U
A
Y
Z
G
g
g
X
G
b
k
A
8
$
@
K
H
W
Q
_
/
>
x
{
I
[
[
[
]
]
!
?
I
I
}
I
}
{
l
v
\
/
;
_
`
.
.
.
.
.
.
`
`
`
`
`
`
.
.
.
Q
0
R
M
N
W
W
W
B
B
D
D
H
H
H
H
D
B
M
Q
`
'
^
/
"
\
\
)
)
)
|
|
"
"
"
<br />
M
M
W
D
K
U
&
k
b
Z
E
E
g
P
Z
Y
O
A
8
U
K
H
W
0
-
^
)
i
x
r
]
]
!
!
?
?
I
}
}
*
*
*
s
c
v
<
"
=
:
_
.
.
.
.
.
`
`
`
-
-
.
.
.
.
Q
Q
0
R
M
M
W
W
B
B
B
D
D
H
H
H
D
B
W
M
Q
`
'
;
=
/
\
\
\
)
)
|
|
|
"
"
<br />
W
B
D
H
@
U
A
k
Y
b
E
E
g
X
G
Z
Y
k
A
A
D
B
N
0
`
:
/
\
)
v
?
?
?
I
I
}
*
*
*
{
s
s
l
x
i
<
|
+
^
:
.
.
.
.
`
`
`
-
-
-
.
.
.
Q
Q
0
R
R
M
M
B
B
B
B
D
D
H
H
H
H
W
N
M
R
.
`
'
;
^
+
\
\
\
)
)
)
|
|
|
|
<br />
K
K
@
$
8
&
O
Y
b
Z
E
g
g
X
P
G
b
Y
k
k
N
M
R
.
-
:
+
|
\
>
}
}
}
*
*
*
{
{
s
s
c
x
%
v
>
\
|
/
=
^
`
`
`
`
`
`
`
-
-
-
Q
0
0
0
R
R
M
M
N
N
B
B
B
D
D
D
H
H
H
H
0
0
Q
.
`
_
'
;
^
=
\
\
\
\
)
)
)
|
|
|
<br />
&
 
&
A
O
k
Y
b
Z
G
G
g
g
X
X
P
G
Z
b
b
Y
.
.
`
_
:
^
/
|
\
<
{
{
{
{
{
s
s
s
s
s
i
)
)
>
\
|
"
+
=
^
`
`
`
`
`
`
`
-
-
-
M
M
M
M
N
N
N
W
W
W
B
B
B
D
D
D
D
D
H
H
`
`
-
_
'
:
^
=
+
+
\
\
\
\
)
)
)
)
)
)
<br />
Z
Z
Z
G
G
P
X
X
g
g
X
X
P
P
P
G
G
Z
Z
b
;
;
^
=
+
"
|
\
<
<
s
s
s
s
s
s
r
r
r
r
)
)
)
|
"
/
+
=
^
^
`
`
`
`
`
`
`
`
`
`
W
B
B
B
B
B
B
D
D
D
B
B
B
D
D
D
D
D
D
D
;
;
^
^
=
+
+
/
"
"
\
\
\
)
)
)
)
)
)
)
<br />
E
E
4
4
4
4
d
d
d
d
P
P
G
G
G
G
G
Z
Z
Z
)
)
)
)
\
<
<
>
>
)
r
r
r
r
r
r
r
r
r
r
+
+
+
+
=
=
^
^
^
;
`
`
`
`
`
`
`
`
`
`
H
H
H
H
H
H
H
H
K
K
B
B
B
B
B
B
B
B
D
D
"
"
"
"
|
|
|
)
)
)
)
)
)
)
)
)
)
)
)
)
<br />
h
h
h
h
h
g
g
g
g
g
G
G
G
G
G
Z
Z
Z
Z
Z
)
)
)
)
i
i
i
i
i
i
r
r
r
r
r
r
r
r
r
r
;
;
;
;
;
;
;
;
;
;
.
.
.
`
`
`
`
`
`
`
@
@
@
@
@
@
@
@
@
@
B
B
B
B
B
B
B
B
B
B
\
\
\
\
\
\
\
<
<
<
)
)
)
)
)
)
)
)
)
)
<br />
0
0
N
D
$
O
Z
E
V
g
S
g
g
h
d
4
g
P
G
G
Z
b
O
U
B
Q
:
/
 
<
i
v
v
v
%
%
x
c
l
l
l
r
l
c
%
)
\
|
+
^
;
:
:
:
'
'
_
-
`
`
`
.
.
.
Q
R
N
B
H
K
@
@
@
@
K
K
H
D
D
B
B
B
W
N
0
.
'
^
/
)
<
<
<
<
<
<
\
\
\
)
)
<br />
Q
0
M
B
@
A
Z
g
d
h
g
g
h
V
d
E
X
P
G
Z
Z
b
O
U
B
Q
'
/
\
)
v
v
v
v
%
x
c
c
l
l
l
l
c
%
)
<
|
+
^
;
;
;
:
:
'
_
_
-
`
`
`
`
.
Q
0
M
W
D
H
K
@
@
K
K
H
H
D
B
B
B
B
W
M
0
.
'
^
/
)
\
<
<
<
<
<
\
\
\
\
\
<br />
Q
Q
R
W
K
8
k
G
g
4
V
V
d
4
E
g
P
G
Z
b
b
Y
A
$
B
Q
'
+
)
>
i
i
i
v
v
%
x
x
c
c
l
l
c
%
)
 
<
|
/
=
^
^
^
;
;
:
:
'
_
_
-
-
-
`
.
Q
R
N
W
D
D
H
H
H
H
D
D
B
W
W
W
W
N
M
Q
`
'
^
/
|
\
>
>
>
>
<
<
<
<
\
\
<br />
.
.
0
N
D
$
&
Y
Z
P
E
E
E
g
X
G
Z
b
Y
k
O
O
8
@
W
Q
_
=
"
)
)
)
)
)
i
v
v
%
%
%
l
c
x
%
i
<
)
"
+
=
=
=
=
=
^
;
;
:
:
:
_
_
-
`
.
Q
0
M
N
W
B
B
B
B
W
W
N
N
M
M
R
R
0
.
-
:
=
/
|
\
)
)
)
)
>
>
>
>
>
<
<br />
.
.
Q
R
W
H
$
&
O
k
P
P
G
Z
b
Y
k
O
O
A
8
8
$
H
N
Q
-
;
+
"
>
>
>
>
)
)
i
i
v
v
c
c
x
%
i
>
\
)
"
/
/
/
/
/
+
+
=
=
^
^
:
:
'
_
-
`
.
Q
0
0
N
N
N
M
M
R
R
R
0
0
.
.
.
-
'
;
+
"
)
\
i
i
i
i
i
)
)
)
)
)
<br />
.
.
Q
R
N
B
H
@
U
8
Y
Y
k
k
O
A
&
&
8
8
K
K
D
W
R
.
-
:
^
+
 
<
<
>
>
>
)
)
)
i
i
c
x
x
%
i
)
>
\
)
)
|
|
|
|
"
"
/
/
/
/
;
;
:
:
'
_
-
`
.
.
0
0
0
0
Q
Q
Q
.
.
.
_
'
'
;
^
+
"
)
\
<
v
v
v
v
v
i
i
i
i
i
<br />
Q
Q
0
R
M
W
B
H
K
@
8
8
8
8
U
U
$
$
@
@
W
N
M
R
Q
`
_
:
;
^
>
>
>
>
>
>
)
)
)
)
x
x
x
%
v
i
)
>
>
<
\
\
\
)
)
)
)
|
|
|
^
^
;
;
:
:
'
_
_
_
.
.
.
.
.
.
.
`
`
`
+
+
/
"
|
)
\
<
>
)
%
%
%
%
%
v
v
v
v
v
<br />
0
R
R
M
N
N
W
B
D
D
@
@
K
K
K
K
H
H
H
H
Q
Q
.
.
`
-
'
:
;
;
>
>
>
>
)
)
)
)
)
)
x
x
x
%
%
v
v
i
i
)
<
<
<
<
<
<
\
\
\
\
^
^
^
^
;
;
:
:
:
:
-
-
-
-
-
-
-
-
_
_
<
<
 
<
>
>
)
i
i
v
v
%
%
%
%
%
%
%
%
%
%
<br />
M
M
N
N
N
W
W
B
B
B
D
B
B
B
B
B
B
B
B
B
-
-
_
_
'
'
:
:
;
;
)
)
)
)
)
)
)
)
)
)
x
x
x
x
%
%
%
%
v
v
>
>
>
>
>
>
>
>
>
<
^
^
^
^
^
^
;
;
;
;
'
'
'
'
'
'
'
'
'
'
%
%
%
%
%
x
x
x
c
c
x
x
x
x
x
x
x
x
x
x
<br />
W
W
W
W
W
W
W
W
W
W
N
N
N
N
N
N
N
N
N
N
:
:
:
:
:
:
;
;
;
;
i
i
i
i
i
i
i
i
i
i
x
x
x
x
x
x
x
x
x
x
>
>
>
>
>
>
>
>
>
>
^
^
^
^
^
^
^
^
^
^
:
:
:
:
:
:
:
:
:
:
l
l
l
l
l
l
r
r
r
r
x
x
x
x
x
x
x
x
x
x
<br />
"
/
+
^
:
-
.
R
N
W
W
W
W
W
W
W
N
N
N
N
N
N
M
0
Q
.
-
_
:
;
;
;
^
=
/
|
\
<
)
i
i
i
i
v
v
v
%
%
x
x
x
x
x
%
v
v
i
i
)
)
)
>
>
<
)
|
/
+
=
^
^
^
^
^
;
;
;
:
:
:
:
;
^
+
|
<
i
%
l
r
r
r
r
r
l
l
c
c
x
x
<br />
"
/
+
^
:
-
.
0
M
N
W
W
W
W
W
N
N
N
N
N
N
M
M
0
Q
.
-
_
:
:
;
;
^
=
/
"
)
<
>
)
)
)
i
i
i
v
v
%
%
%
%
%
%
%
v
i
i
)
)
>
)
>
>
<
)
|
/
+
=
^
^
^
^
^
;
;
;
;
:
:
:
:
^
+
|
\
)
%
c
l
r
r
r
r
l
l
c
c
x
x
<br />
"
/
+
^
:
_
.
Q
R
M
N
N
N
N
N
N
N
M
M
M
M
M
R
0
.
.
-
_
'
:
:
:
;
^
=
/
|
)
 
<
<
<
<
<
>
>
>
)
)
i
i
v
v
i
i
)
)
>
>
<
<
>
>
<
\
)
|
"
+
=
=
^
^
^
^
^
^
;
;
;
;
:
:
^
+
"
\
>
v
x
c
r
r
l
l
l
c
c
x
x
x
<br />
"
/
+
=
;
_
`
.
0
R
M
M
M
M
M
M
M
R
R
R
R
R
R
0
.
.
-
_
'
:
_
_
'
:
;
=
+
"
|
|
|
|
|
|
)
)
\
\
\
\
)
)
>
>
<
<
\
\
)
)
>
>
<
\
)
|
"
/
+
=
=
=
=
=
^
^
^
^
^
^
:
;
^
=
"
)
<
)
v
%
l
l
l
c
c
x
x
x
%
%
<br />
/
/
+
^
;
'
-
.
.
Q
R
R
R
R
R
R
0
0
0
0
R
R
0
Q
.
.
`
-
_
_
`
`
`
-
_
:
;
^
=
=
=
=
+
+
+
+
/
/
/
/
\
\
\
\
)
)
)
|
|
|
<
 
<
<
\
)
|
"
/
/
+
=
=
=
=
=
=
^
^
^
^
;
;
^
+
/
|
\
>
)
i
c
c
c
x
x
x
%
%
%
%
<br />
+
=
=
^
;
'
_
`
.
.
0
0
Q
Q
Q
Q
Q
Q
Q
Q
R
R
0
0
Q
.
.
`
`
-
Q
Q
.
.
.
`
-
_
_
'
:
:
:
:
:
;
;
;
;
;
)
)
)
|
|
|
"
"
"
"
<
<
<
\
)
)
|
"
"
/
=
=
=
=
^
^
^
^
^
^
^
^
=
+
"
|
\
<
>
)
x
x
x
x
%
%
%
%
v
v
<br />
^
^
;
;
:
'
_
-
`
`
.
.
.
.
.
.
.
.
.
.
R
R
R
0
0
Q
Q
.
.
.
M
M
M
R
R
0
Q
Q
.
.
-
-
-
-
-
-
-
-
_
_
|
|
|
|
"
"
"
"
/
/
<
<
\
\
\
)
|
|
|
"
^
^
^
^
^
^
^
;
;
;
+
+
/
"
|
)
\
<
<
>
%
%
%
%
%
%
v
v
v
v
<br />
:
:
:
'
'
_
_
-
-
`
.
.
`
`
`
`
`
`
`
`
M
M
M
R
R
R
0
0
0
0
B
B
B
B
W
W
W
N
N
N
.
.
.
.
.
.
.
.
.
.
|
|
|
"
"
"
"
"
"
"
\
\
\
\
\
)
)
)
)
)
;
;
;
;
;
;
:
:
:
:
"
|
|
|
)
)
\
<
 
<
<
%
%
%
%
%
v
v
v
v
v
<br />
_
_
_
_
_
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
N
N
N
N
M
M
M
M
M
M
K
K
K
K
H
H
H
H
H
H
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
|
|
|
|
|
|
|
|
|
|
\
\
\
\
\
\
\
\
)
)
'
'
'
'
'
'
'
'
'
'
\
\
\
\
\
<
<
<
<
<
v
v
v
v
v
v
v
v
v
v
<br />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
N
N
N
N
N
N
N
N
N
N
$
$
$
$
$
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
|
|
|
|
|
|
|
|
|
|
\
\
\
\
\
\
\
\
\
\
'
'
'
_
_
_
_
_
_
_
<
<
<
<
<
<
 
<
>
>
>
v
v
v
v
v
v
v
v
v
v
<br />
"
"
/
+
=
;
:
'
_
-
-
-
-
-
-
-
-
_
_
_
_
_
-
`
.
Q
0
M
N
N
W
W
W
B
D
H
K
@
$
$
$
$
@
K
H
B
W
N
M
R
R
0
Q
.
-
'
^
+
"
|
)
)
)
)
)
)
\
\
\
\
\
\
)
|
/
+
^
:
'
_
_
_
'
;
^
+
"
)
<
<
>
>
>
>
)
)
i
v
v
v
<br />
"
/
/
+
^
;
'
_
-
`
`
`
`
`
`
-
-
-
-
-
-
-
-
`
.
Q
R
M
N
W
W
W
B
B
D
H
K
@
$
$
U
U
$
@
K
D
B
N
M
M
R
R
0
.
`
'
;
=
/
"
|
|
|
)
)
)
)
)
\
\
\
\
)
|
/
+
^
:
'
'
_
'
'
;
^
+
"
)
\
<
>
>
>
>
)
)
i
i
v
v
<br />
+
=
=
^
;
'
_
-
`
.
.
.
.
.
.
.
.
.
`
`
`
`
`
.
Q
0
R
M
N
W
B
B
D
D
H
K
@
$
U
U
&
8
8
U
$
K
H
D
B
W
M
M
R
Q
.
-
'
;
=
+
"
"
"
|
|
|
|
|
)
)
\
)
)
"
/
+
^
;
'
'
'
'
:
;
^
+
"
)
\
<
<
<
<
>
>
)
)
i
i
i
<br />
:
:
:
'
_
-
.
.
.
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
.
.
.
Q
0
R
M
N
W
B
H
K
K
@
@
$
U
8
8
 
&
O
O
A
&
8
U
$
@
K
H
W
W
N
R
0
.
`
_
:
:
/
/
/
/
/
/
"
"
"
"
)
)
|
"
/
=
^
;
:
'
'
'
:
;
^
+
"
|
)
\
\
\
\
<
<
>
>
>
)
)
<br />
`
`
`
.
.
Q
0
R
R
M
M
M
M
M
R
R
R
R
R
R
0
0
R
R
M
N
W
B
D
D
U
U
U
8
8
&
A
A
O
O
Y
Y
Y
k
O
A
&
8
8
U
B
B
W
N
M
0
.
.
`
-
=
=
+
+
+
+
+
+
+
+
|
|
"
/
+
=
^
;
:
:
:
:
:
;
=
+
/
"
|
)
)
)
)
\
\
\
<
<
<
<
<br />
0
0
R
R
M
N
W
W
B
B
W
W
W
W
W
W
W
N
N
N
W
W
W
B
B
D
H
H
K
K
O
O
k
k
k
Y
Y
b
b
b
Z
Z
Z
b
b
Y
k
k
O
O
D
D
B
W
N
M
0
Q
.
.
^
^
^
=
=
=
=
=
=
=
"
/
/
+
+
=
^
;
;
:
;
;
;
^
=
+
/
"
"
|
|
|
|
|
|
|
)
)
)
)
<br />
B
B
D
D
D
H
H
K
K
K
D
D
D
D
B
B
B
B
B
B
K
K
K
K
@
@
$
$
U
U
P
P
P
P
P
X
X
X
g
g
P
P
P
G
G
Z
Z
b
b
b
B
B
B
W
N
M
R
R
0
0
^
^
^
^
^
^
^
^
^
^
+
+
+
+
=
^
^
;
;
;
^
^
^
=
=
+
+
/
"
"
/
/
/
/
/
/
"
"
"
"
<br />
 
$
$
$
$
U
U
U
U
8
8
H
H
H
H
H
H
H
H
H
H
8
8
8
8
8
&
&
&
&
A
d
d
d
d
d
V
V
V
V
V
X
X
X
P
P
P
G
G
G
G
W
W
N
N
M
M
R
R
R
0
^
^
^
^
^
^
^
^
^
^
=
=
=
=
=
^
^
^
;
;
=
=
=
=
+
+
+
/
/
/
=
=
=
=
=
=
+
+
+
+
<br />
A
A
A
A
A
A
A
A
A
A
H
H
H
H
H
H
H
H
H
H
O
O
O
O
O
k
k
k
k
k
q
q
q
q
q
q
q
q
q
q
X
X
X
X
X
X
P
P
P
P
M
M
M
M
R
R
R
R
0
0
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
;
+
+
+
+
+
+
+
+
/
/
^
^
^
^
^
^
^
^
^
^
<br />
k
k
k
k
k
k
k
k
k
k
K
K
K
K
K
K
K
K
K
K
b
b
b
b
b
b
b
b
b
b
p
p
p
p
p
p
p
p
p
p
X
X
X
X
X
X
X
X
X
X
0
0
0
0
0
0
0
0
0
0
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
+
+
+
+
+
+
+
+
+
+
;
;
;
;
;
;
;
;
;
;
<br />
&
&
&
A
A
O
k
k
Y
Y
Y
Y
k
O
A
8
U
$
@
K
K
K
@
$
U
&
O
k
Y
b
b
Z
G
X
E
V
g
m
p
F
F
F
p
6
q
g
V
4
g
X
X
P
G
Y
A
U
K
W
M
0
0
0
Q
.
`
-
'
:
;
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
=
=
=
+
+
+
+
+
+
+
=
^
^
;
;
:
<br />
&
&
 
&
A
A
O
O
k
k
Y
Y
Y
k
O
A
&
U
$
@
K
K
K
@
$
8
&
O
k
b
b
b
Z
G
X
E
V
g
q
6
p
F
F
p
m
S
h
d
4
g
X
X
P
G
Y
A
U
K
W
M
R
Q
Q
Q
.
`
-
'
:
;
^
^
^
^
^
^
^
^
^
^
^
^
^
^
=
=
=
+
+
+
/
/
/
+
+
=
=
^
^
;
;
<br />
&
&
&
A
A
O
O
k
k
Y
b
b
Y
k
O
A
8
U
$
$
@
@
$
U
&
A
O
Y
b
Z
b
Z
G
P
g
d
h
S
m
6
p
p
6
q
S
h
d
E
g
X
G
G
Z
k
A
$
H
B
M
R
.
.
.
`
-
_
:
;
^
=
=
=
=
=
=
=
=
=
=
=
=
+
+
+
+
/
/
/
"
"
"
"
/
/
+
+
=
=
^
^
<br />
&
A
A
A
O
O
k
k
k
Y
Z
b
b
Y
k
O
A
&
8
8
U
U
U
8
A
O
k
Y
b
Z
b
b
Z
P
g
4
V
g
S
q
m
m
q
S
h
V
4
E
X
X
b
b
k
O
8
@
H
W
M
R
`
`
`
-
_
:
;
^
=
=
/
/
/
+
+
+
+
+
+
+
/
"
"
"
"
"
|
|
|
|
|
|
"
"
"
/
/
+
+
=
<br />
A
O
O
O
O
k
k
k
Y
Y
G
Z
Z
b
b
Y
k
O
A
A
8
8
&
A
O
k
Y
b
b
Z
b
b
Z
G
X
E
4
V
h
g
g
g
h
V
d
4
g
X
P
P
A
A
&
U
@
H
B
N
R
0
_
_
'
:
;
^
=
=
+
/
|
|
|
"
"
"
"
"
"
"
)
)
)
)
\
\
\
\
<
<
|
|
|
"
"
"
/
/
+
+
 
<br />
k
k
k
k
Y
Y
Y
b
b
b
P
P
G
G
Z
b
b
Y
Y
k
&
A
A
O
O
k
Y
b
b
Z
b
Z
Z
G
P
g
E
4
d
V
4
4
4
E
g
X
P
G
Z
Z
@
@
K
H
B
N
M
0
Q
.
;
;
^
^
=
+
/
/
"
"
\
\
\
\
\
\
\
\
\
\
>
>
>
>
>
)
)
)
)
)
"
"
"
"
/
/
/
+
+
+
<br />
b
b
b
Z
Z
Z
Z
Z
G
G
X
P
P
P
G
G
G
Z
Z
b
A
A
O
O
k
k
Y
Y
b
b
Z
Z
G
G
P
X
g
E
E
4
P
P
G
G
Z
b
b
Y
Y
k
M
M
M
R
0
Q
.
`
-
-
/
/
/
/
"
"
|
|
)
)
)
)
)
)
)
)
)
)
)
)
v
v
v
v
v
v
%
%
%
%
+
+
+
+
=
=
=
=
=
^
<br />
P
P
P
P
P
P
P
X
X
X
X
X
X
X
X
P
P
P
P
G
O
O
O
O
k
k
k
Y
Y
Y
G
G
P
P
P
X
X
g
g
E
k
k
k
k
O
O
A
A
A
&
-
-
-
_
_
'
:
:
;
;
)
)
)
)
)
\
\
\
\
<
%
%
%
%
%
%
%
%
%
%
c
c
c
c
c
c
c
c
c
c
;
;
;
;
;
:
:
:
:
:
<br />
g
g
g
g
g
E
E
E
E
E
g
g
g
g
X
X
X
X
X
X
O
O
O
O
O
O
k
k
k
k
P
P
P
P
X
X
X
X
g
g
8
8
8
8
8
U
U
U
U
U
=
=
=
=
+
+
+
/
/
/
<
<
<
<
<
>
>
>
>
>
c
c
c
c
c
c
c
c
c
c
r
r
r
r
r
r
r
r
r
r
_
_
_
_
_
_
_
-
-
-
<br />
 
4
4
4
4
4
4
4
4
4
4
g
g
g
g
g
g
g
g
g
g
O
O
O
O
O
O
O
O
O
O
X
X
X
X
X
X
X
X
X
X
@
@
@
@
@
@
@
@
@
@
|
|
|
|
|
|
|
)
)
)
)
)
)
)
)
)
)
)
)
)
r
r
r
r
r
r
r
r
r
r
s
s
s
s
s
s
s
s
s
s
.
.
.
.
.
.
.
.
.
.
<br />

Revision as of 16:36, 6 November 2011

asciinoise

A modified Perlin noise generator built in Python that creates patterns made out of ascii characters and outputs as html. The value returned from the perlin noise algorithm selects a character from an ascii list arranged according to pixel-density. For example, the first character in the list is a . and the final character is a Q - the latter character appearing more dense on-screen than the full-stop.

Refresh me asciinoise!


Source

#!/usr/bin/python2.7
#Perlin noise implementation for python by The_Hatstand
#Modified from http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

############################################################################
#..........................................................................#
#..######..######..######..##..##......##..##..######..##..######..######..#
#..##..##..##......##......##..##......##..##..##..##..##..##......##......#
#..##..##..##......##......##..##......###.##..##..##..##..##......##......#
#..######..######..##......##..##......##.###..##..##..##..######..####....#
#..##..##......##..##......##..##......##..##..##..##..##......##..##......#
#..##..##......##..##......##..##......##..##..##..##..##......##..##......#
#..##..##..######..######..##..##......##..##..######..##..######..######..#
#..........................................................................#
############################################################################

import math
import random

#--Perlin Noise Functions ----------------------------------------------

#first make a generator that takes a returns a random number based on a 2dimensional input
def rawNoise(x, y):
	n = x+y*57
	n = (n<<13) ^ n
	return ( 1.0 - ( (n * (n * n * 44560482149 + 13091204281) + 1376312589)&0x7fffffff) / 1073741824.0)

#creates a smoothing algorithm to the raw noise (based on averaging neighbouring input-coords)
def smoothNoise(x, y):
	corners = (rawNoise(x-1, y-1)+rawNoise(x+1, y-1)+rawNoise(x-1, y+1)+rawNoise(x+1, y+1))/16
	sides = (rawNoise(x-1, y)+rawNoise(x+1, y)+rawNoise(x, y-1)+rawNoise(x, y+1))/8
	center = rawNoise(x, y)/4
	return (corners + sides + center)

#creates a cosine wave interpolation algorithm to further smooth the results
def cosineInterpolation(a, b, x):
	ft = x*3.1415927
	f = (1-math.cos(ft))*.5
	return (a*(1-f)+b*f)

#applies smoothing algorithms to create a more harmonic stream of numbers
def interpolatedNoise(x, y):
	int_x = int(x)
	fractional_x = x-int_x

	int_y = int(y)
	fractional_y = y-int_y

	v1 = smoothNoise(int_x, int_y)
	v2 = smoothNoise(int_x+1, int_y)
	v3 = smoothNoise(int_x, int_y+1)
	v4 = smoothNoise(int_x+1, int_y+1)
	
	i1 = cosineInterpolation(v1, v2, fractional_x)
	i2 = cosineInterpolation(v3, v4, fractional_y)

	return cosineInterpolation(i1, i2, fractional_y)

#perlin noise algorithm
def perlinNoise2d(x, y, frequency, numOctaves):
	total = 0;
	p = 1;
	n = numOctaves - 1

	for i in range(n):
		freq = (1^i)*frequency
		amp = p^i
		total += interpolatedNoise(x*freq, y*freq)*amp
        total = total/n

	return total

#--DO STUFF ---------------------------------------------------------
#set headers
print """Content-type: text/html\n\n"""

#css/html
print """<html><head><style type="text/css">body{background:#000000; font-family: Monospace; line-height:8px; letter-spacing: -1px; font-size: 8px;color:#FFFFFF;}</style></head>"""
print "<body>"

#ascii list arranged according to onscreen character-density
chars = ['.', '`', '-', '_', "'", ':', ';', '^', '=', '+', '/', '"', '|', ')', """\\""", '<', '>', ')', 'i', 'v', '%', 'x', 'c', 'l', 'r', 's', '{', '*', '}', 'I', '?', '!', ']', '[', '1', 't', 'a', 'e', 'o', '7', 'z', 'j', 'L', 'u', 'n', 'T', "#", 'J', 'C', 'w', 'f', 'y', '3', '2', '5', 'F', 'p', '6', 'm', 'q', 'S', 'g', 'h', 'V', 'd', '4', 'E', 'g', 'X', 'P', 'G', 'Z', 'b', 'Y', 'k', 'O', 'A', '&', '8', 'U', '$', '@', 'K', 'H', 'D', 'B', 'W', 'N', 'M', 'R', '0', 'Q']

charlen = len(chars) #length of chars[]

_octaves = random.randint(2, 4) #Calculates how many octaves the noise should be calculated over: 1 < octaves < 5
_frequency = random.uniform(0.1, 0.75) #Changes the "visual complexity" of the noise: 0.1 < frequency < 1
_modifier = random.randint(0, charlen/2) #Modifies the +/- range the Noise operates over
_threshold = random.randint(0, 20) #Shifts the noise into a new range +/- _modifier

#the x,y loop
for y in range(100):
    for x in range(100):
        #PerlinNoise2d args = xpos, ypos, freq, persistence, octaves
        n = int((perlinNoise2d(x, y, _frequency, _octaves)*_modifier)+_threshold)
        if(n > charlen):
            print chars[charlen]
        else:
            print chars[n]

    print "<br />"

#close html
print "</body>"