QL5BQLboot Ô¨c @ @$P@ €‚„†ˆŠŒŽ ƒ…‡‰‹‘˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙øøũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙                           !000@PPPPPPPP``````pppppppp€€                 °°°°°°ĀĀĀĀĀĀĀĀĀĀ Ā Ā Ā Ā ĀĀĀĀĀĀĀĀĀĀĀĀĐĐāāāāđöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 80000@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@PPPPPPPPPP P `````pppppp€€€€€€      !"#$%&'()*+,-./01öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö23456789:;<=>?@ABCDEF                        °°°°°°°°°° ° ° ° ĀĀĀĀĀĀĀĀĀĀ Ā Ā Ā Ā ĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀ Ā!Ā"Ā#Ā$Ā%Ā&Ā'Ā(Ā)Ā*Ā+Ā,Ā-Ā.Ā/Ā0Ā1Ā2Ā3Ā4Ā5Ā6Ā7Ā8Ā9Ā:Ā;Ā<ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙ũ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööĶBOOTUignore moveq #1,d0 cmp.l d0,d3 ; =1 ? beq.s disysd ; -> SIG_DFööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööpossible to test it against every other piece of software or hardware. Please let us know if you discover any incompatibilities so that we can try to sort them out.3. BRIEF DESCRIPTION OF THE NEW COMMANDSABS_POSITION - Set file position absolute.BYTES_FREE - How much free memory is left, in bytes.CHECK - Test to see if a machine code PROC/FN exists.DEV_NAME - Scan the Directory Device list, returning the next name.DISPLAY_WIDTH - How many bytes are used to hold one , floatThe given float value is converted to the internal QDOS format for floating point numbers and those 6 bytes are sent to the given channel number. The full range of QL numbers can be sent including all the negative values. GET_FLOAT will return negative values correctly (unless an error occurs).PUT_LONG #channel, longThe long value given is sent as a sequence of four bytes to the channel. Negative values can be put and these will be returned correctly by GET_LONG unless any errors occur. /Nšüj.P ŧ0Ū€ KR‹H€HĀ,ŧŧ0mŧŧ9oĘŧŧ.f† K100 REMark QL BOOT 110 PRINT #0,"Loading QL BOOT" 120 PRINT #0,"Loading TK2" 130 base=RESPR(16348): LBYTES flp1_tk2_ext,base: CALL base 140 TK2_EXT 150 PRINT #0,"Loading Pointer Environment" 160 LRESPR flp1_ptr_gen 170 LRESPR flp1_wman 180 LRESPR flp1_hot_rext 190 PRINT #0,"Loading DJTK" 200 LRESPR flp1_djtoolkit_bin 210 PRINT #0,"Loading TTK" 220 LRESPR flp1_turbo_tk_code 230 PRINT #0,"Loading Env. Variables" 240 LRESPR flp1_env_bin 250 PRINT FILLMEM_W SCREEN_BASE(#0), 16 * 1024, 0or this :-1020 FILLMEM_L SCREEN_BASE(#0), 8 * 1024, 0and the screen will change to all black. Note how the second parameter is halved each time, this is because there are half as many words as bytes and half as many longs as words.The fastest is FILLMEM_L and the slowest is FILLMEM_B. When you use FILLMEM_W or FILLMEM_L you must make sure that the start_address is even or you will get a bad parameter error. FILLMEM_B does not care about its start_address being #0,"Loading Path" 260 LRESPR flp1_pth_rext 270 PRINT #0,"Loading QLib Runtimes" 280 LRESPR flp1_qlib_run_336mod 290 PRINT #0,"Loading Signal Ext." 300 LRESPR flp1_sigext30_rext 310 PRINT #0,"Done Loading Boot" ĀŧgF Ž\˙ļfRŽ˙n`. ŽL˙ļg ŽT˙ļf"TŽ˙n Āŧ€gpX`pxS… E€S… Eŧ0-E˙r .˙䐅-@˙Ā`ˆŧ`ˆŧˆŧ` ˆŧˆŧ Āŧf-|˙Äp///.˙Ä/ Hn˙:Hn˙jHn˙ĀNšúŦOī" Ё-@˙Ž`  X€*€ @YHS…"E¨`b X€*€ @YH*f*<éV Āŧf //Nš FX" Ё` /.˙ÄHx/NšķOī -@˙äf ĐŽ˙Ä even or not.FILLMEM_B truncates the value to the lowest 8 bits, FILLMEM_W to the lowest 16 bits and FILLMEM_L uses the lowest 32 bits of the value. Note that some values may be treated as negatives when PEEK'd back from memory. This is due to the QL treating words and long words as signed numbers.FLUSH_CHANNEL #channelThis procedure makes sure that all data written to the given channel number has been 'flushed' out to the appropriate device. This means that if a power cut occurs, then no data willöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö be lost.MOVE_MEM source, destination, lengthThis procedure will copy the appropriate number of bytes from the given source address to the destination address. If there is an overlap in the addresses, then the procedure will notice and take the appropriate action to avoid corrupting the data being moved. Most moves will take place from source to destination, but in the event of an overlap, the move will be from (source + length -1) to (destination + length -1).This procedure tries to do the moving a-@˙ä`S… EĢ˙˙ .˙䐅-@˙ĀBŽ˙v-n˙Ā˙z-E˙~BŽ˙jBŽ˙n-|˙ŽBŽ˙ĒAî˙^-Hvrm1qdf0ĄÂ%F&X- DJToolkit, page nnn -DJTOOLKITWRITTEN BY NORMAN DUNBAR, 1993-94This has been produced at the suggestion of Dilwyn Jones in an effort to provide QLiberator users with some of the file & memory handling utilities, direct file access (in internal format) & positioning commands that are found in the Turbo Toolkit and Toolkit 2 etc. In addition, there are a few routines not (yet) found in any other toolkit.All of s fast as possible and checks the addresses passed as parameters to see how it will do this as follows :-1. If both addresses are odd, move one byte, increase the source & destination addresses by 1 and drop in to treat them as if both are even, which they now are !2. If both addresses are even, calculate the number of long word moves (4 bytes at a time) that are to be done and do them. Now calculate how many single bytes need to be moved (zero to 3 only) and do them.3. If one address is odd and the othe procedures and functions in this toolkit can be compiled by QLiberator, but one of the functions, DEV_NAME, cannot be compiled by Turbo or Supercharge as it modifies its parameter as well as returning a string.This toolkit may be supplied as part of a commercial or shareware or public domain program which has been QLiberator compiled. It should be supplied linked to the object program, not loaded by a BOOT program.To link this toolkit into a QLiberator compiled program, use the following compiler dither is even the move can only be done one byte at a time, this is quite a lot slower than if long words can be moved.The calculations to determine which form of move to be done adds a certain overhead to the function and this can be the slowest part of a memory move that is quite small.MOVE_POSITION #channel, relative_positionThis is a similar procedure to ABS_POSITION, but the file pointer is set to a position relative to the current one. The direction given can be positive to move forward in thrective somewhere near the start of the program to be compiled. The drive name is where the compiler can find the toolkit file.110 REMark $$asmb=FLP2_DJToolkit_BIN,0,121. COPYRIGHT NOTICE AND DISCLAIMERThis software is Copyright  Norman Dunbar 1993-94 and may be freely copied as QL freeware.You can make backup copies using whatever method you have and normally use (e.g. WCOPY from Toolkit 2). DJToolkit is not copy protected (except by copyright law).While all reasonable care has been taken to ee file, or negative to move backwards. The channel must of course be opened to a file on a directory device. If the position given would take you back to before the start of the file, the position is left at the start, position 0. If the move would take you past the end of file, the file is left at end of file.After a MOVE_POSITION command, the next access to the given channel, whether read or write, will take place from the new position.POKE_FLOAT address, valueThis procedure will poke the 6 bytnsure that this program and its manual are accurate and do not contain any errors, neither the author nor publisher will in any way be liable for any direct, indirect or consequential damage or loss arising from the use of, or inability to use, this software or its documentation. We reserve the right to constantly develop and improve our products.2. QUESTIONS ABOUT THE TOOLKITWHAT IS A TOOLKIT?A toolkit is a set of BASIC extensions, new commands and functions which add to the number of "words" underes that the QL uses to represent a floating point variable into memory at the given address. The address can be odd or even as the procedure can cope either way.POKE_STRING address, stringThis procedure simply stores the strings contents at the given address. Only the contents of the string are stored, the 2 bytes defining the length are not stored. The address may be odd or even.If the second parameter given is a numeric one or simply a number, beware, QDOS will convert it to the format that would stood by the QL's BASIC language. These new extensions greatly add to the power and versatility of SuperBASIC, by adding the facility to perfrom new actions, or by simplifying a task which is difficult to program at the momentCAN I USE THE TOOLKIT IN MY OWN PROGRAMS?Yes, you can use these commands both in interpreted BASIC programs and compiled BASIC programs, but see the note above regarding use with Turbo.DOES IT WORK WITH OTHER TOOLKITS?We have tried to ensure that there is no clash, but it is imbe seen if the number was PRINTed before storing it at the address. For example, 1 million would be '1E6' which is arithmetically the same, but characterwise, very different.PUT_BYTE #channel, byteThe given byte is sent to the channel. If a byte value larger than 255 is given, only the lowest 8 bits of the value are sent. The byte value written to the channel will always be between 0 and 255 even if a negative value is supplied. GET_BYTE returns all negative values as positive.PUT_FLOAT #channelw_many, valueThese procedures are provided so that a quick and simple way to fill up areas of memory is available to DJToolkit users. The 3 variations stuff bytes, words or long words into memory as required.Note that the second parameter is the count of how many bytes, words or long words you want to put into the memory area starting at 'start_address'.For example, the screen memory is 32 kilobytes long. To fill it all black, try this :-1000 FILLMEM_B SCREEN_BASE(#0), 32 * 1024, 0or this :-1010whether the negative result is a valid long or float, or if an error occurred.Functions that return strings, for example DEV_NAME, cannot return an error code, so if any errors occur in them, they will act in a similar way to procedures and cause the program to stop with an appropriate error message.Any function can cause an error that will stop your program from running if something goes wrong when the function tries to fetch its parameters, in this case the function will simply 'fall over' and QDOS wiscreen line ?DJ_OPEN - Opens a file, returns error or channel id.DJ_OPEN_IN - Ditto, similar to OPEN_IN.DJ_OPEN_NEW - Creates a file, returns channel id or error.DJ_OPEN_OVER - Overwrites a file, returns error or channel idDJ_OPEN_DIR - Opens a device directory for access.DJTK_VER$ - Return the toolkit version number as a string.FETCH_BYTES - Get some bytes from a channel.FILE_BACKUP - Get the backup date for a specific file.FILE_DATASPACE - Get the fPUT_STRING #channel, stringThe string parameter is sent to the appropriate channel as a two byte word giving the length of the data then the characters of the data. If you send a string of zero length, LET A$ = "" for example, then only two bytes will be written to the file. See POKE_STRING for a description of what will happen if you supply a number or a numeric variable as the second parameter. As with all QL strings, the maximum length of a string is 32kbytes.PUT_WORD #channel, wordThe supplile's dataspace.FILE_LENGTH - Get the file's length.FILE_POSITION - Get the current position in the file.FILE_TYPE - Get the file's type.FILE_UPDATE - Get the file's update date.FILLMEM_B - Fill memory with a byte value.FILLMEM_L - Fill memory with a long value.FILLMEM_W - Fill memory with a word value.FLUSH_CHANNEL - Flush the data on a channel to a device.GET_BYTE - Fetch one byte from a channel.GET_FLOAT - Fetch 6 bytes from a channel.ied word is written to the appropriate channel as a sequence of two bytes. If the word value supplied is bigger than 65,535 then only the lower 16 bits of the value will be used. Negative values will be returned by GET_WORD as positive.RELEASE_HEAP addressThe address given is assumed to be the address of a chunk of common heap as allocated earlier in the program by RESERVE_HEAP. In order to avoid crashing the QL when an invalid address is given, RELEASE_HEAP check first that there is a flag at addressGET_LONG - Fetch 4 bytes from a channel.GET_STRING - Fetch a QDOS string from a channel.GET_WORD - Fetch 2 bytes from a channel.KBYTES_FREE - How much free memory is left in Kbytes.LEVEL2 - Test whether level 2 drivers are present on a channel.MAX_CON - Returns the absolute limits of a SCR or CON channel.MAX_DEVS - Counts the number of directory devices. See DEV_NAME.MOVE_MEM - Move memory around.MOVE_POSITION - Set a file position rel-4 and if so, clears the flag and returns the memory back to the system. If the flag is not there, or if the area has already been released, then a bad parameter error will occur.It is more efficient to RELEASE_HEAP in the opposite order to that in which it was reserved and will help to avoid heap fragmentation.SET_XINC #channel, incrementSET_YINC #channel, incrementThese two functions change the spacing between characters horozontally, SET_XINC, or vertically, SET_YINC. This allows slightly morative to its current one.PEEK_FLOAT - Read 6 bytes from memory into a float variable.PEEK_STRING - Get bytes from memory into a string.POKE_FLOAT - pokes a floating point variable into memory.POKE_STRING - Store the string in memory at a given address.PUT_BYTE - Send 1 byte to a channel.PUT_FLOAT - Send 6 bytes to a channel.PUT_LONG - Send 4 bytes to a channel.PUT_STRING - Send a QDOS string to a channel.PUT_WORD - Send 2 bytes to a channele information to be displayed on the screen. SET_XINC allows adjacent characters on a line of the screen to be positioned closer or further apart as desired. SET_YINC varies the spacing between the current line of characters and the next.By choosing silly values, you can have a real messy screen, but try experimenting with OVER as well to see what happens. Use of the MODE or CSIZE commands in SuperBasic will overwrite your new values.USE_FONT #channel, font1_address, font2_addressThis is a procedure.QPTR - Is the Pointer Environment available ?READ_HEADER - Read the header for a file into a buffer.RELEASE_HEAP - Remove some space allocated with RESERVE_HEAP.RESERVE_HEAP - Get some Common Heap space for a program to use.SCREEN_BASE - Find out where the screen memory starts for a channel.SCREEN_MODE - Returns the current screen mode, 4 or 8.SEARCH_C - Look in memory for a string, case is considered.SEARCH_I - Ditto, but case is ignored.SET_HEAD that will allow your programs to use a character set that is different from the standard QL fonts. The following example will suffice as a full description :-1000 REMark Change the character set for channel #11010 :1020 REMark Reserve space for the font file1030 size = FILE_LENGTH('flp1_font_file')1040 IF size < 01050 PRINT 'Font file error ' & size1060 STOP1070 END IF1080 :1090 REMark Reserve space to load font into1200 font_address = RESERVE_HEAP(size)1210 IF font_address < 01220 PER - Set the header for a file.SET_XINC - Change horozontal spacing between characters.SET_YINC - Change vertical spacing between lines of characters.SYSTEM_VARIABLES - Find out where the system variables are.USE_FONT - Change the fonts used by a channel.WHERE_FONTS - Find the addresses of the two fonts used on a channel.In the following descriptions, all parameters must be supplied as there are no defaults, in addition, when a channel number is being passed, eitRINT 'Heap error ' & font_address1230 STOP1240 END IF1250 :1260 REMark Load the font1270 LBYTES flp1_font_file, font_address1280 :1290 REMark Now use the new font1300 USE_FONT #1, font_address, 0.......Rest of program9000 REMark Reset channel #1 fonts9010 USE_FONT #1, 0, 09020 :9030 REMark Release the storage space9040 RELEASE_HEAP font_addressIn the above example, only one font has been changed for the channel, there are usualy 2 fonts in use on each channel. The procedure allows you ther as a number or as a variable, it must be preceded by a hash (#).4. THE NEW PROCEDURESThe following section gives details of all the new procedures, (not functions) in more detail. In the event of an error occurring in the procedures your program will stop with an error message.ABS_POSITION #channel, positionThis procedure will set the file pointer to the position given for the file attached to the given channel number. If you attempt to set the position for a screen or some other non-directoo change 1 or both depending upon the application and to reset them back to the standard fonts at any time. The value of zero for any of the addresses will switch to the standard font found in the QL's ROM.Many QL programs come with a number of font files, however, do not try to use the special type of fonts that come with many drawing or desk top publishing programs, such as Page Designer. These can sometimes be recognised by the file name which will include something like '_hires' or '_hdf' in the name.ry device channel, you will get a bad parameter error, as you will if position is negative.If the position given is 0, the file will be positioned to the start, if the position is a large number which is greater than the current file size, the position will be set to the end of fileand no error will occur.After an ABS_POSITION command, all file accesses will take place at the new position.FILLMEM_B start_address, how_many, valueFILLMEM_W start_address, how_many, valueFILLMEM_L start_address, ho Ordinary QDOS font files as supplied with Digital Precision's Lightning can be loaded and used, as can the normal font files from Page Designer and the like.5. THE NEW FUNCTIONSThe following section gives details of the new functions. Note that all functions which return a numeric value may also return a QDOS error code. This is usually a negative number. However, you should be aware that the functions GET_LONG and GET_FLOAT can return negative values as a valid result. There is no way to determine urn the exact number of bytes required to step from one line of pixels to the next. Never assume that QDOS programs will only ever be run on a QL. What will happen when new Graphics hardware arrives ? This function will still work, assuming that the unit uses standard QDOS channel definition blocks etc.For the technically minded, the word at offset $64 in the SCR_ or CON_ channel's definition block is returned. This is called SD_LINEL in 'Tebby Speak' and is mentioned in Jochen Merz's QDOS Reference Manuaame as FETCH_BYTES(#channel, GET_WORD(#channel)).WARNING - JM and AH ROMS will give a 'Buffer overflow' error if the length of the returned string is more than 128 bytes. This is a fault in QDOS, not DJToolkit. The demos file has a 'fix' for this problem.word = GET_WORD(#channel)The next two bytes are read from the appropriate file and returned as an integer value. This is equivalent to CODE(INKEY$(#channel)) * 256 + CODE(INKEY$(#channel)). See the caution above for GET_BYTE as it applies here as wl and the QL Technical Manual by Tony Tebby et al. Andrew Pennel's book, the QDOS Companion gets it wrong on page 61, guess which one I used first !v$ = DJTK_VER$This simply sets v$ to be the 4 character string 'n.nn' where this gives the version number of the current toolkit. If you have problems, always quote this number when requesting help.channel = DJ_OPEN('filename') [open existing file for exclusive use]channel = DJ_OPEN_IN('filename') [open existing file for shared use]channell. Any negative numbers returned will always be an error code.memory = KBYTES_FREEThe amount of memory considered by QDOS to be free is returned rounded down to the nearest kilo byte. See BYTES_FREE above also. The value in KBYTES_FREE may not be equal to BYTES_FREE/1024 as the value returned by KBYTES_FREE has been rounded down.present = LEVEL2(#channel)If the device that has the given channel opened to it has the level 2 drivers, then present will be set to 1, otherwise it will be set to 0ll stop your program with an error. This should actually never happen, but then again ...I have tried to make the functions as friendly as possible so that an error code is returned whenever possible, but if something does go wrong while fetching the parameters, who knows what state the maths stack is in and so it is best to let QDOS handle the problem.oops = CHECK('name')If name is a currently loaded machine code procedure or function, then the variable oops will be set to 1 otherwise it will be the amount of dataspace that that program requires to run, if the file is not an EXEC'able file, the result is undefined, meaningless and probably zero. If the result is negative, there has been an error and the QDOS error code has been returned.fl = FILE_LENGTH(#channel)fl = FILE_LENGTH('filename')The actual file length is returned, as above, the file may be open, in which case simply supply the channel number, or closed, supply the filename in quotes. If the returned value is negative, then it isset to 0. This is a handy way to check that an extension command has been loaded before calling it. In a Turbo'd or Supercharged program, the EXEC will fail and a list of missing extensions will be displayed, a QLiberated program will only fail if the extension is actually called.memory = BYTES_FREEThis simple function returns the amount of memory known by the system to be free. The answer is returned in bytes, see also KBYTES_FREE below. For the technically minded, the free memory is consider a QDOS error code.where = FILE_POSITION(#channel)This function will tell you exactly where you are in the file that has been opened, to a directory device, as #channel, if the result returned is negative it is a QDOS error code. If the file has just been opened, the result will be zero, if the file is at the very end, the result will be the same as calling FILE_LENGTH(#channel) - 1, files start at byte zero remember.ft = FILE_TYPE(#channel)ft = FILE_TYPE('filename')This function returns the ed to be that between the addresses held in the system variables SV_FREE and SV_BASIC.device$ = DEV_NAME(address)This function must be called with a floating point variable name as its parameter. The first time this function is called, address must hold the value zero, on all other calls, simply pass address UNCHANGED back. The purpose of the function is to return a directory device name to the variable device$, an example is worth a thousand explanations.1000 addr = 01010 REPeat loop1020 PRfiles type byte. The various types currently known to me are :0 = BASIC, CALL'able machine code, an extensions file or a DATA file.1 = EXEC'able file.2 = SROFF file used by linkers etc, a C68 Library file etc.3 = THOR hard disc directory file. (I think !)4 = A font file in The Painter5 = A pattern file in The Painter6 = A compressed MODE 4 screen in The Painter11 = A compressed MODE 8 screen in The Painter255 = Level 2 driver directory or sub-directory file, Miracle hard disc directory file.TherINT "<" & DEV_NAME(addr) & ">"1030 IF addr = 0 THEN EXIT loop: END IF1040 END REPeat loopThis small example will scan the entire directory device driver list and return one entry from it each time as well as updating the value in 'addr'. The value in addr is the start of the next device driver linkage block and MUST NOT BE CHANGED except by the function DEV_NAME. If you change addr and then call DEV_NAME again, the results will be very unpredictable.The check for addr being zero is done as this is te may be others.fu = FILE_UPDATE(#channel)fu = FILE_UPDATE('filename')This function returns the date that the appropriate file was last updated, either by PRINTING to it, SAVING it or editing it using an editor etc. This date is set in all known QLs.byte = GET_BYTE(#channel)Reads one character from the file attached to the channel number given and returns it as a value between 0 and 255. This is equivalent to CODE(INKEY$(#channel)). BEWARE, PUT_BYTE can put negative values to file, for ehe value returned when the final device name has been extracted, in this case the function returns an empty string for the device. If the test was made before the call to DEV_NAME, nothing would be printed as addr is zero on entry to the loop.Please note, every QL has at least one device in the list, the 'MDV' device and some also have a device with no name as you will see if you run the above example (not the last one as it is always an empty string when addr becomes zero).The above example will only xample -1 is put as 255, GET_BYTE will return 255 instead of -1. Any negative numbers returned are always error codes.float = GET_FLOAT(#channel)Reads 6 bytes from the file and returns them as a floating point value. BEWARE, if any errors occur, the value returned will be a negative QDOS error code. As GET_FLOAT does return negative values, it is difficult to determine whether that returned value is an error code or not. If the returned value is -10, it could actually mean End Of File, this is about tshow directory devices, those that can have DIR used on them, or FORMAT etc, such as WIN, RAM, FLP, FDK etc, however, it cannot show the non-directory devices such as SER, PAR or NUL, if you have Lightning, as these are in another list held in the QL.From version 1.14 of DJToolkit onwards, there is a function that counts the number of directory devices present in the QL. See MAX_DEVS below for details.bytes_in_a_line = DISPLAY_WIDTHThis function can be used to determine how many bytes of the QL'she only error code that can be tested for.long = GET_LONG(#channel)Read the next 4 bytes from the file and return them as a number between 0 and 2^32 -1 (4,294,967,295 or HEX FFFFFFFF unsigned). The returned value is equivalent to the following fragment of SuperBasic code :2100 REMark Get a long word from the open channel2110 long = 02120 FOR x = 1 TO 42130 IF EOF(#channel) THEN EXIT x: END IF2140 long = long * 256 + CODE(INKEY$(#channel))2150 END FOR xBEWARE, the same problem with ne memory are used to hold the data in one line of pixels on the screen. Note that the value returned has nothing to do with any window width, it always refers to the total screen display width.Why include this function I hear you think ? If you run an ordinary QL, then the result will probably always be 128 as this is how many bytes are used to hold a line of pixels, however, many people use Atari ST/QLs and these have a number of other screen modes for which 128 bytes is not enough. This function will retgatives & error codes applies here as well as GET_FLOAT.a$ = GET_STRING(#channel)Read the next 2 bytes from the file and assuming them to be a QDOS string's length, read that many characters into a$. The two bytes holding the string's length are NOT returned in a$, only the data bytes. The subtle difference between this function and FETCH_BYTES is that this one finds out how many bytes to return from the channel given, FETCH_BYTES needs to be told how many to return by the user. GET_STRING is the shis is a fault with QDOS and not with DJToolkit. See the demos file for a 'fix' to this problem.bk = FILE_BACKUP(#channel)bk = FILE_BACKUP('filename')This function reads the backup date from the file header and returns it into the variable bk. The parameter can either be a channel number for an open channel, or it can be the filename (in quotes) of a closed file. If the returned value is negative, it is a normal QDOS error code. If the value returned is positve, it can be converted to a string bs function, the contents of the buffer will be as follows :Buffer + 0 file length 4 bytes long (see FILE_LENGTH)Buffer + 4 file access 1 byte long - currently zeroBuffer + 5 file type 1 byte long (see FILE_TYPE)Buffer + 6 file dataspace 4 bytes long (see FILE_DATASPACE)Buffer + 10 unused 4 bytes longBuffer + 14 name length 2 bytes long, size of filename Buffer + 16 filename 36 bytes longDirectory devices also have the following additionae calling DATE$(bk). In normal use, a files backup date is never set by QDOS, however, users who have WinBack or a similar backup utility program will see proper backup dates if the file has been backed up.ds = FILE_DATASPACE(#channel)ds = FILE_DATASPACE('filename')This function returns the current dataspace requirements for the file opened as #channel or for the file which has the name given, in quotes, as filename. If the file is an EXEC'able file (See FILE_TYPE) then the value returned will be l data :Buffer + 52 update date 4 bytes long (see FILE_UPDATE)Buffer + 56 reference date 4 bytes long - see belowBuffer + 60 backup date 4 bytes long (see FILE_BACKUP)Miracle Systems hard disc's users and level 2 users will find the files version number stored as the the 2 bytes starting at buffer + 56, the remaining 2 bytes of the reference date seem to be hex 094A or decimal 2378 which has no apparent meaning, this of course may change at some point !This function returns an eel = DJ_OPEN_NEW('filename') [create a new file foe exclusive use]channel = DJ_OPEN_OVER('filename') [overwrite an existing file]channel = DJ_OPEN_DIR('filename') [open device directory or sub-directory]All of these functions return the SuperBasic channel number if the channel was opened ok. If any error occurred, the channel number will be negative. You can use this to check whether the open was successful or not. The filename must be supplied as a variable name, file$ for example, or in quotes,. The level 2 drivers allow such things as sub_directories to be used, when a DIR is done on one of these devices, sub-directories show up as a filename with '->' at the end of the name. Gold Cards and later models of Trump cards have level 2 drivers. Microdrives don't.error = MAX_CON(#channel%, x%, y%, xo%, yo%)If the given channel is a 'CON_' channel, this function will return a zero in the variable 'error'. The integer variables, 'x%', 'y%', 'xo%' and 'yo%' will be altered by the function, to retu 'flp1_fred_dat'.They all work in a similar manner to the normmal SuperBasic OPEN procedures, but, DJ_OPEN_DIR is new.I am grateful to Simon N. Goodwin for his timely article in QL WORLD volume 2, issue 8 (marked Vol 2, issue 7 !!!). I had been toying with these routines for a while and was aware of the undocumented QDOS routines to extend the SuperBasic channel table. I was, however, not able to get my routines to work properly. Simon's article was a great help and these functions are based on that artrn the maximum size that the channel can be WINDOW'd to.'x%' will be set to the maximum width, 'y%' to the maximum depth, 'xo%' and 'yo%' to the minimum x co-ordinate and y co-ordinate respectively.For the technically minded reader, this function uses the IOP_FLIM routine in the pointer Environment code, if present. If it is not present, you should get the -15 error code returned. (BAD PARAMETER).how_many = MAX_DEVSThis function returns the number of installed directory device drivers in your QL.icle. Thanks Simon.The OPEN routines work as follows :1000 REMark open our file for input1010 :1020 chan = DJ_OPEN_IN('filename')1030 IF chan < 01040 PRINT 'OOPS, failed to open "filename", error ' & chan1050 STOP1060 END IF1070 :1080 REM process data in file here ....DJ_OPEN_DIR is a new function to those in the normal QL range, and it works as follows :-1000 REMark read a directory1010 :1020 INPUT 'Which device ';dev$1030 chan = DJ_OPEN_DIR(dev$)1040 IF chan < 01050 PRINT 'Ca It can be used to DIMension a string array to hold the device names as follows :-1000 REMark Count directory devices1010 :1020 how_many = MAX_DEVS1030 :1040 REMark Set up array1050 :1060 DIM device$(how_many, 10)1070 :1080 REMark Now get device names1090 addr = 01100 FOR devs = 1 to how_many1110 device$(devs) = DEV_NAME(addr)1120 IF addr = 0 THEN EXIT devs: END IF1130 END FOR devsAs there is a secondary check to ensure that we don't exceed the list of devices, line 1120, you can, if yonnot open ' & dev$ & ', error ' & chan1060 STOP1070 END IF1080 :1090 CLS1100 REPeat dir_loop1110 IF EOF(#chan) THEN EXIT dir_loop1120 a$ = FETCH_BYTES(#chan, 64)1130 size = CODE(a$(16)): REMark Size of file name1140 PRINT a$(17 TO 16 + size): REMark file name1150 END REPeat dir_loop1160 :1170 CLOSE #chan1180 STOPIn this example, no checks are done to ensure that the device actually exists, etc. You could use DEV_NAME to check if it is a legal device. The data being read from u wish, DIM the array slightly larger than required. The above routine will let you fill up the array DEVICE$ with the names of all the currently installed directory devices. (FLP, RAM etc). Note that on some (all ?) QLs there seems to be a device with a null name.value = PEEK_FLOAT(address)This function returns the floating point value represented b y the 6 bytes stored at the given address. BEWARE, although this function cannot detect any errors, if the 6 bytes stored at 'address' are not a proper fa device directory file must always be read in 64 byte chuncks as per this example.Each chunk is a single directory entry which holds a copy of the file header for the appropriate file. Note, that the first 4 bytes of a file header hold the actual length of the file but when read from the directory as above, the value if 64 bytes too high as it includes the length of the file header as part of the length of a file.The above routine will also print blank lines if a file has been deleted from the directorloating point value, the QL can crash. The crash is caused by QDOS and not by PEEK_FLOAT. This function should be used to retrieve values put there by POKE_FLOAT mentioned above.a$ = PEEK_STRING(address, length)The characters in memory at the given address are returned to a$. The address may be odd or even as no word for the length is used, the length of the returned string is given by the length parameter. This is the opposite to the POKE_STRING command described above and equivalent to the followiy at some point. Deleted files have a name length of zero.Note that if you type in a filename instead of a device name, the function will cope. For example, you type in 'flp1_fred' instead of 'flp1_'. You will get a list of the files on 'flp1_' if 'fred' is a file, or even, if 'fred' is not on 'flp1_'. If, however, you have the LEVEL 2 drivers (see LEVEL2 below), and 'fred' is a sub-directory then you will get a listing of the sub-directory as requested.a$ = FETCH_BYTES(#channel, how_many)This functng SuperBasic function :2700 DEFine FuNction PEEK_STRING(address, length)2720 LOCal x, result$2730 result$ = ''2740 FOR x = 0 TO length - 12750 result$ = result$ & CHR$(PEEK(address + x))2760 END FOR x2770 RETurn result$2780 END DEFine PEEK_STRINGPE_Found = QPTR(#channel)This function returns 1 if the Pointer Environment is loaded or 0 if not. The channel must be a SCR_ or CON_ channel, if not, the result will be 0. If a silly value is given then a QDOS error code will be returion returns the requested number of bytes from the given channel which must have been opened for INPUT or INPUT/OUTPUT. It will work on CON_ channels as well, but no cursor is shown and the characters typed in are not shown on the screen. If there is an ENTER character, or a CHR$(10), it will not signal the end of input. The function will not return until the appropriate number of bytes have been read.WARNING - JM and AH ROMS will cause a 'Buffer overflow' error if more than 128 bytes are fetched, tned instead.error = READ_HEADER(#channel, buffer)The file that is opened on the given channel has its header data read into memory starting at the given address (buffer). The buffer address must have been reserved using RESERVE_HEAP, see below, or some similar command. The buffer must be at least 64 bytes long or unpredictable results will occur. The function will read the header but any memory beyond the end of the buffer will be overwritten if the buffer is too short. After a successful call to thi letters.If the address returned is zero, the string was not found, otherwise it is the address where the first character of what_for$ was found, or negative for any errors that may have occurred. An example :1000 PRINT SEARCH_C(0, 48 * 1024, 'sinclair')1010 PRINT SEARCH_I(0, 48 * 1024, 'sinclair')1020 :1030 PRINT SEARCH_C(0, 48 * 1024, 'Sinclair')1040 PRINT SEARCH_I(0, 48 * 1024, 'Sinclair')The above fragment, on my Gold Card JS QL, prints :0 at line 1000 - case must match exactly, no capitaln9MnVMnW”MoëMoėMoíMpMp ÔMpŨMpŪ2MqMqMq2,Mq^2MqMqŸMq YMqųMqúMqûMrMrÛMsōMsķĪMtÂMtÃMtÄMtßMtā!MvMvMvMvMvüMwMwMwM 'S'47314 at line 1010 - case ignored47314 at line 1030 - 'Sinclair' found exactly47314 at line 1040 - case ignore againLooking into the ROM at that address using PEEK_STRING(47314, 21) gives :Sinclair Research Ltdwhich is part of the copyright notice that comes up when you switch on your QL.If the string being searched for is empty ("") then zero will be returned, if the length of the buffer is negative or 0, you will get a 'bad parameter' error (-15). The address is considered to be unsignedw4Mw5›MxĐMxŅMxŌ.MyMyøMyųMyúMz‰MzŠËM{UM{VM{WM{XM{mM{nĨM|M|$M|8M|?M|XM|_M|xM|M|žM|Ĩ!M|ÆM|ÔM|ō&M}*M}BM}TM}UuM~ĘM~ËM~Ė, so negative addresses will be considered to be very large positive addresses, this allows for any future enhancements which will allow the QL to use a lot more memory than it does now !error = SET_HEADER(#channel, buffer)This function returns the error code that occurred when trying to set the header of the file on the given channel, to the contents of the 64 byte buffer stored at the given address. If the result is zero then you can assume that it worked ok, otherwise the result will be a negatiM~éM~ę‰M€sM€tM€u#M€˜M€™@MŲMÚ2M‚ M‚$M‚8M‚W5M‚ŒM‚M‚ŗM‚ĪM‚ĐM‚ŅM‚ŌM‚íM‚îßMƒÍMƒÎMƒĪ'MƒöMƒ÷M…üM…ũ>M†;<M†w<M†ŗAM†ô,M‡ ?M‡_-M‡ŒMrror code if something went wrong while attempting to read the file header or zero if everything went ok. It can be used as a more efficient method of finding out the details for a particular file rather than calling all the various FILE_XXXXX functions. Each of these call the READ_HEADER routine.To extract data, use PEEK for byte values, PEEK_W for the filename length and version number (if level 2 drivers are present, see LEVEL2 above), or PEEK_L to extract 4 byte data items.The filename can be extr5M5M5<M5=rM6¯M6°ÉM7yM7zM7{1M7ŦM7­ŗM8`M8a4M8•M8œ,M8Č*M8ōM9(M9+ M98 M9DM9K,M9w'M9žM9ˇ+M9â M9ī M9ûM:M:)M:EM:L!M:m"M:M:M:§M:¨acted from the buffer by something likef$ = PEEK_STRING(buffer + 16, PEEK_W(buffer + 14)).buffer = RESERVE_HEAP(length)This function obtains a chunk of memory for your program to use, the starting address is returned as the result of the call. Note that the function will ask for 4 bytes more than you require, these are used to store a flag so that calls to RELEASE_HEAP, see above, do not crash the system by attempting to deallocate invalid areas of memory. If you call this function, the returned add#M:ËM:âM:é&M;M;.M;/`M<M<ĪM>_M>`M>aM>bM>xM>y–M@M@āM@đM@ņ)MBMB MC&MC'MC(MC)MC?MC@MDŨMDŪMDßMDôMDõ$MFMFMFMF8MF9^Mress is the first byte that your program can use. It can be used as follows to reserve a buffer for READ_HEADER, described above.1000 buffer = RESERVE_HEAP(64)1010 IF buffer < 01020 PRINT 'ERROR allocating buffer, ' & buffer1030 STOP1040 error = READ_HEADER(#3, buffer).....do something with buffer contents here2040 REMark Finished with buffer2050 RELEASE_HEAP bufferscreen = SCREEN_BASE(#channel)This function is handy for Minerva users, who have 2 screens to play with. The function retG—MG˜MGĻMGˇ(MGß*MH MHMHnMIMIŽ'MJĩMJļíMKŖMK¤MLŋMLĀ›MM[MM\MM]!MM~MMMNMN‚oM PņMPōcMRUMRVMRWMRgMRhģMS#MS$MS%LMSqIMSēKMTBMTGNurns the address of the start of the screen memory for the appropriate channel.If the returned address is negative, consider it to be a QDOS error code. (-6 means channel not open & -15 means not a SCR_ or CON_ channel.)SCREEN_BASE allows you to write programs that need not make guesses about the whereabouts of the screen memory, or assume that if VER$ gives a certain result, that a Minerva ROM is being used, this may not always be the case. Regardless of the ROM in use, this function will always reMT•MT–<MUŌMUĶfMV9MV:šMWÔMWÕ$MWųMWú$MXMX%#MXHMXY?MX˜ MXĨ MXąMX¸(MXāMXáZMY;MY<MYYMY` MY€MYžMY¯8MYį MYô MZMZ MZMZ%(MZM#MZp;MZĢ3Mturn the screen address for the given channel.current_mode = SCREEN_MODEThis function can help in your programs where you need to be in a specific mode. If you call this function you can find out if a mode change needs to be made or not. As the MODE call changes the mode for every program running in the QL, use this function before setting the appropriate mode. The value returned can be 4 or 8 for normal QLs, 2 for Atari ST/QL Extended mode 4 or any other value deemed appropriate by the hardware beiZŪMZ÷MZūM[ M[M[úM\M\PM]eM]f•M]ûM]ü‘M_M_ŽM_&M_ĩM_ļĻMa\Ma]ÄMb!Mb"Mb#Mb?Mb]Mb^1MdMdMd‘Md°!MdŅMdŌæMf¸MfšMfēMfÖMfôMfõßng used. Never assume that your programs will only be run on a QL ! (Graphics Card anyone ?)1000 REMark Requires MODE 4 for best results so ...1010 IF SCREEN_MODE = 81020 MODE 41030 END IF1040 :1050 REMark Rest of program ....address = SEARCH_C(start, length, what_for$)address = SEARCH_I(start, length, what_for$)Both of these functions search through memory looking for the given string. SEARCH_C searches for an EXACT match whereas SEARCH_I ignores the difference between lower & UPPER caseMgÔMgÕMgÖ!Mg÷MgøuMimMinMioMi‰MiĨMiĻYMi˙MjFMjFMjZ<Mj–/MjÅMjä"Mk.Mk4/MkcXMkģMkŧMkŅMkŌMkĶMkīMl Ml¸MlÆMlĮMlČMlãMläSMn7Mn8MÂMáMâMã!MMMMÚM÷MøVMNMOMP*Mz*M¤*MÎMĪÄM“M”•M)M*WMM‚-M¯M° MģMŧ-MéMę MõMö,M"M#ŗMÖM×÷MÎMĪN^Nu/NšMđXOR€/NšMŽ(XOfp`Ø.ƒ/NšKôJšRĸg/Nš‰JŽCú 4xN’Nuģ. RELEASE_HEAPR ABS_POSITIONF MOVE_POSITION|PUT_BYTEtPUT_WORDlPUT_LONGd PUT_FLOATČ PUT_STRING POKE_STRING@MOVE_MEMü FLUSH_CHANNEL >USE_FONT lSET_XINC dSET_YINC œ POKE_FLOAT" FILLMEM_B FILLMEM_W FILLMEM_Lœü DJTK_VER$SYSTEM_VARIABLES SCREEN_MODE4 SCREEN_BASEē RESERVE_HEAPv SET_HEADERd READ_HEADER´LEVEL2¨ FILE_POSITIONŠ FILE_LENGTH„FILE_DATASPACEn FILE_TYPEn FILE_BACKUP\ FM îM īM đM!M! ÁM!ĘM!ËM!Ė&M!ōM!ķĨM#˜M#™‘M$*M$+ĸM$ÍM$ÎĪM%M%ž™M&7M&8ĢM&ãM&äM&å+M'M'ëM(üM(ũƒM)€M)M)‚M)M)žÄM*bM*cM*dM*MILE_UPDATEšGET_BYTE’GET_WORDŠGET_LONG‚ GET_FLOAT GET_STRING2 FETCH_BYTES’ PEEK_STRING 6SEARCH_I .SEARCH_C DEV_NAMEō KBYTES_FREEā BYTES_FREE CHECKō DISPLAY_WIDTH ęQPTR @ WHERE_FONTS LDJ_OPEN F DJ_OPEN_IN < DJ_OPEN_NEW 2 DJ_OPEN_OVER & DJ_OPEN_DIR Ę PEEK_FLOAT \MAX_DEVS œMAX_CONa ôgpņNura<=ŧ˜-ŧ1.15˜-IXxpNua Ėgrņ`a ö"t` a ļgrņ`pr˙t˙NAtJfr` JH` D~d`~2a ŒtS@fa Œfrņ` Ūrņ` ÔNupa ~föt 6˜kča 4fp 2v˙EúNNCJ€g"`< G2g6/pNA"‚˙˙˙*‚ÄM+FM+G)M,pM,qM,rM,‹M,ŒM-ĢM-ŦM-­M-ČM-É,M.õM.öM.÷M/M/ŽM/ŋM/ĀM/ÁM/ŪM/ßŧM1›M1œM1M1ļM1ˇöM2­M2ŽM2¯M2ÅM2ưM4vM4w‡M4ūM4˙M ‚104e˙˙HAHÁ`Thanks Ralf !!"<€t` f"0pNua útS@grņ` Rrņ` HNupa ōföt"6˜očZa g"` üNDhp"t` a ´S@f(pa ŧf"&1čRƒƒYƒ C NDhpf BpNAp`pņNu~B`~Ca zU@gpņNua xgöpa xfđ 6˜a 2fæ"6˜ BfJkÔv˙NC €˙˙˙öfpNu~` ~`~`~a (U@gpņNua &gö f$Këpa fæ*6˜Ķü&MPpa fĐ`pa üfÆ*6˜Ķü a Žf´4v˙ nr’GŌÁNDpNCNua ēU@gpņNua ¸göKëpa ´fė.6˜&MKëpa ĸfÚ41čmŌ a XfĖTBv˙NDpNCNua pU@gpņNua nföpKëa jfė.6˜&MKëpa XfÚ$G41čgŌkÎ`ņčve QDOS error code. On normal QLs, the three dates at the end of a file header cannot be set.sys_vars = SYSTEM_VARIABLESThis function returns the current address of the QL's system variables. For most purposes, this will be hex 28000, decimal 163840, but Minerva users will probably get a different value due to the double screen. DO NOT assume that all QLs, current or future, will have their system variables at a fixed point in memory, this need not be the case.address = WHERE_FONTS(#channel, 1_‡<M‡ÉM‡Ę?Mˆ 9MˆB?MˆMˆ‚#M‰ĨM‰ĻGMŠíMŠîšM‹§M‹¨@M‹č4MŒMŒMŒMŒ=MŒ>MŽCMŽDMŽcMŽv3MŽŠ MŽļ%MŽÛ,M!M(MAMBMC McMd­MMŽM MĄNor_2)This function returns a value that corresponds to the address of the fonts in use on the specified channel. The second parameter must be 1 for the first font address or 2 for the second, there are two fonts used on each channel. If the result is negative then it will be a normal QDOS error code. The channel must be a CON_ or a SCR_ channel to avoid errors.6. QDOS ERROR CODESMany of the above functions return a valid result, such as an address, or a negative error code. The QDOS error codes arM‘īM‘đM‘ņM’ M’M”M”4M”RM”jM”y M”…M”Œ!M”­M”ŽM”¯.M”Ũ.M• M• žM•ĘM•ËËM––M–—.M–Å.M–ķM–ú.M—(.M—VM—W4M—‹M—Œ9M—Å"M—į.M˜'M˜<M˜=JM˜‡Me listed below for reference.-1 Not complete-2 Invalid job-3 Out of memory-4 Out of range -5 Buffer overflow -6 Channel not open -7 Not found -8 File already exists -9 In use -10 End of file -11 Drive full -12 Bad device name -13 Xmit (transmit) error -14 Format failed -15 Bad parameter -16 File error -17 Error in expression -18 Arithmetic overflow -19 Not implemented -20 Read only -21 Bad line˜ˆM˜žM˜ŸPM˜īM˜đŒMš|Mš}Mš~&Mš¤MšĨzMœMœ Mœ!Mœ>Mœ?\M›MœM)MÆMĮgMŸ.MŸ/MŸ0MŸ1MŸFMŸG—MŸŪMŸßMŸôM M M 4M MM gM zM —M §¨/Aė īNēē. UüīÜüīÜ- M:M<#M_M`MaWM¸MšŪM—M˜ŅMiMjÖM@MA*MkMlMm$M‘M’\MîMīŖM’M“‹MMM M@MAMTMUNMŖM¤*MÎMM ŧM ĐM éMĄMĄMĄ6MĄJMĄgMĄ„MĄMĄ°MĄÁMĨęMĨëMĨėM|ÃMĨņMĨņMĨņMĨņMĨņMĨķUM"Mease note, every QL has at leaB%@ '1;EČ>ū Q0( HĀå€ŅĀ*hRAė@tNē"6J@gp`>Nēp U0(:HĀ2(M .M :@M zBM ŧ8M ôBM 62M h<M ¤-M Ņ*M û9M4(M\/M‹2MŊ2Mī2M!<M]2M1MĀ1Mņ7M(1MY;ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööM”JMŪHM&IMo'M–DMÚCM8MU@M•BM×-M.M2.M`4M”.MÂ:Mü=M9BM{DMŋJM <MEDM‰/M¸.MæAM'HMo<MĢ7MâJM,M-M.M/ÖMMMMMööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööf*"O*Ipltv˙NCJ€f8x x"nXP‹=˜N”J€fQĖ˙î"nXP"t`¤~`~`~aėW@gpņNupađfö v˜ 6˜gė"6˜ g$fØ g ÁS€fúNu0ÁS€fúNuÁS€fúNu-IX/8*g8<ԁiSD*p"áĄi˜@*â@fō"g 0xN"nX“ß-IX#…č3„čxpNu-IXHį`J‚g "4xN’"nXLß“Â=˜xp-IXNuJ€k Āü(ĐŽ0°Ž4l vJļkp`pú`pņJ€Nu ‹€üNu6¸Nu$|4rN’Nut@v˙NCJ€NupNBpNuHį`pNALßNuHįpppt˙NALßJ€NuHįđ 4xN’"nXLß“ÁNuNšBžHxHmūūNš8ôx&-`*Hx;/NšKv$@J€POgB/aũÔ( gü;& XOJ„f Jƒg CJfČHm˙}NšîHmūūNšL_USE.TIP: If you want your C programs to use a different default directories to those used by Superbasic programs, then you can set any one of the DATA_USE, PROG_USE or SPL_USE environment variablesexplicitly at the SuperBasic levle.WHAT PROGRAMS USE ENVIRONMENT VARIABLESTo determine whether a program will use any environment variables, it is necessary to look at the documentation for that program.Examples of programs that are supplied as part of the C68 system that DO make use of Environment ^ēAčx-P˙ü .Āŧ˙˙å€ @Ņî˙ü-P˙ø n˙ø-h˙ô .˙ôN^NuNV˙ô`ÄPress ‘ČCú„4xĐN’pNA~ SMSQg ‚2.00m~Aúŧ*|*Cúl4xN’J‡fˆ"n $n$SŠ 6¨gŗĘfō`jIúGt JRа6¨fRŠQĘ˙ôŧ*ˆŧ*¨˙`F$H`Âc68 ENV support v1.07 8_ENV_:SETENV ENV_LISTĖENV_DELnGETENV$Nu4xN’ CfÔx86˜ DmÆ(I":˙ÜŌ„RtpNAJ€fŦ,SD"H›Í6ČRŒ =f ģüf*IÃQĖ˙æBģügģČfpNA`v. žˆSG$z˙„ĩüf*H(I`^":˙vgS$  =gĀgQÉ˙ō(I`.QÉ˙č(I`&& –‚SƒļGfâ&H(Bš fÚQË˙úgQÉ˙ú(B`"B`ž*H z˙$ąüVariables are the CC, C68 and MAKE programs - refer to the documentation on each program for the details. AUTHOR(s)Original version - Dave Nash.C code modification - Dave Walker.SuperBasic interface extension - Dave Woodman.CHANGE HISTORYThis is a short summary of the changes that have been made to this document. The intention is to make it easy for users who are upgrading to find any new information.25 Apr 94 DJW - Minor changes and corrections for the 4.13 release.аdocgpNAAú˙ Í™Í Œ`ö4xN’ Ce g`ā>6˜`~Îü(ŪŽ0žŽ4lĀ vx>kļ$zūŌ(:ūŌgļS„vgpNCJ€fĻQĖ˙î`šJg”r z`âaJ€f€ģĘfr›Í`ÕÄRŠ&J›Ę" V A4xN’"nX“Č-IX(I=Č2 TŒ`›ČRŒQÉ˙øx`”k`ŨQĘ˙üB":ū,•ÁAúū* Š` púNupũNupņNupNuNu4xN’ Cfęx86˜gâ:VE…EņP-JX*zũč zũčąüg0ŅÍ:SE(ITŒ$M°6ČfRŒQÍ˙ô =fJfüS`žJgÖģČoø$zũ¨*J`ŽNuNV˙lHį<`ūō`X&.($C`>ĩÃg8 _f2RJR˙ŊBHn˙ž/NšJ€POf .@B; :VB; :˜ GĻ G§ą GX GY GZ Gy GzU GĪ GĐ Gā GáÕ Gļ Gˇ G¸ GÎ GĪ Gå Gæ/ G GTGkGotGãGäAG%G&PGvGw Gx G˜ G™§ G@ GA GööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööY GZc GŊ GÁ GÕ GŲp G I G M G ] G ^† G ä G å¯ G ” G •Š G  G G + G . G ; G < G =r G ¯ G °‹ G ; G < G N G O^ G ­ G Ž™ GG GH G] G^ŋ G G G7 GB R‰QĘ˙øpNua &W@gpņNupa *fö"6˜$6˜&6˜gĸ´gœe S€Đ´€b"$AԃS‚&B~˙`$A&B~ ƒed‚’fTf g p’SŠS‹QČ˙øWƒ` fÚSƒ`WŠW‹ ƒäˆgĪü&’ÕĮ×ĮS€föü gVŠV‹Jƒg ’ÕĮ×ĮSƒföpNua ^S@gpņNua \göpa \fđ 6˜a fæpAv˙NCNu~G`~Fa ,tU@grņ` ÎNua $gōpa $fđ 1č\‰a Üf 1čūjpņ` / "@a "_t"` ’~`~` ~`~4`~6˜mÚr2.V gn|œĶÆ` ]-IXaJ-IX=‡˜`œ˜R‰QĪ˙ø"nXpxNuaÔtS@grņ`vNuaĖgōr@aüf<*paÂfæ 6˜T‰azf$. pOrtv˙"ENC,p INAt"G"gr`(t"` r`altS@grņ`Nupajfö~>6˜očKé0`6 ØRQČ˙ö/ pr$NA"_J€g2`Z&h*h"( 03ˆ @g @ gP‹ˇÍl6`č4sˆÕÁž2ˆfė0/ `2ˆ ´6˜f R‰RŠQČ˙ėp"_J@fČr`rRG‡ŌĮt`h~`~ a´grņ`aŪ"(’¨ îŠt`ū~`~atW@grņ`čNuKëpaŠfō(v˜*6˜nT‰rņ`¸&MKëpajfŌr26˜Ké $V‚‚ĶÂT‰tJAgPeLhe routine putenv() can be used to give a value to an Environment variable. This will change the value if the named Environment Variable already exists, or create an new value if does not. Therefore a call of the form: putenv("TEMP=ram1_"); would set the environment variable TEMP to a value of ram1_. If you want to remove an environment variable completely then call it assigning a zero length value. i.e. putenv("NAME="); would delete the environement variable NAME (This is a slightly noSAJg$Hį@6Ø ae zbļØRQÉ˙æLß Jg ae zbƒļ5čg RŒS€lŪ(B`4Hį@ `Jg ae zbƒļ5čf RŒRQÉ˙ŪtLß0J‚gÂ" tga¤S@gpņNupa¨fö 6˜g @ P`a¸ hHxąüg8($Hį|€"taÆ/ 4x N’"_Lß>J€fB"V gnzšĶÅ` ]-IXa„=„˜(I` ¨&ČRˆRŒQĖ˙ô-IXxpNua @gpņNuagöpafđ*I"vØ$vØ 6ØkŪaļfÚp%v˙NCNu~&`~(aĖU@gpņNuaĘgöpaĘfđp26˜06˜kâa|fŪp 4v˙EúNCNu1 pNuaŠtS@grņ`,Nua‚gōpa‚fđp06˜lpņ`a4g"t`ūtppv˙&INC"KJ€g €˙˙˙ņfār`ārn-standard treatment).INHERITING ENVIRONMENT VARIABLESIf a number of c68 compiled jobs are chained together then the environment variables of each slave job are inherited from the owner. The master job will obtain its values from the settings in SuperBasic.This inheritance factor is important as it means that if a library call is used to change one of the environment variables, then this is remembered and passed on without changing the setting that is current at the SuperBasic level. STANDA`Úa,tU@grņ`„Nua$gōpa$fđp>6˜06˜lt`@aŌg"t`R*Ip v˙Eú0NC I"MJ€fät Gf"(*`. Gf"(.` rņ`"HpNua°grņt`TaÖr hHąügčRA P`ōaŠU@gpņNuKëpaŠfō(v˜X‰&MPpaxfāpö˜R‰QČ˙øpNuaPS@gtrņ`¨paPgNu$v˜ra„-IXpš˜R‰QČ˙øpx"nXNuz`z`z`z`z`Credit to SNGađS@grņt`’pađgNupr˙& I/ NDNB"_26˜RAŌÁJ€fH$n0r(ĩî4l J6¨k R@ÕÁ`î<4xEę,N’$n4Gę(-K40-ˆ¨rXŠBļ¨QÉ˙øŧP¨r2t`ad[@grņt`a^gōpa^gNup06˜aP‰-IXQJ€RD ENVIRONMENT VARIABLESA number of standard Environment Variables are set up automatically by the C68 system. These are PROG_USE DATA_USE SPL_USEThey contain the values for the Program, Data and Destination directories respectively. If the program has been started from Superbasic and these Environment Variables have not been explicitly set at the SuperBasic level, then these Environment Variables will have the same values as you have set up using the Toolkit 2 commands PROG_USE, DATA_USE and SPbelow as used in the C environment.Subsequently setting another value for the same variable causes the previous definition to be overwritten. Most users will set values at startup from within their boot files.You can obtain a listing of the current settings of all your Environment Variables at any time by using a SuperBasic command of the form: ENV_LIST or ENV_LIST #nThis causes all currently defined environment variables to be written to the channel specified, or #1 by default.If you decide thööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööat you wish to completely remove an Environment Variable, then this can be done by using a SuperBasic command of the form: ENV_DEL "NAME"This procedure will remove an environment variable definition completely. In many cases this will be equivalent to using the SETENV command to give a variable a null value. They are not quite the same as at the C level one will result in the getenv() call returning NULL, and the other will result in it returning a pointer to a zero length string.If you want to intB§Nš$r-@˙øHn˙øNšö˜$@%|˙˙˙˙ Ѐr>$€ ę€r?%@ r â rENVIRON_DOC LAST CHANGED: 25 Apr 94 INTRODUCTION This document discusses the topic of Environment variables in C68. It covers how they are set up, how they are accessed, and why you might want to use them in the first place. WHY USE ENVIRONMENT VARIABLES Environment Variables are an idea that has been adopted from the UNIX operating System. Environment variables are basically global variables that use to control certain aspects of how yourerrogate the value of a particular Environment Variable from within a SuperBasic program, then this can be done by using the function: GETENV$("NAME")This allows the environment variables to be manipulated from SuperBasic. The GETENV$ function will return the value of and environment variable, or a null string if not found. Hence, after: a$="test=debug level 1" SETENV a$PRINT GETENV$("test") would print the string "debug level 1"butPRINT GETENV$("TEST") would print a null string (since Env system will run. Typically you would set up standard values during the loading of your system, although you may modify some of them at a later date. In QDOS terms, this means that you can set up information in your BOOT file that can be later interrogated by other programs running. This can make it much easier to centralise the control of your system rather than having to tell each program separately as you run it. An important feature of Environment Variables is that they are NOT cleared if you load a nironment variable names are case sensitive).and the sequence b$ = GETENV$("TMP")IF b$ = "" THEN b$ = "RAM1_" SETENV "TMP=" & b$ENDIFSETENV "TMP_FILE=" & b$ & "WORK_TMP"will ensure that the TMP variable is set, and that another environmental variable, TMP_FILE, contains a reference to a file WORK_TMP on the same device. C68 C LEVEL INTERFACEThe Environment Variables capability interface is built into all C68 programs that are compiled with Release 2.01 or later of C68.The routine maew SuperBasic program. Thus they remain set for the duration of your session (or at least until you reset your machine). SUPERBASIC INTERFACE The SuperBasic interface is provided as four extensions to the SuperBasic interpreter, the code for which in contained within the ENV_BIN file provided with the standard C68 distribution. This file should be LRESPR'ed if you wish to make use of the facilities that it offers. The four extensions provided are as follows:- SETENV A procedure that allows you to se˙ÆĀŧđ°ŧ@f( Ž˙ŊRJJfž Lî˙°N^NuNV˙ŧHį `ž`xx/.NšMđvrm1qdf0˛ ļ&lC68 COMPILATION SYSTEM Environment VariablesENVIRON_DOC LAST CHANGED: 25 Apr 94 Page nnnINTRODUCTIONThis document discusses the topic of Environment variables in C68. It covers how they are set up, how they are accessed, and why you might want to use them in the first place.WHY USE ENVIRONMENT VARIABLESEnvironment Variables are an idea that has been adopted from the UNIX GC= G€ G G… G†g Gí Gî G G G G& G6 GL GR% Gw Gxœ G G G G- G.ƒ Gą G˛Â Gt Gu6 GĢ G¯ Gĩ Gļ† G< G= GK GL. Gz G{_ GÚ Goperating System. Environment variables are basically global variables that use to control certain aspects of how your system will run. Typically you would set up standard values during the loading of your system, although you may modify some of them at a later date.In QDOS terms, this means that you can set up information in your BOOT file that can be later interrogated by other programs running. This can make it much easier to centralise the control of your system rather than having to tell each prÛŋ Gš G G° Gą Gš Gēæ G  GĄ Gē Gģ> Gų Gúl Gf Gg G{ G|[ G× GØ GŲ" Gû GüÎ GĘ IËę Iĩ Iļ Iˇ Iš IŲ IÚc I= I> IH IR I[ I\k IĮ Iogram separately as you run it.An important feature of Environment Variables is that they are NOT cleared if you load a new SuperBasic program. Thus they remain set for the duration of your session (or at least until you reset your machine).SUPERBASIC INTERFACEThe SuperBasic interface is provided as four extensions to the SuperBasic interpreter, the code for which in contained within the ENV_BIN file provided with the standard C68 distribution. This file should be LRESPR'ed if you wish to make uČč I° Ią I˛) IÛ I܂ I^ I_Ī I. I/ I1 I< I= I[# I~/ I­ IŽ I¯ Lŋ L Lh IiH Ią I" I" IQ Ivrm1qdf0" F&lŖ  0rm1qdf0Qö&r that program.e!XB T. '1;E "se of the facilities that it offers.The four extensions provided are as follows:- SETENV A procedure that allows you to set the value of an environment variable ENV_LIST A procedure to list the settings of your current environment variables to a channel (usually the screen)ENV_DEL A procedure to delete an existing environment variableGETENV$ A function that returns the value of a specific environment variable.USING THE SUPERBASIC INTERFACEThe first thing that you are likely to ',16;@E "',16;@EM  IXOŧšRBf¤#ė6RB`˜JšRōg/aũ.J€XOg‚p˙°šRFf8HyŒ]/9e†NšBJ€POg//9e†NšJ€POfp`p#ĀRFp°šRFfŦ G"Mp "ØQČ˙ü2Ø/ /NšJ€POfR G (°­fF (°­f< °•f60(°mf,0(°mf" (°­f (°­f ("°­"fp`pJ€g4JšRĻgHyŒ:/9e‚Nš ĖPO¸ƒg/N“XO/N“.…N“p`ũĸHxNšMŽ$@J€XOg/NšMđXOR€/NšMŽ$€XOf gūx/ N“XO`ūn//NšKô%C%E%n˙č yRę Š%yRęBĒpЊ#ĀRęRšeĸŧšRBf#ŌRBPO¸ƒg˙n/`˙fNV˙øHį &.want to do is to set the value of one or more environment variables. This is done by using SuperBasic statements of the form: SETENV "NAME=VALUE"This sets up an environment variable NAME, and gives it the value VALUE. For instance, the command SETENV "TMP=ram1_" gives the environment variable TMP the value of ram1_. It is worth noting that the VALUE part may be null, ie SETENV "TMP=" will assign a null string to the variable TMP. This should be contrasted with the putenv() usage, öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö This allows the environment variables to be manipulated from SuperBasic. The GETENV$ function will return the value of and environment variable, or a null string if not found. Hence, after: a$="test=debug level 1" SETENV a$ PRINT GETENV$("test") would print the string "debug level 1" but PRINT GETENV$("TEST") would print a null string (since Environment variable names are case sensitive). and the sequence b$ = GETENV$("TMP") IF b$ = "" THEN b$ = "RAM1_" SETENV "TMP=" & b$ ENDIF SETENV "TMP_FILEŲQĘ˙üCí˙ū`ĀSAlŌ`,SŒRA°g ,fUAm ;@ĐĀ$HTˆ*HÜQÉ˙ü ; g0BaX@3Lß1NuHį~ā|pūĀi @ g @ f|xzNēūō"+ėNētf$'Bė$Y‚m˛ˇ(fögŋÎo X„/$anÖopūßÄLß~J€Nut‘Ča*g& €˙˙˙˙fNē|gîNēĐaNē†g €˙˙˙ūfpJ€Nup|Hį@@vNCLßJ€NuHįXĀ(.tpNAJ€gJ—gđr`ėCč o YJûf JPg Nē~g`JPg JfĘpųJ„fÂ$LßJ€NuHįq@@ĮN@&pNA4HC2(r hx0åH 0m0"@ļif(&)RB´An0åH 0mđ"@ļŠfč )0 @p`pųFĮLߎJ€NuNēVg"H@J@fH@Ã@1NētÁAY cp`pųNuHz(0üNš ß Â Ã ÁBXpNuHįķÂ//$¯ (MúT"_)>) JQ=" & b$ & "WORK_TMP" will ensure that the TMP variable is set, and that another environmental variable, TMP_FILE, contains a reference to a file WORK_TMP on the same device. C68 C LEVEL INTERFACE The Environment Variables capability interface is built into all C68 programs that are compiled with Release 2.01 or later of C68. The routine main() is now passed an additional parameter at program startup that points to the environment variables (if any) that are currently set up. The syntax of main() is nog2r˙Nē”v˙JQm pzrtNCp NCJjp|rũNC2g Nē"`p|rūNCprtv|~ @"@NÖLßCĪNuHį HÁ(nJprtv˙NCNē÷P4pNCtžÂ"Or2ü32pNC. J€fHp NC$H ONē JPmÄ(r ¸mŧ뉸nļpNAAú*/??<"Or$<˙˙vNē&PLߐNuNē^`Ļ`JûDaemonprtNA,Hp rtNApNA*H<-’;|˙˙’"(’¨ t4HBėŠ(’‚gHm\*pNAJ€fR"p NAJ€f$B-3pr˙v“ÉNAJ-3fėp"tNAJ€fJƒlÜp",mÜühNAp rNA;F’r˙vpNANu"aôNē¤`ācon_512x100a0x0Hį0vAú˙æNēĀLß NuHįđx/N”gj^€gZ€f^CúņvpNA (Ŧg"@ _$o$0 @b8 1_˙gR@4Ā`ŲQČ˙ü|_˙˙"H o$0w therefore: int main (int argc, char * argv[], char * argp[]) { ... where the argp variable is an array of string pointers. Each entry points to a single NULL terminated string which is in the form: STRING=VALUE and the list is terminated by a NULL pointer. A user program has a number of library routines available to manipulate environment variables: - the routine getenv() can be used to obtain the value of a specific named Environment Variable. A NULL pointer is returned if the specified EnviroŅP Pb`ŲQČ˙üLßNÔLßpôNu[€_€Ūü$NuHį…GúpNALߥJ€Nu ĒĒČCúņ€Núōŧ(KNē ”f"kČNē ¤&L g N‘Cúō„NēōĒNuNēPf"6˜l NuNēžf>p Đv˜NēÚf2Nē Rf(|NēĻ"H‚BfNē÷Rg 3|Nē÷FNē JfpNē„NúļNu|` |`| `| HFNē`f–Hįp2EúųjNēäf|"V0f0f06˜26˜=€˜EúōNēŦfZ"V=˜*Hf""pHį0NALß J€f(HpeĐ@Nēf&`peĐ@(@ЂNē fŲČpH"LËHNē.ÁMfū"VT‰0g4EņP 6,¨˙f(v˜ūF@g @0b=…˜ūzaæR‰RŠS@nō`$Eė ZJûf0g @0cp0aŧš˜R‰S@nö"HAč*&Ha Aé^#H üTHG%p ĀJg Š Ā Â`p, Āp< Ānment Variable does not exist. i.e. getenv("TEMP"); would return a NULL if the TEMP Environment variable did not exists, and a pointer to its value if it did. Please note that the returned value may also be a zero-length string for an Environment Variable that does exist, but that has not been assigned a value. - the routine putenv() can be used to give a value to an Environment variable. This will change the value if the named Environment Variable already exists, or create an new value if does no Ãp ĀL×Nēûž0üNų Ė0üJûaÆ Ip&NēÖPÆf>p "VĐv˜Nē,f""H0ühiHF0ÆB˜aĻ2Eú÷ėNē†g INē(( Kp'Nē˜ `Nē MNēčŪü NúÜNu2f 2f=€˜ūNu4DAŌv˜ūĐA=€˜ūA”@gÜHį`mŌĀEņ R‰RŠSAnō`ŌĀŌÁEņ S‰SŠSAnōJDg˜BJEgšBLßNu 2f 2f 260ÁöR€SAnöpNuIë/ ÁIIú\vNēüžXfpGtNētf )f $&)pNupūNú |`| HFNēüf(p"Đv˜NēfHFNēō"H2EúöØNērgNēNúæNu|`| NēPf NēlgmpņNu|NúđNēZfNēķRNújNuNēJfNēōęNúZNupNēēfŪ.NēđfÎģËfČ/"V>6˜xNēf´2NēöîfžNēf–KôNē2HD8)„t. Therefore a call of the form: putenv("TEMP=ram1_"); would set the environment variable TEMP to a value of ram1_. If you want to remove an environment variable completely then call it assigning a zero length value. i.e. putenv("NAME="); would delete the environement variable NAME (This is a slightly non-standard treatment). INHERITING ENVIRONMENT VARIABLES If a number of c68 compiled jobs are chained together then the environment variables of each slave job are inherited from the owner. TheEúíH"WNē œBENēĘa„fvaCúŦŌÄŌŅar` BENēŽaxavatšÍl>"W  g.Nē xg"JgaZJ†gp+r˙ab"WaHDNēnf pRf˙TNēz. GNēęNup4ÚBēGo:pNuBDa RE Emö`r pv˙NCJ€Nuė°ėŽėŦėĒėĸėˆė†ėŠėŽė’ėNē fNē fNē8fNē`rNēhNúNu i˙üg" i˙úgIé2`"/)Nēôæ(i#_`(i" JfüSŒÃŒ’ŒpNuNē>fNēĒfNēÖfpū0)HĀNēüNúŦNu|~Nēf0P‹ģËg v˜f |6˜`|˙NēøfEúņî "Nē.NúžpņNuNēŪf Eúō NēNú¨NuNēĘfNē6fNēbfNēōP‹Nē¤fj-IXQ‹Nēœf^26˜Eņ$ RB‚26(Ķv˜kBt the value of an environment variable ENV_LIST A procedure to list the settings of your current environment variables to a channel (usually the screen) ENV_DEL A procedure to delete an existing environment variable GETENV$ A function that returns the value of a specific environment variable. USING THE SUPERBASIC INTERFACE The first thing that you are likely to want to do is to set the value of one or more environment variables. This is done by using SuperBasic statements of the form: SETENV "NAMąŠfąŠf ąJf @"`ā @ģčfÖ`†J̏fBpPNē"6fZ'H¸Eč8!JAč& ü0.050ü üTHINüG$üTHG%SšAú&$ČAú†$ČpNē!ôf(H <ˆNē!äfGč8&ŧTHG%Eč$ËCúĸ$ÉCú¸$É$ÉCúĀ$ÉBZ$ü2.29Cú˙$Ų$Ų$Ų"Hp&NēÆfÆpNAAč<"H g @H@J@fō(Ø(ØQŒ"Œ I`æEúūā(KØÚ0gCōū(É`ôIë Œ'|Hot%7|€g Cë>BYNē€$nL(K6xŪN“&Lf6Rf2"j R‰ŗęmCę$*ŗÂgrNēE=VALUE" This sets up an environment variable NAME, and gives it the value VALUE. For instance, the command SETENV "TMP=ram1_" gives the environment variable TMP the value of ram1_. It is worth noting that the VALUE part may be null, ie SETENV "TMP=" will assign a null string to the variable TMP. This should be contrasted with the putenv() usage, below as used in the C environment. Subsequently setting another value for the same variable causes the previous definition to be overwritten. Most usÖJBo7AÄ%j PëĮJkÆn˜Nu )˙ūf&/ Gé8Nē”&_gJéūfäJ)˙fr4xĀNŌB)ūp÷Nu/B)ū4xÂN’ _Nu(IGé8AëpNA +Ėg @Nē!2<˙“ÉNē@SAløNē LNú îHįpĀ@ĀN@?afCúĖ!I˙úFßpLßNuaf |˙ĢBh˙ŦNuHįp€aLßNu"+Āg ptNAJ€gâBĢĀBkÆpūNuHįxČaĸIú6prt&“ÉNAJ€f'AĀ!K˙ä0üNų Ė\Œp0ÜU@núLßNuNē `ô€`JûHOTKEYÜü`PëÆ2+ÄoNēŠfNēŦQëÅgNēĖBkÆpr˙v˙“ÉNA`Ōpr˙vNA gēHį8 EëoJ2f.6Nēf ÔÁJmg –A’0BÔÃJn`JmDpLßNup÷`öHį`hNēļ`Hį`hNē´f"(I2) A˙ūmg Nē–p*Nē LNēˆLßNupūers will set values at startup from within their boot files. You can obtain a listing of the current settings of all your Environment Variables at any time by using a SuperBasic command of the form: ENV_LIST or ENV_LIST #n This causes all currently defined environment variables to be written to the channel specified, or #1 by default. If you decide that you wish to completely remove an Environment Variable, then this can be done by using a SuperBasic command of the form: ENV_DEL "NAME" This procĀiP@ @b<0;NûĸZ`fü "D * )g/NuNē"gøNúâNēgîNúđpíNuHį`h$kØSBmgNē>Nē6˛gč`Jgg@NēūfxNē|Nē,WĖ˙ög*f0rNēxf(xPSDo"a^pNA"hx"QŗčLlęĶŅŗčLoâLßp `p˙LßNuNē`'kØâpHįxø )(@fIé pNA$hLaga`øLßNu/ pr˙v“ÉNA"_Nu@ĀN@?|fg 6xāN“fJfėpFßJ€NuJga `'kØâ"kâ gJfüS‰$ "@”‰pNuedure will remove an environment variable definition completely. In many cases this will be equivalent to using the SETENV command to give a variable a null value. They are not quite the same as at the C level one will result in the getenv() call returning NULL, and the other will result in it returning a pointer to a zero length string. If you want to interrogate the value of a particular Environment Variable from within a SuperBasic program, then this can be done by using the function: GETENV$("NAME") / +Ėg($kâĩĀf$kАŠF@J"VČ˙üg `J"WČ˙üfRŠ'Jâ$_pNu/ Nē$f% EëüŠäHEë€p`/ a$_NuEëJ2fEëpJšWČ˙üfpNup÷NuHį¨a&`Hį¨ahfBB”`Hį¨a`Hį¨p˙aLßNup I2 Ag(ra:f P‰NēāQ‰gRfîpųNuHį¨a `ÎHį¨a`ÆJgA˙a gāEú¸2EëÔÁH‚0gnD@åHIëüØĀ"T QhifpNupųNuHį`āNē\rt HBNēüLßNuHį`øHkIéØÜ R€€(@Nē0rt HB&LIúÚNēNXLßNuHį p!a"H g"JLßNup,HįxŒAëIé“É•Ę28<˜AdŌDx/HTˆ*H` ;g ,gZ !gTĀQÉ˙č`x ;@ĐĀXˆ"HTˆ*H {fpUA }g, fpNēũä´Do4`öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö g: @˛¨˙øfôŧg(_v˙ÍMpNAÍMpNԐü )a˜`ažX‰Đü6xÔN“YINupųNu"hCé )a˙r`Ú`Ö/ JŠf ) a˙^`alJ€`p÷$_NuAú˙Ė#HAúū$#H AŅ#H˙ôBŠNu/) ) a˙(`a6 g0$@Aę˙đ"(a’JgŧgtpNAGú!K˙ú|˙ĢBh˙Ŧ `ÎNuAé˙đ`˙r˙v˙pNA f"i`Cé$g"B°‚fö$*˙ø"QpNupū`úHį` Nē@Eî¸J‡j$g,$BCę*Nē$fđ`$g$B˛*%fôCę*Nē fę"JLßNupų`öHį` EúLpr4`Đ2âQĘ˙öLßNuaf H°fpNupî`úHį0 p Eú¤žˆgD°gøv(˙˙t +g -fD‚žˆg, 2f BBփi"ԁiԁi ցi0րhÖpī`SˆJBföpJ‚jDƒ"J€Lß NuHįxā02öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö(<˙˙˛@n fx`0HD6EúŽr` 2´2VČ˙ō–@4HB4J@jĄ LßNuHį`āEú\r` 0°Qf(Hį`āEúJrŗH` 2´2VČ˙ōLßfpNupų`úHįĀ@r0`ûQČ˙øLßNuA˙;Nu  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ€‚ƒ„…†‡ˆ‰Š‹Ŧ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙Hį@`  f02ĀÚS@nú`VHį@`BQpEúnJ2nFJl8Ā(mmEúp`"Hz†Ō`Hz’pĀæ jąę e/ 0+*ĀDH€HĀ/ r8NPO`0+*ĀDRĒ€Āŧ˙ jąę e/ `ZHOTKEY System II V2.29 THING System V0.05 <>01HOTKEY System II2.29D *K¤ŽzP™r SŽl˙˙mDefault drive for executable programs: if you have Toolkit II, the HOTKEY system will use the program defaultëKeyboard Stuffer HOTKEY character. This stuffs the current string in the HOTKEY stuffer buffer into the current keyboard queue. Strings are put into the stuffer buffer by QRAM and other utility prograEú@BDFHJLNPRTVXZ\_behNULL^A^B^C^D^E^F^G^HTABENTER^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^ZESCcs\cs]cs`csESCA˙;HNuūūūūūūūūūūms or by the QPTR command HOT_STUFFĻPrevious string Keyboard Stuffer HOTKEY character. This is similar to the normal Keyboard Stuffer but it accesses the string defined before the current stuffer string[Stuffer buffer size: this limits the number of stuffer strings that may be held at one time€@ flp1_ üSPACEEXECLOADPICKWAKECMDKEY'Working memory allocation (kilobytes)> HOTKEY System 2 hi˙ølast line recall ú HOT_STUFF´HOT_GOēHOT_STOPžHOT_LIST°ūūūūūūūūūūūūūūūūūūūūūūHįh(JEú Nē@LßNu` Nq`pņNuxa`aJ†jNuxū|~(KNēŒfđJgģĖgĒÉK*.XšŽ\af*pņ v˜f 6˜BF KGí˙øąËgRFaâfQ-IX`č&LfrÚŽ\-EXš‰(IajJFgb2Nēķ”fZp Ѕa’fP$H4ühi4Ä\Š26Č`öČRŒQÉ˙øSFoü rԌ(A`ÜCč " ’‰$I3# 2"HNēķ$` a Sfú`|˙Núä2NēķĻf ¸ifNēđ˜pNuNēˆfūB§B§B§NēœQÆmčnģËgŪNēfØ v˜fÖP‹6˜Nē $ ifPÆ`Ô pgL gg fW×gˇÍf¨ uf F¯`Ž/z˙ЎÍl‚Nēf| Cf~/v˜/v˜P‰``Fo/z˙^JEf@"VT‰ I:6ˆūŌÅp 6_˜˙g ŗČgR@d Destination directories respectively. If the program has been started from Superbasic and these Environment Variables have not been explicitly set at the SuperBasic level, then these Environment Variables will have the same values as you have set up using the Toolkit 2 commands PROG_USE, DATA_USE and SPL_USE. TIP: If you want your C programs to use a different default directories to those used by Superbasic programs, then you can set any one of the DATA_USE, PROG_USE or SPL_USE environment variablesexplS‰`îŅvˆūS@Aņŧ,ˆ` RˆR‰QČ˙ôˇÍlNēĒf?v˜X‰-IXp"VLßNupņ`ôHį°0ühi0ÆXˆa NēõrpLß Nu&I06¸T‹0Āgö¸ö¸T‹U@nōNuNēHfBNēôf<26˜p ĐANē Ęf*$I"H0ühi0ÆB˜0Áö¨RŠSAnöEúņ„2Nēg INēžNúŽNuNē´fP‹ģËo v˜f ~6˜J€NupņNuHį xz~6¸Nē„fp VTHJv˜g†a’P‹ˇÍlXčSgHG@ĮN@*NHįpĀpNA,H,tpNAJ€gp`¨˙ŽLßgŅÍ H@H€@&m^ @lXz @f:HÅ…Đ@0;6Nû2,MFĮJ€gQ…o €˙˙˙÷fvr˙nsion - Dave Woodman. CHANGE HISTORY This is a short summary of the changes that have been made to this document. The intention is to make it easy for users who are upgrading to find any new information. 25 Apr 94 DJW - Minor changes and corrections for the 4.13 release. PO` 38āˆRĒ€Āŧ˙ jąę e/ +$Ā„H€HĀ/ r8NPO` +$Ā„RĒ€Āŧ˙ jąę e/ +$āˆH€HĀ/ r8NPO` +$āˆRĒ€Āŧ˙ jąę e/ 0+(ĀDH€HĀ/ r8NPO`0+(ĀDRĒ€Āŧ˙ jąę e/ B€0+(ā€H€HĀ/ r8NPO`B€0+(ā€RĒ€Āŧ˙pNAL×9Z6`„Lß9ZLß J€Nu˛æŌ~Vnpņ`žHįāAé*NēÚg2Nē o@%J‡jCč*Nē4Cî¸4xŌN’"HNēpLßNú˙€pø`ô f"n¸` Nē”f"QpNú˙d$INē„fNēXNú˙TNēvf IaNú˙FHį|AčaLß@NuCî¸4xÔN’"HNēÎpNuNēBfNē†f ICî¸4xÔN’"HpNú˙Nē"f NēRfNēNúūėNēff6Nj%i&$I"i)gJ‚g´Š g )ĶĀfōpí` / "JNēN"_NúūĻJAj nd o P2(HAŽhäˆ2` r`˛nbb Đ@Đ@ nh pH@°hfpNupū`úJ)$jp÷JŠf( )a&`p a6f!AGé˙ü!KX‰Đü6xŌN“Y‰J€NugHįO^aLßzōNu/NuT—NuHįpp"4xĀN’J€LßNuHįđđ4xÂN’LßNuAé2<Â+Üæ p˛QfJj*)g$°+°b()gCņH`āJgB+°"H`ŌCúũø`¸Lß"<€ptNAJ€gNuGčEúč&ĘEúŽ&ĘEúJ&ĘB›P‹Eúz&Ę&ü(Eúĸ6Ú&Ō|0˙˙6ü&üPTH0&ü&HAëp"NACú4xNŌPTH_USE:PTH_LISTČPTH_ADD’PTH_RMVPTH_USE$&PTH$a2J€fJ(HaCëH J€g:"@BF L/ 24xÎN’J€f$RFt< pNCJ€fQĘ˙ō"WCé4xĐN’J€g"_Nupr NCJ€fō"_ J€g"@`´pņNu4xN’J€f SCfî<6˜JFmæaJ€o $@  €p JNANu<<IëšÍg$IëšÍfŧKë4xN’J€f^<6˜JFmĻ&MKë/a°,J€fDB26˜PA/ ptNA"_J€f.$HAč26˜0Á`ö˜R‰QÉ˙øx_¸(˙˙g„Rja°Cú˙ōNupNuJFføHį`"k¨HDHEBCHCį‹ĶÃ$Y&ÆüÕÃĩŅl aöfp˙`Kú56`FPointer Interface V2.01 2Î˙Ę˙ĘCONppv˙‘ČNCJ€g8|˙pNA"h| Ą˙THRgÂPč„"hx"Q ‘gŦ@ĮHįN@*H(mx T&hp! KNAAë˙čJgpNAAë˙đJgpNAAë˙øJgpNAz˙R…ēmrn oô @ (0 @pNB`äBmpIú˙>zAú˙\prvNBp v˙"LNCp NCPŒp'NCp(NCp)NCp NCQÍ˙ÆFĮLß8`|aXf\Aú'HĀpNAAč< g. @ ¨ASTK˙øfđQˆ'HCúž'I AëpNACú˛'IĀ`PëJfb@ĮN@pNA"HpNA(pNA¸f i<0mđ(rpNA<9ŋœ"pNAFĮJFg(Cú'Iaz$€ ŠB€Nu|ģËg4xN’f` CfZ<6˜aXIúTJFf J€g(@Iė8TDHÄ"4xN’"nX8“ÄU‰gS‰-IX=„˜Cé`œ˜CéQĖ˙ö"nXxpNuašJ€f$AëH P J€gJ†fAëHNu J€gSFg @`ōNuģËfahJ€f4'kD>`(aŽf&:6˜ Ef*6˜…ßßß<0apNupņNua*(+>r4xN’"nX“ü"nX=ŧ˜-„˜xpNupNA"Eé˙ÎJRg6Ič`v8 4_0gRCļDl `đRC8(^˜Co4”Do4ÂGō@`ÛQĘ˙ü&Nu/ hXpNB Wp(åHEî$rS*"AčCî@4xÔN’ _4xÂNŌpņNupíNuIëH (Wč]"nxJ™ AëpNACúÆ'IAĶpNAJ9ŋž`°J†l.Aúl'HĀCúæ'I AëpNACúœ'IAĶpNAü˙D`|@ĮN@|pNAAčH gf @ h$fō <ßßߍ& €FLPfā (€˙˙Ā @'Hŧp ¨Sand f.rÎJ(?ĐÂ(?Ė fCúä'I AëpNACú˜'IAĶpNAFĮNu9ŋŧ9ŋžp$Āg,Rk.gpfp˙Ņk@gpgp˙ŅkBNuB+¯+Fg6r0Â9ŋœč ;,jJëŒm $nL+gNē L+Žg Nú BB¯B+ŒNu˙ kŧ(?Ė(?ĐpĀĀg(Rk.ã dpgp˙Ņk@ã dpgp˙ŅkBNuB+¯r kŧÂ(?Ėâ ;,jJëŒm $nL+gNēÎ+Žg NúÄB¯B+ŒNu˙rĀÂ8˙Dg0Rk.8˙@gpgp˙Ņk@jüBĄ/ a>01 Path_Device1.02S"đ˙˙Name this of driverPTH|ģËo&6¸g/ *KP/ 4xN’&_*_f"<6˜T‰-IXĖü(ÜŽ0ŧŽ4l vh0kpNupúNuJv¸k pĀ6¸Sf / Kë4xN’*_f\rŌv˜ĶŽX`Jpņr26¸kBį‰ŌŽ|<6ÜŽ r6hR8T4xN’"nXÜDS‰ļh˜S†QĖ˙ôS‰B6˜pNuAč"ßßß<0 Bgpfp˙ŅkBNuB+¯+Fg4r8Â8˙@æ ;,jJëŒm $nL+gNēJ+Žg Nú@B¯B+ŒNu˙˙˙  f( +f / Gúa&_â a ‚Nu pNANuHį0đpNA+~pNA fJh€gRGJ(‚gTGJ(ƒgXGLčˆJ‚kd ˙fāH;d ŋc@ üd: ßc_f Jj>`8^f4Ž`,_f â d$`\fūŽ`čļf pã(Ž2Lß pNu1D$#Fd46BS2@&veEcT3fgtQsV! %C'A'Pe`5wU"ueCaAb`P77w5"uaD$#Fd46BRG2@&veEcT3fgtQsV!0 bU%D$#Fd46BRG2@&vWEcT3fgtQsV!0 4C'A'Pe`5wU"ueCaAb`P77w5"uaD$#Fd46BRG2@&veEcT3fgtQsV!0 bUB€Nu2( 0_f`˛PfrpņNuŧ_RhrpNue the QIMI interfaceNNo˙YYes˙˙˙Cú˙ü`Cú˙÷po2<ßtv˙‘ČNCNu0 ĀÂŲĀHB0æHØĀØĀ0 ĀÃÛĀHC0æHÚĀÚĀx8˜BpĀC*HEÚ@tÄEEčMgđ6SCgčDfÄNēb0NēfģĖnR2åI”Á–ÁUElˇa00m rÂ@äHDAŌANû *Ü*Ü*Ü*ÜQČ˙öÍGaĪFŲĘÛËQË˙Ô`’"† F†Ā†F†‚€*ÁNu2åI0 ĀÃŲĀØÁ0 ĀÃÛĀÚÁ”Á–ÁUElΆa00m rÂ@äHDAŌANû +$+$+$+$QČ˙öÍGaĪF™Ę›ËQË˙Ô`0"$‡ %F‡Ā‡F‡‚€*Nu¸@oTLÄ|˙ān~˙JBgäoFG2åAģĖn ”Á–Á2|`(0 ĀÃŲĀØÁQŒ0 ĀÃÛĀÚÁY0J4@’K6A2|˙üÄÍGUElĖGJDj LL`J„j ,˙ūHA,˙˙HB  čš‚ƒ‚ƒ€‘‘‘‚‚ˆˆ   S(k4,€Õk.4,‚Õk@4,„ÕkBBŦ‚Bl€tJ,†g tJ,‡g `J,‡gtB+ŒB¯NuJëŒmø$nL+gîNēö+ŽgäNúė.ÚCKEYON.ÖCKEYOFFCON__232Hį Cú˙Ô4xN’pNA(Hp"<TtNAJ€fĘKčT!Md*H+|PTR2()MÄ+|@<+m<8|P;|2;|4;|6|L|M|˙|.ŽpNA&hLB¨LN@(H$lD "<Āg @˛¨n `ō)HDAú˙LpvrNB)JDFüJ€f.p v˙EútNC AEíč$Ø$Ø4Ø$ L$hL+J€ ‰+@„!KLr 6xÜN“$Š(JEęprx6xÜN“$Œ+IXPéB. i*XˆCíČ"Ø"Ø"ØAíÄ(CúF+IAíööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööpNACú €+ICúŦ+I$Cú l+ItCú:+IxCú +I|Aípp NAAúô+HÄN@/pNA,H$nx"k˛ A&h, +kˆGë˙č+KT&M"m>žg: A"(ŧg ēf,!D`&Nēā%H˙ü–ü˙¨Nē\IčJg"(tpNA!L˙¤ĩî|m¸,_|Ø˙Lß0đJ€f@Hz&'_PNē$ÂfęHįüpNA (Äg&@$kPIú0Č*L:r"\ĶÍNĒ RA˛EmōLß?ūJ€Nupú`ŦGë\p÷Ā.4fGú" EčGčdBšĩËmúPčC"HpNu€€*kXJ-Bm@PíB|P'|˙˙HB+NpNA.Aëh g @ž¨˙ÜfôpĀ.4@v˙Nē"ÜNútJĢhg"k€ŗîLf klAčaŌNú`Jg†×+°k¯K<+.gk.ÜFSFSg|J+OoS+OJ+Ng mS+N`R+N+PgnĀRg S+Php`öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö°@PaŽ(KxJ,ŪfD lĀGúŒN&LxAJ+ßfx×Čg*Gú~NWÁČ&L„g|K` „g|KLĢ 8z˙Jf Bk0B+-`Hp0+0¸+-gâHD-R@7@0€ë2R@ã dÖ@…į dÔ@…å d–@…ã dN”@…`FJFoB"+@0+68ØFÉÁg n…`…R@‰ĀÖDHA0+48ØFÉÁg n…`…R@‰ĀÔDË+J+Ũg$Aëā´Xl4(˙ūļXl6(˙ū´Xo4(˙ūļXo6(˙ūHĢ 8` |J+Rkj"+<pNu~˙J—Nur p` 46˜T‰pND/v˙NC&J€Nu@ĀN@?ĶÎa “ÎööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööVĀFßJNuHįĀpRˆR‰°`aa ´VČ˙øLßNuÃH ae zc €e ‹bANupņNuHBHC6)˙ė4(˙ė2(8˛BmÉA”A–A0)˙č2(˙čĐi˙ėŌh˙ė˛@m2’DNux”NúčRHįCët•Ę )˙øgCōJ)nđa f`ępLßNuJ)m"i˙øŌü0Jnd+ܰ)fZJ)m"i˙øŌü0 )˙ôĐŠ˙đ°kôn°Ģōo |Pé`TLé˙đŌ‚ I•Ę (˙øg6AōJ(nđ+ܰ(fæNē0fāJ)f"Jk IrNē÷2f|€` J)g|pNuao TˆaUˆop`HAHBp˙NuHAHB0(˙ô˛@oĐh˙đ°BNuHဠp$kF˛ü@lĶÉĶÉ"r˜ fCú’`J€f Jf0"@p`ÔLßNu/p@åHP€Nēf0<@0Ā'HFBXS@B˜QČ˙üpLßNupņ`*pų`&/ +Fgô$@JAk20*˙ū˛@ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööseful for emulation of FLP etc. PTH_USE$ function to return current name of PTH device. PTH_ADD [n,]name add a new path to the list at position n if given, or at the end of the list if n is not supplied. Entries in the list after n are moved down to make room for the new path. PTH_RMV n remove the nth item in the list. May be extended later to allow PTH_RMV \name. There are also two 'special' paths. *d is the current data default, and *p is the current program default. The driver only checks the fir` +hrÂ.4$@˛*g fô"AęNēđ ANēaJ,Ig l\a Aė˙ĐaLß0đNu4xÂNŌ ,gJ,gHįpđ @pNALßNuTˆaUˆoHAHB0(˛@oĐh°BNuNējĐü0 qgæB(J.3fJ+,k |gJ(jp˙`ŌNu @bX¨(H(f(h˙øØü0Iė˙üšëhfĐJ+Pf J+NnÄxaę|P(k€IėpšîLfŽ(k„IđČ-LL`~ @zl @rg @olâJ+Pndg +˙PmZ|”P`R fJBf:Hįā(k`$+<”ŦpđH@Ā"<Ō‚Â€ŌŦ H@°kōmHÂaūęLßoJ+Nn˙$x”aH @llp @-fJmaZgp"(&`Ö g4 f2B+RJ(CnNē ē`H§`pa Nē Ŧ/pa LŸfžp B+Ra`’/ Nē&_Nu&kst letter after the '*', so you can use *Data_default or similar to make things more readable. Examples.. My usual setup is: 100 PTH_ADD win1_:rem always try here first 110 PTH_ADD flp1_:rem look here if not found on WIN1_ 120 PTH_ADD sub1_:rem SUB is another new driver wot i rote 130 PTH_ADD 'sub2' 140 PTH_ADD win1_temp_ 150 PTH_ADD 'win1_asm_temp_' 160 PTH_ADD win1_bas_prg_ 170 PTH_ADD win1_sys 180 DATA_USE pth1_:rem set the toolkit 2 defaults to use the new device 190 PROG_USE pth1_ If I then do PTH_LT(kNÔ @n¤ @zf*(g"Hįāā g @üJ(CođpažPčC`æLßJ(Co0Hįā`paĻR(CLßaĐü0J(Co"B(CHįĀ@pa†LßJ€`@lĐ@0; Nģü0NuF,Ē0B€.z(đT( Ū8 Ļ – ė˛|pņNup˙NuEķ`ŲQĘ˙ü"KpNu"<2.01"k(`đQë­J+PfB+,Hį˙ū$kDa†aÚLß˙PëP¸+PbDPNu*JCf *nd*UBŠ `0(˙æåH*nh*u() Eëp"ÚQČ˙ü’üBj&tJfB+RJ+PVëPfJ+,k8B+RaŽ`J+,kJJ+Pg $H(f$h˙øÔü0Eę˙üĩëhfPëPJ+RgÚJ+g Äf J(kąë¨gJ(kxÄr˙"3A#A`Ž$B+­¨gr`:$k€Eęp/ 6xâN“&_m.IST, I get: 0 win1_ 1 flp1_ 2 sub1_ 3 sub2_ 4 win1_temp_ etc. Notice how (as an example) some of the paths are strings, some names. Some include an underscore on the end, others don't. The PTH_ADD command sorts them out automatically. If I then try to load 'demo_bas', the system searches 7 paths, and eventually finds it in 'win1_bas_prg_' less than a tenth of a second later. If I load 'boot', which is on win1_, the load occurs about as fast as normal. If I load 'fred', which doesn't exist, the system sJ+Ūf  gč  gâ)fÚJ(j ŋbA ÄkJ f) g( b"A „J+OngnO`nOÄ"+<ēgÄJ+RfBB#D á˜Ā-fg ą-f@ `Äfp˙Nug +MD@N¨gB+RpNuašfžJ‚j‚f0ĀQat4BÔB42 g 6*HA:8*g,šhDESE8*`ÄGv˙8+đDD:g DCDDšhDESE<ĖBpHBĀBHB0;Nû``čœHHĀxHįp2pt62 ÆGUB˛CWČ˙ô @g(€LßNuaÔHA2`r˙pNug0ĀQ´@gäSEkčŌCŌÄ`îg0ĀQ´@fĖSEkĐŌCŌÄ`îg0ĀQŧ@g´šCk¸ŌCænæodėT‰><ĖB`âg0ĀQŧ@fšCk”ŌCænæodėT‰><ĖB`âg 0ĀQearches all 8 paths before reporting 'Not Found'. There are some pitfalls in the use of drivers of this type, mainly because you never know where the file you opened is. This is OK for load and exec, since you (probably) don't care too much, but save will save to the first path it finds room on. For writing, it's probably best to name the device explicitly. Reading you can leave to the path device. If you want to check where the open file is located, while it's open you can use QRAM or QPAC2's channels menŧ@g˙lšCk˙n’CįnįodčU‰><ĖB`Ūg 0ĀQŧ@f˙DšCk˙F’CįnįodčU‰><ĖB`Ū0ĀQaūú2pNuHA˛hdJHA˛hdB6ÖhÆëđÖ¨2"C&HCÖh8C˙øäKŌÃEú"J(gEú.D˙ū>*DčopNupüNu˙˙˙˙˙˙˙˙€€UĒ˙ĒĒUĒĒĒ˙ĀĀLß _Nu/HįppNēˆfė/J|J(g|0)@@˙đäH:Āéx؀ +´ @g¸Ģ¸o*BĢ´pNA"tpNAJ€f¤QQ&o'H´'A¸(L×/H (I Ü Ü ÜB˜ üB˜p˜€äŒ(Hp`(ĀQĖ˙ü8+˛>(iIņČ&)`N$L&HČüį+VD0ĀÃH@HCĀÅÕĀ×ĀČüį+VD0ĀÃH@HC2A˙øAĐ@ĐF0;,äIĀrg ÖÁ2ÂSfSSBžDgJBfŽLß _7D˛NúĀ€€@@ ĀĀĀĀ0000 u to list the open channels. These channels appear twice, once as PTH1_filename, and a second time with the real drive name. Points to note... It's best to allocate all the paths you need in a block, and as early as possible, like the example above. This reduces heap fragmentation. If you need to remove all the paths... for f=1 to n:pth_rmv 0 where n is the number of paths set, or if you don't know how many paths are set... rep loop:if pth$(0)='':exit loop:else:pth_rmv 0 There's only one path list used fHį`Nēdmfz6–Ajz˙DCHAHB| (fėiėj8˜Aj|˙DD (fÜFŌAÔBHFBFHAHB¸ClĮDËF>âO`Hį? aBLßüŌ†žCjŌ…ŪD´fčpLßNuHį`NēmKú0`Hį`NēŪmKútNēLßNuKúfNúHį@ĀHį/ ËIal$_fđ WHÅJ(PfÜHį>~(h`XŒ4SBčJRBēBnŠ8RDåLÔ@ēBl4RBvJ@m6p`å@”Coœ?z˙BEäŊFEæŊ:ÜFHF<چ܆˜†!D!EJ(lNēNē Nē6` /rčēŲÉÂFÄF FFĀF€A ĀFFF€BÛÉ0mj`  čš čēJDjHAHBNotes on the PTH (path) driver.  August 1991 PA Borman This adds a new device driver to Qdos, giving extra devices or directories (paths) to search for a file when opening, loading, execing etc. Because it is implemented at device driver level, it's transparent to the program using it, although it does involve a slight (almost un-noticeable) time penalty on IO operations. The open call can take a significant amount of time depending on severŽJ+Hf|HB.3r av`ˆR+Ž%j *+@gv~˙xØ+Lâ vÖâ HEJEo ēCmrȚC`grĀÚCo šCHGBGHG`a,HEJEgo ēDmrؚD`rĐÚDna`šDBGJ‡f¸'E@`/ 6xāN“&_NuJ+KfBĢ@B+ŽB+Hŧ+LcîJ+NmæB+PkMNaî`Č+Kg:J+Ign t`J+HgBBJ|HJg2B.3"k€EépĩîLf a˙€`+HnBĢHQëŨPëO`|ūHJ+,md +¨g^ @(f h˙øĐü0 +hgF$@”ü˙üJ+Ŧm ĩČg6J(gn.Jg* fNēōB+N"k€#i|x+˙IB+JPëŽNē€"k€Eép-JLBĢ@Nu  a$'k8<'B`Hį KaĒ!KDa&LßhNuHį_ "+8t˙v˙~B+ŪCël$i˙üXŠ*jal factors. The driver returns as soon as a successful match is found, so the earlier the correct path is in the path list, the sooner it's found. The more paths there are, the longer it takes to search them for a non- existent file before giving up. If a path involves reading the network, there can be a few seconds delay before returning. If a path involves reading a drive which does not contain a disc, there will be a delay until the real driver notices there isn't a disc. In spite of all this, on my,j $j˙ü g$XŠž*fđJ*nę*fâLę0˙čaÚfÖ`2J+,k¸Eël$j˙ü gĒXŠJ*nî*fæLę0˙čaĻfÚt*f(***aŽgš gp$@EŌ`æ"J g"@CŅ)gđLé0˙čadfl$I * gh"@ Y,)$) g gRƒ"@LŅ0چa8fė )g,$`(v˙"j X‰LŅ0ag`•ĘCëp˙"Ā2Ā"Ā'J¨`>)g Į`4<Aę˙Đ"nxp˙ąŲWČ˙üF@Cë2č2Ā2҅"ÁBYB™"Ä"Å"ĘxJ.3fb+,kCú8>âe62|`0Ģß2|`2|x`2|` 2|x˙`2| k€!h|xNēvp˙Nē.´ĢgB+@ąDŦa ĀfũčLß QL with 8 paths set up in my usual 'boot' (not including network), trying to load a non-existent file returns in about a tenth of a second. There are several new keywords associated with the driver: PTH_LIST [#n] list all currently defined paths in the order they will be searched to #1, or another specified channel. PTH$(n) a function to return the nth path in the list. Returns an empty string if past end of list. PTH_USE [name] change the name of the PTH device. PTH_USE by itself resets to PTH. UúNu EmDd …m 0„dpNupüNuJ(˙âf g @AĐ`đ (˙ãc (q˙ãg + ­g R+­NupQë­Nu/.LBŽL(k0/ &k˙üN”&_-_LJ€f2/Gë˙¨pNAAëh g @˛¨˙Üg"`ōvNēÆgaf _4xÂN’pũNuaüčaFp _NúŽ"nxąŅf JnpgpNuHį +„Cđ0ŗîLf "k€Cép-IL4xÔIč0J,m:"l˙øKé0Cí˙üŗëhfPëILí˙čHė˙ča.)mB,CÕAÔN’`Ž gr @ü*H!l˙ü˙ü!l˙ø˙ø|€ËLaöËL+l+llB,Cč˙ø$Y fEëd%I$QY‰ fEëp%I˙üEĐCč˙Đ g$$@%I˙øĒ`îAė˙üCëhN’Aė˙øCëlN’`. ,gd MNēĻLė ˙đ´­˙đfļ­˙ôgHJ-j"L MNē˜ LNēūJ€NuHį˙lp¨×Āҍ*KCíh$I"( g2"@˛Š˙ÜfôŗíhfPíICé˙ÔEé0Gč0&’$‹!I(i@@)B`*rÂ.4JčAGč,Cíh&‘"‹ g "@Y‹#K˙ü`Y‹+Kl&MĐü0Ōü0J(k()g Lé ˙čLčĀÍGNēũng !i˙č!i˙ė˛(gNēlLé˙č)NēũnJlxJ(kr˛Š˙čf´Š˙ėgf!iiHį`Đ(INē0$H&Lß J€f@#JQƒQƒ#C/(˙č/(  Ėn`ˆˆ€Œāˆˆh`  ˜nđˆˆŒ ˆ ˆ@h@  dn`ˆˆŒ`ˆˆh`  0n`ˆˆŒpˆˆh`  ün‰¨ˆ¨Œ¨ˆ¨ˆ¨iĐ  Čn‰°ˆŒˆˆh ”n˜‰¤ˆ„Œˆˆˆ hŧ <`  $H 40üüüüüüüüüü˙ėHč˙čÁINēvÁI!_˙ė!_˙čJ(gHį`Đ hpNALß B¨ü0Lß6˙Nu (fHįøz`Hįøzx”Nēđ†(H(2,˙đpAāiRA<Âė˙ōgpåJ„g˛„n al I"QÂ`D l g ˛ŦoB(aR"/ p$,˙ØNA&_&gT€g6GúöpNA `*Cë¸!I˙ôPÂ)H)AB.4Pėa˜Nē¸pLßūNuJ,g ,gBŦ @/ pNA&_NuHįøz (fz 0Pė`Hįøzx”Nēīļ(H. f l,F„"HJfBŦ` I gHį Ha ÅCĮJËLNē$,vLŅĀJ†kNēú\f*&LŅÔŦ` &LėÃBKę(l24j 6kđĮJpNuJf$+ōvJ(k $h˙øLę HŅ pNupņ`ú~˙EëlHįxĖ gt$@AꞨ˙ØgV (€g> (f$taZ(ga„J¨g0t˙“ÉNēũĘNē÷L`ŧJGm¸tÄ.4´(gÜ`Ēt˙a$(gža,`ša J¨grNēüČ`ˆLß3Nu(HB g"@IŅ`ōNuaB`(gáH1@Nu(gøB(@Nua `0(JfāH@NuJ(føhNu "(˙ØHįpā$@&pNA" ‚2 lTŠ0g nhåH pööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööN’$pNAJ€gæLßNu.4xņČˆD4AxKúÄaxKúÚaE4NuLHĀ00 v˙aR€f]B.3`âQĖ˙āNuHįü&kT(kN”Lß?đNu(H/(/(/(6B¨6!h˙č!h˙ėp v˙aČ!_6!_!_B§ g @/`ö @pĀ.4@B(BJ(CVčCh!'hG)xKúa˙^ fÎ LNu hB)Fh'Dh(Eh hh )'-BBprŌl˙đāiRAÂė˙ōåtpNAJ€NuHį0ü(H ,g J,g @pNA+Üļ,fŦJ,n¤)l˙ô˙ė)l˙đ˙čaĒg6Aël (˙üg* @ü˙üJ(fî (‡gæLė˙đŌ‚Nē–fØrNēú¤`БČ)HPė Lt˙Nēė&oIëlLč˙đŌ‚v˙+Ü g*(@CėŗČgōļ)fėJ)næƒÃHNē@ÃHfØNē”`Ōt“ÉNēû"Lß? ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööNuHįėvNēR~˙`vHįė(HJ,m(l˙øØü0~˙BG+ܸ,f~˙$khEępĩĖgTlÜ/,˙ø/,˙üaŌvNēf@PJGk" kč +ėS€čˆr Á Á Á ÁQČ˙ö+ÜNēâNēüp k€Ačp-HLpLß7ūNuDÜaĻ)_˙ü)_˙øCė˙ø$Y fEëd%I$QY‰ fEëp%I˙üAël•Ę (˙üg4Aō (€g (fæt˙`J(gHįā hpNALßta`Æp˙`„"HB gCō`ōNua"4xŌCëhAė˙üN’"P" Cé˙üfCëlAė˙øNŌ4xÔCëhAė˙üN’CëlAė˙øN’Nu/J(˙âf g @AĐ`đčp _NuHįøa–oŒTˆT‰aŠUˆU‰o|J)mJ¨gaŦ(i2$i˙Ô4jØÔŠ˙ė`" )gT(@pĐi˙čäH@˙ü4@ <ĀŠ˙ėԀ (fan*h2&h˙Ô6kØÖ¨˙ė`*@pĐhS‰`îŅvˆūS@Aņŧ,ˆ` RˆR‰QČ˙ôˇÍlNēĒf?v˜X‰-IXp"VLß`\JûQEDāŌO  flp1_qed_helpCONŨĖ0åHŪĀ0Cî<2ĀR@âH`2ßQČ˙ü-Or˙t˙pNAJgrt˙pNAr˙vAú˙ĀpNB-H :˙zt:˙uv˙"O/:˙`/:˙X0‘aĐ@‘aŅaĐ@Ņap NCEú˙Tp'NCp(NCp)NCp NCr˙vAú˙npNB-H.ē˙/z˙o rtv˙"Op NC:˙tp-NCQO"Op NC-_ XOEúūøp'NCp(NCp)NCr˙vAú˙pNB-H0/Ņo?| rtv˙"Op NCPO:ūŧgrtp-NCB–Qî9Qî: n rtp-NCCúhaĀrtp-NCrtpNCCúXa¨JnpNC’ÁSA3Cú†4xĐN’t CîjpNCJ€fčSAgNxpßĀ)˙ū Kfx Cîja‚JAn Cúv4xĐN’`ŧéŠt˙pNAJ€g n Cúj4xĐN’` ,ˆAđđ-HAî-JHį0ĀCúōaē nCî<4xĐN’Qî9Lß pHNCJ€fpNB`$CúĐaŽ`CúÖa„pNB`CúØav-VCî&"úüú2úüú"ü˙˙˙˙B™B™QŲBnjaĘ nxz|~Gîj(Vaz| j`:4g0$IQO"Op NC2PO’BâIpNC"JpNCr pNCpĐb€Cō`ĖNu.n n24v˙pNCJ.9fa vpNCv˙J€gpNCpNCQî9`Ū  (DÁ€c66cÁ€ÁÁ€€cc6666ccÁÁ€€ 0€€€€""""€€€€ĀĀĀĀĀĀĀĀ3333 3333ĀĀĀĀĀĀĀĀNúNqNú4NqNúūėNqNúNqNúŧNq"<2.01"k(pNu0<H@0<NupNuHį~NēūLaL߈Nua$ NuHįI€Nēū4t I2<Â+Üæ p˛QfJj,)g&°+°b ()gCņH`āJgB+°"H`Ō"|`ļLß’pNu/ÅIpNē˙šÅIpNē˙’$pNu/NēũČpNē˙€$pNuHį|<+.+vÖh˙č0<āĢåK$C (g*@Gę&<ƨ˙ė6(˙îCg›Ë` *kč6kđ&(˙ė"(˙čJ¯f (ItNē¤` $K"M$NēpNC  e ŋcCú*TI0g˛˛föŌŅN‘`¨aĻŧn(fŠŧn$f‚0  g 3 ˙gS@fô`j4”@˜B<=F$2RB‚žÂ"O0`ķ`RFQČ˙ø<.$H§`2lrpNCp$NCaFa:24pNC4Cī`aQĘ˙úŪß  g˙a`˙Hį @4.$ Būld Fūl^Cķ`”Fg&nDBÕn$’Âü SBfø`J.8fŌÂ0aS@føRn$JBg J.8fa8`24pNCpNCaŒLßNuCúdaŽLßNu t BĀZÁZÂúäÄTÆöČPÉPĘøËüĖPÎĐŅ&Ō $Ô˜ØūŲTÚ Ü čÔė8đ>ō@ôĐøŌt4„î*HBDBÔn*ar aūōSBföNuJ.8g2aĒžnm"nra"fâŧ ra’ŧNēBLßg‚NuH@HFHGJ@jŪ@D@Ü@Nu/ kl(g PJAm˛¨˙āg P fôpū`RAfAč BfNē B+RNē ļNēĻ _Nu WRAft•Ęa ĸa Œ`čRAf čp`Úpņ`ÖHįLčđ˙čaa>HDHEHFHGaHBHCa.pLßūNu$”FDB&HC H@°Cf „H@Ö@HC6žEfÖDNuHįė//"Or˙pNAKúJgKúžü 0)Āëđ$h2ÕĀ0)@Q@D@3@˙ü0)äH@˙ū3@˙ūT@3@˙ú0)ĐQ2@3@˙ôäIA˙ū3A˙ö0i˙üi˙ô3@˙øo8i˙úIōĀ6)zæH`aTTLQČ˙úpi˙üIú†:4FE0)˙ū°i˙ög Iō6)a*z0)˙ôIúbŠt E˙˙g 8i˙öŲĘ6)a .IPLß7 NuHįĐ €€üH@`25‚EÃTØëđT@ @mpQË˙čLß0 NuÛÛmmļļ}<÷ķßĪ˙˙ TRLE1xũ˙ā€āúāūúā˙‚€ûā˙‚€ú␂€ų␂€úāū‚€ú␂€øāíRLE1xũũ˙úü˙ûû˙üú˙üü˙úü˙ûú˙ûü˙ųū˙÷˙ų @䌄Ą„„  ė’‚Äˆž Øė’‚Ė‚’Œ ¤čŠŠĪ‚‚‚ pīˆŽÁ‰† <扈Ή‰† ī‰Â‚„„?? g/ @(f fō`a _Nu _"(˙č≁` Jg nŌ¨`Ō¨˙ė +ō˛@d˛€d'A8B+RB+/ Nēí€"_pNupüNuHëāPëŨpNu!I B+RpNuHį0L҆‡(gLč ˙č`"v$+ōJ(k"h˙øŌü0)gLé ˙ča6fa(faNB+RpLß Nu!F!GBh B¨"B(H¨BNuԃafHBHCļGn”G”Fm HFkHGpNuHFHGpüNu(faaBHį`āvNē &NēŧLßNu8( TˆaUˆØD:(<ÜhšDÜD1E˙ė1E˙ôœE1F˙č1F˙đNuHįāJ(m h˙øĐü0(fHGD@@>HGÂîđ×Á Žč€îđ2H@äH$ ”Žč„îđ’B6HBäJB?0R@åH? .đ0.đ,@œß0Nu<>02QPTR2.01PT_QF.˙˙(Do you wish to ignore the QIMI interfaceNNo˙YYes˙˙˙Cú˙ü`Cú˙÷po2<ßtv˙‘ČNCNu0 ĀÂŲĀHB0æHØĀØĀ0 ĀÃÛĀHC0æHÚĀÚĀx8˜BpĀC*HEÚ@tÄEEčMgđ6SCgčDfÄNēb0NēfģĖnR2åI”Á–ÁUEl:B§Eîjaø  gžr 0e 9ba&aÚ? (fRJ/ `ĐaŌf–áIaÆfRJ ARPf TOr`Ė< aĸCúhTI0gp°AföŌŅHį` n24v˙pNCL×N‘a JogâSofÜŪü ab  g( ;g˙Z )f J—g(Jog Sof\O`Ô$W`˙:JŸfNuCúė`Cúô`Cú` nvpNCJ€gøCúüa Ę`øĘ  fRJ`öNu `m Ae ZbpNup˙NuHįEGúpNAč Lßĸe¨Nu ÅIavÅIJAgNuCú°a h`øh  gR ;gL )gFRJ !mB 0e 9c6 Ae Zc* ae zc"J  g˙(˛fō" ’‰SApNup˙NuCú`a ū`÷ūA `B ŧBEøBFĻBSęCEúÖCLúĀCRúĘCSúŧD ü DBrDCûjDWˇa00m rÂ@äHDAŌANû *Ü*Ü*Ü*ÜQČ˙öÍGaĪFŲĘÛËQË˙Ô`’"† F†Ā†F†‚€*ÁNu2åI0 ĀÃŲĀØÁ0 ĀÃÛĀÚÁ”Á–ÁUElΆa00m rÂ@äHDAŌANû +$+$+$+$QČ˙öÍGaĪF™Ę›ËQË˙Ô`0"$‡ %F‡Ā‡F‡‚€*Nu¸@oTLÄ|˙ān~˙JBgäoFG2åAģĖn ”Á–Á2|`(0 ĀÃŲĀØÁQŒ0 ĀÃÛĀÚÁY0J4@’K6A2|˙üÄÍGUElĖGJDj LL`J„j ,˙ūHA,˙˙HB  čščēŲÉÂFÄF FFĀF€A ĀFFF€BÛÉ0mj`  čš čēJDjHAHBŲɍÛÉéšéēJDkHAHBQČ˙Ō čš čēJDjHAHBŲÉÂGÄG FGĀG€A ĀGFG€BÛÉŲĘÛËQË˙>Nu,HG> H@<& ÆÂĶÃgÍGHBxČB”DäJŌÂHA0ĐAzĘ@ŌDÍDĪE NēûzE îEQîF rI *IBîIFNJ ûœM vN ühNWúžP üRPWú‚Q ÚR XRT4S ųÎSAęSBVSH˜SL^SR^SThT 0TYæU ú(WBX ĻCî02"éBQ` d-n02=G0Nur`2.`aū˛SA` afÃBžEzaÖ` 6t&`t(aū”SA= Nuaūˆ=A*Nu=G,Nu=G.Nu ga ŦJ.7g(CúTa ÜQî9 npNCpNCtßÄpNC YgXONuaÆ`a$ n v˙rtp NCp NCr˙vpNAaū4fa"`BgAî< ga D"V".’‰a>ŪßQî7Nu _0V@€žĀ>?/Aī`ŲQÉ˙üAīNuaũæfļaŌa~aŪßNuHį@āva üfX/Cú˛a $ n"o4xĐN’Qî9 _$v˙"o/ ‚ūo4<ūpNC$J€f ˙˙”nŪ/pNBLßJ€fNuCúfa Î n4xJ NēNÍDĪESAčAmSAm &HCåA”ÁQŠNuXpNua¨mF`>a–m@`8 Ā„ą™$k*HBpĀBæJĐ@D@NûŊ™Ŋ™Ŋ™Ŋ™Ŋ™Ŋ™Ŋ™Ŋ™QĘ˙î Ā…ą™ĶĘÍGQË˙Æ`˛Č…Ė„Î„HA`Ŋ‘ÍGĶĘQÉ˙ø`œa˙HmZ`Pa˙4mR`H Ā„"FÂ‘€"Ā$k2HBpĀBæJD@Đ@Nû"Æ"Æ"Æ"Æ"Æ"Æ"Æ"ÆQĘ˙î Ā…"FÂ‘€"ĀĶĘÍGQË˙ļ`˙>ȅ*F…HA` †&Ƒ€ƒ"€ÍGĶĘQÉ˙î`˙˙˙˙˙˙˙??˙˙˙˙˙˙˙˙˙˙˙˙˙˙??Đ@Đ@,;ēNuĐ@g Đ@.;ŽF‡Nu~˙Nu g<BA4pāĀ.§  fp÷Ā.”€@”Ā€CpNup÷Ā+ÜgôB.4pņNu'š:"Ō’RŌ B>â  J ~ ˛ æ  N ‚ĖN’`\LŽ,JAm2JBm.´Am4ana / ÃBa p5" "_’‰Ō€NuCú.a ˆ` Cú6a ~`Cú>a t` pNBCúJa f`õfaüüfĖaaūæva f˙vtžÂv˙"OpGNC$J€fPa^"axfēHį0āCúa nCī4xĐN’Qî9Lß / ‚ūo4<ūpNC$J€f ˙˙”nŪHį€ppNB MpNAaNLßŪßJ€fūö` a˙ IžBožn.oLaÜaøf¸ąÉeŅÁØSnú2..’BRAaZ´GmÔA=B,0ĐAS@=@.0ĩ R@RBSAnō`¨Cú da b`ôbaūšaũz>(IDa”2..’BRAaĐ2` TaũDaûÎ A,n:Hį@@ nv˙p NCLßAî<0Á`ŲQÉ˙ü g @pNA VB–pNA.n`ō¤Cú ač`ķčp NC/ Cú 4xĐN’CîCú 4xĐN’2.,a¨Cú 4xĐN’2..a–Cú 4xĐN’".’–í‰HAta Cú 4xĐN’"O“Ξü ".’–at".’–al4xpN’]I-ŧd˜Bv˜pN’pN’26˜Ūü ta´r%pNC$_a`&Cú ÄaāQî9 npNCpNCpNCNutJAl~Cú ´4xĐN’NupJg 0< S@ԁhúâ‘]I=€˜-˜NuaõˆaôØ` aõpaôÎa÷:a†24pNCaúf4SBmaķ^`ôNuaųúfAîj0Á`ŲQÉ˙üNuač`baä` Cú :a8 nCîj4pNCr"pNCQî9NuaÜ`xaØ`2 _Jnjg(aĖaúĀHį0˜FGú(a"$Iprt.l3 NĐNuaĖRFŌÆv5pSC–F–njm´3˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ  (Ē˙ đ€Ā 0€Ā 0€Ā 0€Ā 0€Ā 0€Ā 0Ē˙ đ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ  ,L˙˙đđĀĀ00ÆĀ00ÉĀ00ÆĀ00ÉĀ00ÆĀ00ĀĀ00˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ˙˙đđ  ,Ē˙¨ü€Ā €ĀĖ€ÃĖ€ĖĖ€˙ü€Āˀ Ē˙¨ü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü  ,L˙˙üüĪĪĖĖĪĪ<<ĖĖüüÃÃüüĖĖüüĪĪ<<ĪĪĖĖ˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü  ,Ē˙¨üŠĪˆĖŠĪ(<ˆĖ¨ü‚èüˆĖ¨üŠĪ(<ŠĪˆĖĒ˙¨ü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üü˙˙üüWË˙øf aŧgRSClę5pÔĀ"J|RGžncČ`ŽaŠCō`’îj6–njm!´3WË˙øf RIa|gSISClčSGm^5p”ÆSF`Ę, œŠSF2XOLß €ØFm0ĐnjS@°n m8. ˜njl$x` 0GžEÚ@m ēn"lŪE`:."SEŪE`za8NuLß ĀØFCú a`ņHį@6.jUCmAîm3°3VË˙ōLßNuLß°Nu  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ ĄĸŖ¤Ĩϧ¨ŠĒ̌Ž‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙Qį`PįaũnSJa  8d€ā?đ?đāøāø?đ?đā€ĀĀ??đđøøøø˙˙üü˙˙üü˙˙üü˙˙üüøøøø??đđĀĀ  8€  *¨*¨ / ø / ø*¨*¨  €đđ??üü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙??üüđđ  0T??ĀĀ0?ĀĀ0?ĀĀ3?üü??Ėü ü üüü˙˙đđ˙˙đđ˙˙đđ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙  0*?€Ā :€Ā :€Ā";¨ü*?ˆėŦŦ¨ü˙˙đđ˙˙đđ˙˙đđ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙  ,L??üü0? ü0? ü3?üü3? ü3? ü??üü˙˙˙˙˙˙˙˙÷dföŌHį@@aũØ24v˙ npNCJ/g"Cú ÂažQî9pNCpNCtßÄpNC Yf(aˆ2.jaķ.L×.8Qî8SBmađ\`ô_8Ūü NuCú „aNAúëîvafŦ$H nv˙p NC:ëŌgrtp-NCžüT"Op NC?n"ÅHtPCīpNCÅHJ€fL4SB´Wo4CīpNCr pNCSonĐCú *aŪQî9/ npNCpNCpNCp NC _ fž`aûÎŪüTÅHpNB:ëHtv˙ np-NC`ÔCú aŽ`îŽHįP`LÖr˙v ŗĘdļføRAhô-ICúîaf2<˙JAl r"VÃ-I=AAapgCúōa@Lß NuHį`p˙-@,0.ĐAi<°neHįđ MpNA"Aa6Lß =@AR@CõEņG`!QČ˙üLßNuCú¨aäQî6›Í`íŪHį8đ˙˙t˙pNAJ€˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙  ,*?¨ü :Ŧ :Ŧ";¨ü";Ŧ";Ŧ*?¨ü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙  P˙˙Ã˙Ã˙Ī˙đđ˙˙0đ 0đ 0đđđ  ˙˙đđĀ˙0đĀ˙0đĪ˙đđĖ˙0đĖ˙0đ˙˙đđ ä üü33ĀĀ``€€ũũČČĀ  `RLE1x˙ųũü˙:ü˙ū˙õ­:ūū˙ū˙õ­:ũ˙˙˙ū˙õū­:ū­üõ­:ü­ūõ­:ú­õ­:ø­:đRLE1x˙ų˙ũų˙ũų˙˙é˙÷˙ūų˙üû˙úũ˙ø˙˙ü  (00āāĀĀ€€11@@€€Ā fÚ*HA=ALÖptv (<˙ IŗĘd*ļfø" ’ˆ RB’„oč„ ˙Cđ@˙DaĐ$npRI`Đ-HLßJ€NuHį`p˙-@,“nEõpCō0.GR@`ŲQČ˙üLßNuQĀ`PĀēügTJ.6gūpNuËJXŠÕŌÔĀ/Xx8čLH„Ä*4åŒ0X(MŲŨJ•ÛÕgĐHÃԃ‚ĀHA:ÂÄ6HC6HBxČÂ4Hį0 ØÁÚÁ L"MHBHC–EHE”E?ĐīŌī*/x XŠîŧ Č@HEãMe.ÂD FDĀDFDŗ@ÂDFD‹ ĀDŗ@‹FDX‹XˆX‰HGîŦHGSBn4/ L"MHESEnĸmBD`ĸ4ÖÎØīÚīSCn 6/(o *o L"MQÎ˙lŪüNuHÃԃ‚ĀHA:ÂÄ6HC6HBxČÂ4Hį0 ØÁ LHBHC–EHE”E?Đī*/x XŠîŧHEãMe.ÂD FDĀDFDŗ@ÂDFD‹ ĀDŗ@‹FDX‹XˆHGîŦHGSBn4/ LHESEnŦmBD`Ŧ4ÖÎØīSCn6/(o LQÎ˙„ŪüNu(MŲŨÛÕØĀÚĀ/*tvx   XŒXîēîģîŧHEãMe  FDĀDÂDFDĩ@ˇA‹‹paĻa‚`xaža 4Cķ 2.&RAŌB A˙n˙’B”Flt0ÔAĶn$`ĄQČ˙úü ?SAoü `öa,•5pra,‚p”_gp$NCr pNCa4afapaÖ2.&`aūúaÄa(/ t5pSŌÂÔ5peũVr˙a.rap‚p"_ahröpNCaZNuQîX‹HGîĒîĢîŦHGHESEnļmBBBCBD`ŧÖÎQÎ˙ XNuHÆˇĘnÚg°4”AmzHĀlD@ē@mnÆ86RCČÃØDØDØÄÚÄåKØCŌÄäKÁŽH@ÆĀH@–@ÁŽÔÃÖà I/ / 6` 8% QĖ˙ü”ÎQË˙ôHA2’@6RCåKÜÃJ€k*–Ã8`% QĖ˙ü8# QĖ˙ü8`##QĖ˙ü”ΖÎQĘ˙ŪÖÃ`(”Ã8`##QĖ˙ü8# QĖ˙ü8`% QĖ˙ü”ΖÎQĘ˙ŪÔÃHAœÃ` 8##QĖ˙ü–ÎQÉ˙ô`¨DA4”Am¤HĀlD@ē@m˜ I/ / 6` 8$ØQĖ˙üÔÎQË˙ôHA2’@6RCåKÜÃJ€j*ÖÃ8`$ØQĖ˙ü8"ØQĖ˙ü8`"ÛQĖ˙üÔÎÖÎQĘ˙Ū–Ã`(ÔÃ8`"ÛQĖ˙ü8"ØQĖ˙ü8`$ØQĖ˙üÔÎÖÎQĘ˙Ū”ÃHAœÃ` 8"ÛQĖ˙üÖÎQÉ˙ô"_&_NuaHÆ/ / 68"ÛQĖ˙üÖÎQË˙ô`ā6/ ($ŲQĖ˙üÔÎQË˙ô"_Nua˙Đ`aūŪEa’Jm˙bnšNuF.8`:öØt:öĶ n p NCalQî:Nu n:öĀp'NC:ö¸p(NC:öąp)NCp NCr>pNCCîjr 1 gRA`ôNuaÄ4pNC`| ja´ŌÁ4<pNC< Qî9Qîr0."S@ĐAnc Ö@’@lÖAra(I:>ŪEaũŪJmîęNuHį€žEAõp"LžAn g@DGp0.R@A°Gl>ĐAAõ"n`˛Gl M"V>gpŌĀSGfø` p ’ĀSGføL߀Nu File name: % Workspace size (ENTER for default): Invalid number Too largeQED: No room for workspace Reading File I/O errorFile too largeCreating new fileQEDQL Text Editor Version 1.01"Copyright  1988 by Jan BredenbeekHilversum, Holland Line too long Top of file End of file Syntax errorUnknown command Mismatched ()Commands i the line to its pre-edited state by pressing the ESC key. However, if you move the cursor to another line the newly edited line will be placed back into the text file, thus replacing the original line.3.3. Cursor controlThe cursor can be moved one position by the cursor control keys LEFT, RIGHT, UP or DOWN. The display will be scrolled horizontally or vertically if necessary. However it is not possible to move the cursor beyond the start of the line, the 254th column, or the start or end of the tnterruptedNonzero number expectedBad string delimiterType Y to confirm: Writing FILE ERROR: String expectedNo block definedBlock start > block endNo room for file Inserting #"IB" position must be outside blockInvalid file nameEditing file :  "Find" string: "" Tab distance :  Left margin :  Right margin :  Block start :  Block end :  Buffer size : K Buffer usage : Any key to continue UnsetSearching for " Search failedExchange? (Y/N) Loadinext file.The SHIFT LEFT and SHIFT RIGHT combination of keys will move the cursor to the start of the previous or next word respectively, while the ALT LEFT and ALT RIGHT keys will move the cursor to the start or the end of the line respectively.The TAB key generates a number of spaces until the next tab position on the line is reached (which is a multiple of the tab distance). These spaces will be inserted or overwritten depending on the mode.Note that you can move the cursor beyond the last cg HELP file...#Any key to continue or ESC to exit Can't find HELP file'Too many lines (>32768) - Extra ignoredLines truncatedNo room for line tableNo room for text#No room for line table - SAVE first.Line Col Line count: Mode: INSERT OVERWRITEa(čaānFg4talfR86˜m:r2VA*a(’Å=„˜4g$T‰aDU‰`ta8f6˜` ta(f-IX4x N’P‹`˜a(a(|atmîtaūfäS‰B6˜Jnp4xN’-IX4x N’P‹`ČaėaQED - with a command line, using EXEC(_W) QED;'' (Toolkit II only).(where stands for the name of the drive containing QED, e.g. flp1_ or flp1_ depending on your system).In the first case, QED will ask for the name of the file to be editedon a single command line must be separated from each other by a semicolon ";". E.g. SA/flp1_myfile_asm/;Q will save the current file to floppydisk 1 under the name "myfile_asm" and then quit QED.A command may be executed repeatedly by specifying a repeat count before the command name. E.g. the command 4N will move the cursor four lines down in the text file. The repeat count must be in the range 1 to 65535.A special case of this is the RP specifier: this will repeat the following command indefinitely. E.erate a line longer than 254 characters.The S command splits the current line at the cursor position, moving the text from the cursor onward onto a new line.3.7.3. Setting margins and tab distanceThe SL command sets the left margin equal to the value of the numeric parameter (which must be from 1 upwards). The left margin is the column position to which the cursor will be set after an ENTER keypress or an A, I or S command. In Overwrite mode, the characters left from the left margin will not be altered with the UP and DOWN keys, and modify its value with the LEFT and RIGHT keys. The LEFT key will decrease the value by one, the RIGHT key will increase it. An exception to this is the name of the HELP file: pressing LEFT or RIGHT allows you to enter the new HELP file name, which must be terminated by an ENTER keypress.The following parameters can be configured:- The left and right margin and the tab distance to be used on startup, or after a R command.- The initial workspace size in Kilobytes. erased. It is still possible to move the cursor to the left by using the cursor control keys.Please avoid setting the left margin to daft values; it should certainly not be set beyond column 254.The SR command sets the right margin equal to the value of the numeric parameter. When you reach the right margin during typing in of the text, QED will automatically perform a newline and move any partially completed word to the next line. Note that this will not happen if your typing starts already beyond tThis is the workspace size used whenever the default is specified on startup or the R command is used, and the workfile does not exist.- The colour and width of the border of the QED display.- The PAPER and INK colour of the initial display (the display used on startup).- The PAPER and INK colour of the text window.- The PAPER and INK colour of the status and report line.- The PAPER and INK colour of the command line.- The horizontal character size. This corresponds to the first parameter of thehe right margin, or if the character you type is not the last on the line.The automatic line wrap can be disabled by setting the right margin to a value greater than 254.The ST command sets the tab distance equal to the value of the numeric parameter. When a TAB keystroke is received, QED will insert or overwrite one or more spaces until it reaches the next multiple of the tab distance.The distance specified must be in the range 1 to (at most) 253.The left and right margin and tab distance are initi SuperBASIC CSIZE command: 0 for 6 pixels, 1 for 8 pixels, 2 for 12 pixels and 3 for 16 pixels. Note that the command and status line must at least contain 55 characters, so the horizontal character size of this line will never be greater than 8 pixels, even if you specify 12 or 16 for the text window. Also, QED always uses MODE 4 for its display, switching the MODE on startup if necessary.- The name of the HELP file. This is the file displayed when F1 is pressed. Note that this is just a normal text fileally set to default values. These default values can be configured with the QEDCONFIG_BAS program.3.7.4. Searching and replacing textThe F command searches the text from the cursor position onwards for a target string. If a string parameter is given, this will be taken as the target string, if no parameter is given the target string specified in the last F or BF command will be used. E.g. F/wombat/ will search the text for the string "wombat". Note that the case (upper of lower) of the string is ig that can be edited with QED, so you can easily create your own HELP file and install it using this configuration program. Is is best however to avoid lines longer than 55 characters, as QED might not be able to display them fully (the HELP display has no end-of-line wrap).For the PAPER and INK parameters, consult the QL User Guide if necessary. For the PAPER (background) colour a range of 0 to 255 is valid, for the INK (foreground) colour only 0 to 7 as "stippled INK" text is somewhat difficult to read! nored and the surrounding characters are of no importance.The BF command is the same as the F command except that the search will be made from the cursor position backwards into the text.The F and BF commands have two immediate versions: the CTRL DOWN and CTRL UP keys respectively. CTRL DOWN will search forwards for the string given in the last F or BF command, CTRL UP will search backwards for it.It should be noted that the F command moves the cursor one position forwards before the search, anThe configuration program relies on your own confidence on the choice of colours, so don't use silly combinations like green INK on white PAPER and the like. Remember that QED always uses 4-colour MODE!When you have finished, press ENTER to continue with the window size and position configuration. A window is then displayed with colours, border, size and position equal to those of the window to be configured.The window can be re-positioned with the LEFT, RIGHT, UP and DOWN keys. One keypress will move itd BF moves the cursor one position backwards before the search. Hence, if the cursor is already positioned at the start of the target string, the F or BF command will skip to the next or previous occurrence respectively. This is useful if you want to search quickly for a particular occurrence; simply press the F2 or CTRL UP/DOWN key if the occurrence found is not the one you want.The E and EQ commands exchange (replace) a particular string by another. The E command exchanges immediately, the EQ comman two pixels in horizontal direction or one in vertical direction. The window can be re-sized with the ALT LEFT, ALT RIGHT, ALT UP and ALT DOWN keys. One keypress reduces or enlarges the window by one character column or line as appropriate. The minimum size is 55 columns and 5 lines.Any change you make will be displayed; also the current window width and height in characters (not pixels) will be displayed, with the pixel coordinates of the top left-hand side below it.When you are satisfied with the windd queries first on finding an occurrence (press Y if you really want to exchange).Two strings must follow, separated by a single delimiter character. E.g. E/cat/mouse/ will replace the next occurrence of "cat" by "mouse". If you want all occurrences to be replaced, use the commands T;RP E/cat/mouse/.If you do not respond with "Y" on an EQ query, the command will be terminated but the command line will not be aborted unless you pressed ESC. Thus if RP is specified EQ will skip to the next occurrence.The Eow size and position, press ENTER. The program then finally asks whether you want to install the new parameters or not. Press Y to install them or N if you want to quit without installing.APPENDIX 1: COMMAND SUMMARYA1.1. Immediate commandsTAB Tabulate (i.e. insert/overwrite a number of spaces)ENTER Split and generate new line (insert mode) Move cursor to new line (overwrite mode)LEFT Move cursor left one characterRIGHT Move cursor right one characterSHIFT LEFT Move cursor left one wordSHIFT R and EQ commands follow the same rules for searching as the F command. The first string specified will become the new target string.3.7.5. Block commandsA block of text consists of one or more complete lines. The start of a block is defined by moving the cursor to the desired line, and then issuing the BS command. The end of a block is defined in the same way using the BE command. The block is then defined to be the text from the start of the "BS" line up to and including the text on the "BE" lineIGHT Move cursor right one wordCTRL LEFT Delete left one characterCTRL RIGHT Delete right one characterSHIFT CTRL LEFT Delete left one wordSHIFT CTRL RIGHT Delete right one wordALT LEFT Move cursor to start of lineALT RIGHT Move cursor to end of line CTRL ALT LEFT Delete line CTRL ALT RIGHT Erase to end of line UP Move one line upDOWN Move one line downALT UP Scroll one line upALT DOWN Scroll one line downSHIFT UP Move up one pageSHIFT DOWN Move down one pageCTRL UP Search backwards (see "BF".If any line is inserted into or deleted from the text (except by a IB command), the block start and end become undefined once more.Note that the start and end of the block do not have to be specified in strict order, so it is possible to specify first the end and then the start of the block. The BS and BE commands do not check whether the block end is after the block start, the validity of the block is only checked when the next block command is issued.The IB command inserts a copy of the block betwe command)CTRL DOWN Search forwards (see "F" command)ESC Restore line to its pre-edited stateF1 Display HELP informationF2 Re-execute last command lineF3 Enter and execute command lineSHIFT F3 Re-edit and enter last command lineF4 Toggle Insert/Overwrite modeF5 Redraw displayA1.2. Extended commandsIn the following:n indicates a number in the range 1 to 65535;/s/ indicates a string starting and ending with a delimiter character;/s/t/ indicates two strings separated from each other by aen the current line and the previous line. It is not possible to insert a block within itself (use IB within copies if necessary).The DB command deletes the block from the text file. The cursor is set at the position where the block has been deleted.The WB command writes the contents of the block to a file, the name of which must be specified in the string parameter.The SB command sets the cursor at the first line of the block and at the top of the display. Note that the RT command may be used t single delimiter character (which must be the same as the character which introduces s and terminates t).The characters [ ] indicate an optional parameter.A[/s/] Insert line containing s after current lineB Move to bottom of fileBE Mark block endBF[/s/] Backwards findBS Mark block startCE Move cursor to end of lineCL Move cursor one position leftCR Move cursor one position rightCS Move cursor to start of lineD Delete current lineDB Delete blockDC Delete character under cursorDW Deleto return to the old position.3.7.6. File commandsIn all file commands, any filename specified must be a full QDOS file name (e.g. flp2_fred_asm).All commands which write text to a file (X, SA and WB) automatically overwrite the file if it already exists, without asking permission.The SA command writes the text to a file. If no parameter is given, SA will use the current workfile name. If a string parameter is specified, this will be taken as the file name, but the current workfile name will not e word right from cursorE/s/t/ Exchange s into tEQ/s/t/ Exchange but query firstF[/s/] Forwards findI[/s/] Insert line containing s before currentIB Insert copy of blockIF/s/ Insert file sJ Join current line with nextM n Move to line nN Move to next lineNW Move to next wordP Move to previous linePW Move to previous wordQ Quit without saving textR/s/ Re-enter editor with file sRP Repeat until errorRT Return to previous lineS Split line at cursorSA[/s/] Save text to fileSB Show blbe altered.E.g. SA/flp2_myfile_asm/ writes the text to file "myfile_asm" on floppydisk 2.The R command allows you to re-enter QED with a new file name, discarding the old text. The new file name must be specified in the string parameter.If any changes have been made to the current text file, QED first asks permission to continue. Press Y if you want to re-enter, losing the old text, or any other key to abort the command.The R command will reclaim the existing workspace and allocate a new one using ock on displaySH Show statusSL n Set left marginSR n Set right marginST n Set tab distanceT Move to top of fileTY/s/ Type string sU Undo changes on current lineWB/s/ Write block to file sX Exit, writing text backAPPENDIX 2: FILE FORMAT AND MEMORY USAGEQED is designed to handle line-based QDOS textfiles, which are files containing lines of printable characters terminated by a LF character.QED restricts the maximum length of a line to 254 characters; if you load a file containing longthe default workspace size. If there is insufficient memory for the new workspace, QED will abort with an error message.The IF command inserts the contents of the file specified in the string parameter at the current position. The file will be inserted between the current line and the previous line. If there is not enough room in the workspace, an error message will be generated. In that case, you will have to re-start QED with a larger workspace size.After the file has been loaded, there may be a few er lines these will be truncated to 254 characters. QED will give a warning message if it has done so.The maximum size of the file you can edit depends on the amount of RAM in your QL (QED loads the whole file into RAM), but you must also ensure that your file does not contain more than 32768 lines (which is more than enough for most purposes). QED will however read files containing more than 32768 lines, but will ignore the extra lines. Again a warning message is displayed if this has happened.Apart frseconds delay during which QED is rebuilding an internal table.3.7.7. Miscellaneous commandsThe Q command quits QED without saving the text. If any changes have been made to the text, QED will ask confirmation. Press Y if you want to leave QED, losing the changes.The X command writes the text back to the file (using the current workfile name) and then quits QED. It is in fact the same as the commands SA;Q. If any file error occurs (not found, drive full etc.), QED remains running.The U commanom the QED job code and data space (which are 8K and 1.5K respectively in the current version), QED uses two areas of RAM, both of which are allocated in the QDOS Common Heap area.The first area is the textfile's workspace. This holds the text file in its original form, without any additional data. This has the advantage that LOADing and SAVing of the text file can be done very quickly using QDOS string I/O calls. However the disadvantage is that changing the length of a line near the beginning of a long d cancels any changes made on the current line. It does in fact the same as the ESC keypress. It has been included for compatibility with other QL text editors.The SH command displays the current status of QED. This includes the name of the workfile, the current string used for the F and BF commands, the tab distance, left and right margin, block start and end line, and the workspace size and usage.3.8. Error messagesIf during editing or command execution an error occurs, QED will display an approtextfile involves moving a large block of memory, which may slow down editing. (Note that editing the line itself does not take place in the text file but in a buffer, so this will not be slowed). The QED code is optimised to speed this up as much as possible, but on an internal RAM machine it may take a second to enter a line near the start of a 160K textfile. If you find this too slow, remember that it is better to code a large program in parts which can be linked together by a linker (if possible), rathpriate error message. In most cases this is self-explaining, but two cases might need further explanation:"No room for text"There is not enough room in the editing workspace left for what you are trying to do. You must save the text first (using SA) and then reload it using the R command (which allocates a new workspace large enough for the file plus 4K overhead)."No room for line table"QED maintains an internal table to keep track of the length of each line. When this table becomes full, QED rebuer than in one very large source file. This will also save compiling/assembling time.When a text file is loaded, QED will also allocate a line length table. This holds the length (one byte) of each line, enabling a particular line to be found quickly. In fact, if you want the cursor to be positioned at a particular line, QED will first determine the shortest path to take (which can be down from the top of the file, up or down from the current position, or up from the bottom of the file) and then search bailts it using a larger table size. This is normally transparent to the user, but if there is insufficient memory in the QL to do it then QED will display this message and inhibit any further editing. You should save the text using the SA or X command, then do something to get more free memory, and then reload the file.4. CONFIGURING QEDQED allows you to re-configure many of its startup parameters, such as window size and position, display colours, default margins etc. This can be done using the QEDCONckwards or forwards for the line you want.When the file is loaded, QED will allocate a line length table large enough for the text file itself plus an additional 256 lines. If during expansion of the file the table becomes full, it is reclaimed and a larger table built using the contents of the text file (this may take a few seconds). If the attempt to re-allocate the table fails due to shortage of memory, an error message "No room for line table" is displayed and any further editing will be prevented. HoFIG_BAS configuration program.The configuration program is started by entering the SuperBASIC command:LRUN QEDCONFIG_BAS (where is flp1_, flp1_ etc. as appropriate).Once the program has been loaded, it will ask for the name of the medium containing the copy of QED to be configured. E.g. if you have a copy of QED in microdrive 1, you must enter flp1_, and so on.The configuration program will then read and display the currently installed values. You can then select the parameter to be wever it is still possible to SAVE the file as the line length information is not required for SAVing.APPENDIX 3: REVISION HISTORYThis appendix describes the revisions carried out on QED since its first release.V1.00 (August 1988)First release version.V1.01 (September 1988)SHIFT F3 command added to re-edit last command line.PW, NW and DW commands added (move to previous word, move to next word and delete word right from cursor respectively).Bug in DB command fixed (caused display to be scramLkœáLl}Ll~LlLlœLlLlˇLl¸8Llđ0Lm *LmJ$Lmn&Lm”%Lmš'Lmā$Ln&Ln*%LnO'Lnv&Lnœ&LnÂLnŨ%LoLoLo.LoHLofLo€Lož,LoĘ,Loö)LpLp Lp< Lp\"Lp~-L 'Initial workspace size (K)',29,1,255 25040 DATA 'Border colour',30,0,255 25050 DATA 'Border width',31,0,16 25060 DATA 'Paper colour initial window',32,0,255 25070 DATA 'Ink colour initial window',33,0,7 25080 DATA 'Paper colour text window',34,0,255 25090 DATA 'Ink colour text window',35,0,7 25100 DATA 'Paper colour error report',36,0,255 25110 DATA 'Ink colour error report',37,0,7 25120 DATA 'Paper colour command line',38,0,255 25130 DATA 'Ink colour command line',39,0,7 25140 DATA 'Horizontal CSIZE',40,bled on certain occasions).Bug which caused garbage to be displayed at end of text when too-long lines were read fixed.F5 key now also redraws border of display.=== END OF MANUAL ===“˜ 1Š 1Š L) L5 LALBLaLb@LĸLˇL¸ÜL”L•L–L§L¨L 7$L[L\L]Lqacted from the buffer by something likef$ = PEEK_STRING(buffer 100 REMark QED configuration program V1.00 110 WINDOW 448,200,32,16:MODE 4:PAPER 2:INK 7:CSIZE 1,0:CLS 120 CLS:PRINT "*** QED CONFIGURATION ***"\\ 130 PRINT "Allows you to change the QED initial settings"\\ 140 RESTORE :DIM prog(87),opname$(15,27),optpos(15),optmin(15),optmax(15) 150 FOR i=0 TO 15:READ opname$(i),optpos(i),optmin(i),optmax(i) 160 INPUT "Name of medium containing QED (e.g. flp1_): ";dev$ 170 OPEN_IN#3,dev$&"QED":FOR i=0 TO 87:prLrØLJLKLLLZL[)L„L…1LļSL L pLzL{ L„dLčLéfL OL P%L uL ‰L ŠnL øtL lL mFLŗL´æLšL›jLLLLLL0L1ĢLÜ#Log(i)=CODE(INKEY$(#3,-1)) 180 CLOSE#3 190 FOR i=23,25:prog(i)=prog(i)+1 200 help$="":FOR i=1 TO prog(43):help$=help$&CHR$(prog(i+43)) 210 CLS:PRINT 'Use žŋ keys to select option' 220 PRINT 'Use ŧŊ keys to change selected option' 230 PRINT 'Press ENTER to end' 240 AT 4,0:FOR i=0 TO 14:PRINT opname$(i);":";TO 29;prog(optpos(i)) 250 PRINT opname$(15);": ";TO 29;help$ 260 opt=0 270 REPeat sel_loop 280 STRIP 7:INK 0:print_opt:STRIP 2:INK 7 290 key=CODE(INKEY$(-1)):IF key=10 THEN print_opt:EXIT sel_loop 300 ˙9L8L9L:LNLO]LŦ‡L3&LYLZ¸LLxL‹LŒLLĸLŖ'LĘõLŋÍLŒLL§L¨üL¤LĨLĻLēLģÄL ’L!L!<L"NL"OL"PL"dL"e8L" SELect ON key 310 =192:change_opt -1 320 =200:change_opt 1 330 =208:print_opt:opt=opt-1:IF opt<0:opt=15 340 =216:print_opt:opt=opt+1:IF opt>15:opt=0 350 END SELect 360 END REPeat sel_loop 370 bordwid=prog(31) 380 winwid=256*prog(14)+prog(15)+4*bordwid:winlen=prog(17)+2*bordwid 390 win_x=256*prog(18)+prog(19)-2*bordwid:win_y=prog(21)-bordwid 400 IF win_x<0:win_x=0 410 IF win_y<0:win_y=0 420 IF win_x+winwid>512:winwid=512-win_x 430 IF win_y+winlen>256:winlen=256-win_y 440 IF prog(40)=0:xinL"ž' L#Å L#Æ$ L#ę L#ë6 L$! L$"6 L$X L$Y$ L$} L$~ƒ L%L%L%L%L%~L&‘‹L'‘L'­ÁL)nL)L)ŽL)•L)› L)¤ L)­L)ŽÖL*„L*…ØL+]ļL,ēL,ÍL,ÎvL.DL.EŽL.ĶL.c=6:ELSE xinc=8 450 winwid=winwid-4*bordwid:winwid=winwid-(winwid MOD xinc) 460 winlen=winlen-2*bordwid:winlen=winlen-(winlen MOD 10) 470 INK prog(35):draw_win 480 PRINT "Use ŧŊ keys to reposition window" 490 PRINT "Use ALT ŧŊ keys to resize window" 500 PRINT "Press ENTER when finished" 510 REPeat win_loop 520 key=CODE(INKEY$(-1)):IF key=10:EXIT win_loop 530 SELect ON key 540 =192:REMark left 550 IF win_x>1:win_x=win_x-2 560 =193:REMark ALT left 570 IF winwid/xinc>55:winwid=winwid-xiÔL.ÕL.ķL.ôL/ L/ ëL/÷L/øwL0oL0înL1\nL1ĘzL2DL2ÔL2ÕĄL4vL4~†L6L6nL7sL7tL7uL7‹L7ŒúL8†ÁL9GķL::‰L:ÃHL; ŪL;éyLgL>…Lnc 580 =200:REMark right 590 IF win_x+winwid+4*bordwid<511:win_x=win_x+2 600 =201:REMark ALT right 610 IF win_x+winwid+4*bordwid+xinc<=512:winwid=winwid+xinc 620 =208:REMark up 630 IF win_y>0:win_y=win_y-1 640 =209:REMark ALT up 650 IF winlen>50:winlen=winlen-10 660 =216:REMark down 670 IF win_y+winlen+2*bordwid<256:win_y=win_y+1 680 =217:REMark ALT down 690 IF win_y+winlen+2*bordwid<=246:winlen=winlen+10 700 END SELect 710 draw_win:AT 1,10:PR>†…L@ aL@lL@mŪLAK@LA‹LAŒ˜LB$LB%LB&%LBKLBL¯LCû„LDßLE^âLG@LGAŌLHÜLHīĖLIģŠLJELJFLJGLJ^LJ_cLK„LLFGLMLMŽĩLNCLND{LNŋLNĀzLO:LO;¤LOßLOāINT winwid/xinc;TO 20;winlen/10 720 AT 3,10:PRINT win_x;TO 20;win_y 730 END REPeat win_loop 740 win_x=win_x+2*bordwid:win_y=win_y+bordwid 750 prog(14)=winwid DIV 256:prog(15)=winwid MOD 256:prog(17)=winlen 760 prog(18)=win_x DIV 256:prog(19)=win_x MOD 256:prog(21)=win_y 770 FOR i=23,25:prog(i)=prog(i)-1 780 PRINT#0;"Save new settings? (Y/N) "; 790 REPeat getreply:reply$=INKEY$(-1):IF reply$ INSTR "YN":EXIT getreply 800 PRINT#0;reply$ 810 IF reply$=="Y" THEN 820 OPEN#3,dev$&"QED" 830 FOR i=0 TO 87:PRILOáLO÷LOøaLPY‰LPâLPãéLQĖQLRLR—LRĩŧLSqČLT9LT:SLUsLVLVLVLV!LV"¯LVŅāLWąLW˛¯LXaLXbõLYWLYXLYYLYnLYoŧLZ+LZ,LZAķL[4L[5L[PąL]LNT#3;CHR$(prog(i)); 840 CLOSE#3 850 END IF 860 PRINT#0;"Finished" 870 STOP 10000 DEFine PROCedure print_opt 10010 IF opt=15:AT 19,29:PRINT help$;:ELSE AT opt+4,29:PRINT prog(optpos(opt)); 10020 END DEFine print_opt 10030 DEFine PROCedure change_opt(n) 10040 IF opt=15 10050 AT 19,29:PRINT FILL$(" ",LEN(help$)); 10060 AT 19,29:INPUT help$ 10070 prog(43)=LEN(help$) 10080 FOR i=1 TO LEN(help$):prog(i+43)=CODE(help$(i)) 10090 ELSE 10100 AT opt+4,29:PRINT " "; 10110 newval=prog]L]L]L]ĮL]ßIL^(L^)L^EL^F6L^|ĮL_CÅLaLa ,La5La6^La”La•ŗLbHLbI9Lb‚LbƒQLbÔLbÕ/LcLc:Lc?Lc@0LcpLcqŲLeJLeKˆLfĶLfÔˇLh‹LhŒĶLi_~LjŨŋ(optpos(opt))+n 10120 IF newvaloptmax(opt):newval=optmax(opt) 10140 prog(optpos(opt))=newval 10150 END IF 10160 END DEFine change_opt 10170 DEFine PROCedure draw_win 10180 PAPER 0:BORDER 0,0:CLS 10190 WINDOW winwid+4*bordwid,winlen+2*bordwid,win_x,win_y 10200 PAPER prog(34):BORDER bordwid,prog(30):CLS 10210 END DEFine draw_win 25000 DATA 'Left margin',23,1,255 25010 DATA 'Right margin',25,1,255 25020 DATA 'Tab distance',27,1,255 25030 DATAöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö(Â`˙ڌ5| J 2gWg UgSg Yg\ˆšČnä`,TˆŅ˜`ô2<`2<1A˙ūTˆ"Ō€ÁJ-QgÁ Á`Î%L˙øNu m,mJmXk:r˙t˙pNAGúü"JgGúü\xz(ĘÄÚŽ006Xj a-ˆX`ÖÛT‹R fÜNur˙v KpNBJ€fÖÛv˙p'NCp(NCp)NCJ€NuHįđ&-Dg2Cõ8 &)˙øgHį˙ūNą8Lß˙#|˙ø&)˙ügEņ8a@g&)˙ôfÎLßJ@Nuagô`ėHį0 iJûf&)RgGņ8Eëag&fđrLß NuTŠ2<a gTŠ2< aNu6g0t°f0Hį, SB  ēfQĘ˙îLß4WŠÔŌ$ pNuJ@NuLß4ÔÂ`ŧHį"n8v˜Ųî °6ČgP‰ŗîcęLßrųNuRŒ2SA&H6Č  ´fÖRŒQÉ˙ęLß26˜$6˜pNu-OôHz pĢ LpËLpŨLpŪLpßLpøLpųLq 0Lq;ILq„ĢLr/5LrdLre5LršLrŗLrÅLrÜLrđLs!Ls/"LsQ LsqLs‡Ls—!Ls¸!LsŲLsõ!LtLt+1Lt\LttLt‰Lt§LtŊLtŅLtæLtū0,3 25150 DATA 'HELP file name',42,0,0 at corresponds to the address of the fonts in use on the specified channel. The second parameter must be 1 for the first font address or 2 for the second, there are two fonts used on each channel. If the result is negative then it will be a normal QDOS error code. The channel must be a CON_ or a SCR_ channel to avoid errors.6. QDOS ERROR CODESMany of the above functions return a valid result, such as an address, or a negative error code. The QDOS error codes arLuLu2"LuTLujLu…LuœLuļLuĪLuŪLuõLv Lv%Lv;LvPLvoLvŒLvĻLv§Lv¨*LvŌLv͌Lw_Lw`ĮLx'Lx(LyˇLy¸ŊLzuLzvL|†L~L~ÔLëLė;L ‚'L‚(L‚öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö)L‚GL‚HRL‚šL‚›L‚°L‚ĮL‚ČL‚ā5LƒxLƒOLƒÜ]L„9+L„dL„eL„fLPW, NW and DW commands added (move to previous word, move to next word- September 1988h><ŌR0 '1;E'1;E '1;E'1;EL Låg<p5site to the POKE_STRING command described above and equivalent to the followiööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööng SuperBasic function :2700 DEFine FuNction PEEK_STRING(addre Q E D ===== QL Text Editor Copyright  1988 Jan Bredenbeek Hilversum, Holland Cursor movement Delete --------------- ------ ŧ Ŋ Character CTRL ŧ Ŋ Character SHIFT ŧ Ŋ Word CTRL SHIFT ŧ Ŋ Word ALT ŧ Ŋ Start/End line CTRL ALT ŧ Line ž ŋ Line CTRL ALT Ŋ to End of le listed below for reference.-1 Not complete-2 InvaCú 4xNŌ ‚Q_PIPEBQJ QR.QPļQ_CURSON¤ Q_CURSOFFTQ_ERR_ONę Q_ERR_OFFĐ Q_ERR_LIST˛Q_MYJOB–Q_ERR n0p(Āö˜TIŅĀNu4xN’f2g0aâ&6ˆk,Umf"26˜ū˛v˜oaĘ(HAúr˙pNBJ€f-ˆČNupņNupúNuPIPEap`apv˙NCNu(MģËg*J6¸j$Kë4xN’&M*Lf06˜Āü( n0ĐĀ vˆNup`ėr4xN’"nXU‰-IXpNA=˜xpNua>f vģĖga"pNANua*f a4k"p NANupņNu&M*L4xN’f66˜NuXNuģËoˆ(MzKëJ6¸g0pĀ6¸SgJ4xN’ff66˜(6˜pNA hhåK 00kN$@`ine SHIFT ž ŋ Page ALT ž ŋ Scroll CTRL ž ŋ Search backward/forward Single-key commands ------------------- TAB Tabulate ESC Undo changes on current line F1 Help F2 Re-execute last command line F3 Enter command line SHIFT F3 Edit last command line F4 Change Insert/Overwrite mode F5 Redraw screen Extended commands ----------------- A/s/ Insert line after current line B Move to bottom of file BE Mark block end BF/s/ Backwards find string BS ‚06¸kBįHĐŽ&@"n t46¸ĶÂ6˜Cé`4xN’f:6˜T‰pNA&(l hhxXˆR„ąÃfpūNu,kđ$FÔün ZJûfäēZfāHį@t 6˜‚€˛fR‰SEfėPHD$F8*HDpNuLß `°p+v˙NCNuaūŽ.xģËga˙fŪ GraāCúb4xĐN’raŌ*"HÁpaæ"$$HpNAJ€fĒÅH,(HÂ"paÆJ†f/pNA"(’¨ _`"*˙˜‚ü HÁH@J@gRpa–CúōaŪr 0*˙ŦjrSR@grWarajr*˙Ģpana^rQ j,m j,or aNaFJ†f Cúâaš` jJûf Cę4xĐN’a(J„f˙@a /pNA _paCúœabpNur `r pv˙NCNuHįđ"OQt?BAHA‚ü 02‚ü HA0R‚2HAJfÜ"/g’‚o < R‚SAföv˙pNCPLßNu Mark block start CE Cursor to end of line CL Cursor one position left CR Cursor one position right CS Cursor to start of line D Delete current line DB Delete block DC Delete character under cursor DW Delete word right from cursor E/s/t/ Exchange into EQ/s/t/ Exchange but query first F/s/ Find string I/s/ Insert line before current IB Insert copy of block IF/s/ Insert file J Join current line with next M n Move to line N Move to next line NW Move to next word P Move to previous line PW Move to previous word Q Quit editor without saving text R/s/ Re-enter editor with file RP Repeat until error RT Return to last line (max. 3x) S Split line at cursor SA/s/ Save text to file (or default file) SB Show block SH Show current editor status SL n Set left margin at SR n Set right margin at ST n Set tab distance to T Move to top of file ÂMáMâMã!M``<`øÔ)8`$˜`\@Q_Liberator Runtimes Release 3.36mod  1992 Liberation Software CON_512x050a00x206CON_252x200a258x01CON_252x200a002x01CON_448x040a32x216CON_448x200a32x016CON_448x200a32x016CON_480x36a016x1604xN’få‹g׎X/6˜Lö?ū˜pņNuCALLCú24xN’AúūÜ-HėpAú˙æ‘Îa,J€fAú˙ē-ˆ˜Cúū֑Č`!ūļQ_L,L؎„BœšÄmúF‰-D-D ˜Ž-DX-D\Aúū|-Hė - Ѝ-@˜-@¤0|,ˆ-HĐí4-H-H04-2SBv(r˙-ˆ=ŧPTY/s/ Type string U Undo changes on current line WB/s/ Write block to file X Exit, writing text back a more efficient method of finding out the details for a particular file rather than calling all the various FILE_XXXXX functions. Each of these call the READ_HEADER routine.To extract data, use PEEK for byte values, PEEK_W for the filename length and version number (if level 2 drivers are present, see LEVEL2 above), or PEEK_L to extract 4 byte data items.The filename can be extrˆ ŅÃQĘ˙ō-H4-H8ŅÎ-HøĐí<0kJGōWf k P" aųĐ kaųē`žSf +k @¸€fz`aųŽ6™'Y`ŧ6™'YŌŲ`˛Jk gT‰ YD(YNu&ĩÃg,&j˙đ nü (ZgŅĀ0k227˛'˛`ęĮŠaööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööėĀ0kd&CÖĀ.%4%UgHk(įJ0@g6•'G2 `Ö"+6•'G% `Æ kŗČe o¸ˆgJg JSkaøä` kaøė6•'G`˜ g(@"eNu"e,˙˙ `f00/gUef#3x`3x` /g#x` #3x`x=DĀ|`īnaųĀ8aųēÉQ:üNuaųŽ8aų¨‰Q:üNuaųœ8aų–šQ:üNuaųŠFQ:üNuaų&:(aųJEfJ„gJYfJ™gR`XX‰`TBQBŠ:üNuaøø:(aøđJEfJ„gŌ\‰`0aøāJYfJ™g$`X‰`aøÎ:(aøÆJEfâJ„fŪ`ĻBa:üNu3<:üNua*gō`ča$fė`âanæ`Üamā`ÖalÚ`Đa oÔ`Ę~agĖ`Â~0%gh4%Uejg fŗINu f8*`XaøT8*aøL0"JkJ…k$°Df Gg 0|€ŌˆÚˆBB˛…ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööf|` vgü` Yvf0;0BNû@ŗÍdė|.nôNu|`öJg g šîŦgšî°fXNu.‰`¸R.l`ŧ|l`´ VZ˙ō˙øēô€ŦâĘōōōōōōōōōōōđĒžĖöä\n€’Ŧū$*06<B \âæ ¸îô Ęp ° Ļ Ē v d l ¤ |V$ €˙ÎnFúLf .  B Jh˜ †dž–Ōčōö| ĒŒö nϞ˂vtD&T žÎj† 4dv0|`gWgn| `|"`|(G`ūĘ(nđSŒ|!`ō2%Unga JYf*XL`ū”JQ\‰`ō0%UngTaėJYg XŒ`ūxJQ\‰`ō. ŲÔ`ūj. ØÔ`ūb. *Š$# Iô(ü`ūR. $# 3<€Iô(ü`ū@a4(PŲîü`ū4a((ØŽü# 3<€(D`ū a†. 0°\RD ENVIRONMENT VARIABLESA number of standard Environment Varia QLib_run v3.35mod ================= Eureka ! ¨a y est... QLiberator peut enfin profiter pleinement du traitement des erreurs. Deux petits POKE et adieux les vilains bogues ! La version "3.35mod" de QLib_run corrige deux bogues de la version 3.35 qui emp‘chait la rƒcupƒration du code d'erreur avec ERNUM (ce dernier ƒtait en fait ƒquivalent  ERLIN !). Elle remplacera avantageusement tnåHØĀŲÔ`ū ap0g nü"((gԈ A2°AoXˆ`ō. Nu|`ũđ&nü‹"+(g"×Á2 A˙˙fQ‹` "°nî—ü 2JANu$Gę˙ė`&@šÛg föra„&ˆ ĖBIô(ü`ũ†8`8,˙ũ *˙ėgũv @ k&@¸[fD# #33<€(K`ũX (`ØTI8 Y(YD˜ fĘ`ũ@4Gę˙ė* gũ2 @ k&@´SgGč`æ&E&¨raZ`ũ-Lđ(n `ũ-L (nđ`üö \Aôˆü-H `üčaūŪ0(˙ūj P` Xˆ0köR@jöŅîü\ˆ-H `ü . T€€ @ (Ę˙˙fŅĐ \f ü`PĮ`QĮ ĨgXaö:gLaî`:gB8HÄ$‰Å6HDģBjJDgØESCJf82„:ü`üTJCjėxJfėBQ#<@:ü`ü:|`üJ"% f$40ÅĀHBkJBfHB2‚T`oute version antƒrieure (compatibilitƒ ascendante totale). Mais en quoi consiste donc la correction de ces bogues ? Il faut tout d'abord savoir que ERLIN et ERNUM font partie intƒgrante du code de QLib_run (m‘me si vous possƒdez une version du QDOS qui intgre ces instructions, c'est le code contenu dans QLib_run qui sera exƒcutƒ !). Ceci permet de faire profiter les versions AH et JM du QDOS de ces instructions (du moins pour un programme compilƒ). De plus lorsque QLib_run renconüRBgōU‰`~"% g@Xa :(a#3`,2%UgjaN3*ü`ûâ#)3):Ũ`ûÔ~aŌ:ü*Ž“Î00xNŊÕfĶÎJ€fNu g|$`|%`|`û¤ažaÎ:üNuHį&<@4<aúLßaX @mTINu| `ûp2%Ug eTNuava6 @m:üT‰Nu:üX‰J`2HÁg 0<ãiS@`øp`â‘#3Nu0"@lp@D@āĄ"Nu"% f20ĶQiTNu2€U‰` gXXaä8&aÜ:ü4`H"% f20“QiTNu2€UI` gXaĒa8&až:ü4` ađT4&x0Bl2D@ @ m#C2‚Nu")J@gāĄdRxS@ngx˙0ԃ`& @ ld"J@gāĄdRxS@ngx˙0ŌŠi&g8tre une erreur, il stocke son code et le numƒro de ligne  laquelle elle s'est produite dans deux variables du pseudo-ent‘te Super Basic (pour assurer une parfaite compatibilitƒ, QLiberator crƒe ce pseudo-ent‘te qui contient l'ƒquivalent des variables Super Basic de l'interprƒteur). Ces deux variables doivent normalement (et par analogie au Super Basic des versions JS et au-del), se trouver aux offsets $C2 et $C6 par rapport  la base du job (dont l'adresse est contenue dans&փi4–„hքS@"t&åŖi"Bmâ‚fđ`â‘R@ g |î`ųöD@āĄp#A2€Nu2-˙ūUge 0lDQiNu2€aĖ:üJ)kNu2-˙ūUge 0DQiNu2€a¨:ü")Di Āfã‰SQlâBQ`â‰RQgSQr˙â‰#ANuaūvJgTkSgn`\JDfSˆ`TB]&Hra2#`Ä4:2 2 k\ @ EmSnJg2(#3:ü`ų P`Ung #:ü`øø0\ r€3:ü`øč0\ r€0#3:ü`øÔ|`øâ| `øÜ3.Ä`3.Æ`3:ü`ø˛0#3:ü`ø¤Ba#:ü`ø˜ LØÜ`a0n<.a&˜AjØAHÄ"x GJkaü`aøSDkp ĀQĖ˙üJƒo CaxNu&HSgz`X8:2@&r@ EdZŧ@Ug^et2%UnB2@g45ŧ@*+ le registre A6). $C2(A6) est un mot long contenant le code de la dernire erreur et $C6(A6) est un mot contenant le numƒro de ligne. Or la version 3.35 de QLib_run stocke le code d'erreur sur un mot long en $C4(A6) et le numƒro de ligne en $C6(A6) sur un mot. Rƒsultat: le mot de poids faible du code d'erreur est ƒcrasƒ par le numƒro de ligne (le mot de poids fort contenant toujours $FFFF pour une erreur QDOS) ! Donc, non seulement le code d'erreur n'est pas stockƒ au bon endroit, Jga$6Ų&Ų#aüŌ0&Ų6ĀaüČ6Ų&Ų`÷î2%UnJaR6™`÷ÜSn S8+`˙F2%UgaŪ6Ų&™`÷ŧ| `÷Ė* aBnJ…k E˛PgaĘa %ˆ@NuJ…köˈaļˈ`ėa~`æHį@€a`Hį@€aLßNu0ÁJg ˇČdÖÁąËd ĐÁSA#QÉ˙üNu–ÁSAÛQÉ˙üNu2%Una°0\ŧ€ r€0™`÷02%Uga>0\ŧ€ r€0Ų Ų`÷Hįpp`HįppT^ø0|rp /NA"J€g aœgä| `öøLßŅÎNur˙HįpprŌPal"jÄ`æ kr2(åI\AHį0paRLß NuHį(j˙ø&JˇĘg0 @,l @gP‹`ęLßNu +kđ @ P" aĀ BaŽ` +kÜ @ap˙%@`БÎ^ø2|rp NANu/ nüt4(6´e"`ag"af ĶŽÔRnÎaĀpLßJ€Nut˙/mais en plus il est irrƒcupƒrable (m‘me par une extension "maison") ! D'autre part et pour tout arranger, le "ERNUM" de QLib_run allait chercher le code d'erreur en $C6(A6) sur un mot, renvoyant en fait le numƒro de ligne... Le remde consiste donc  modifier les instructions incriminƒes pour les forcer  ƒcrire et lire le code d'erreur au bon endroit. Le petit programme Super Basic suivant permet de rƒaliser ces modifications: 100 REMark Charger QLib_run en mƒmoire:pNA"J€Nuaaúô"HįpaäLßf˙"`úļ2%Ugm`ú´/a _a˙NuJgđRf48` 48p0 Y`p Y0‘ΓÎHį0.ۈ4BN’Lß ˆĶÎJ€g|`õŦ2%Uk gú Nu/a `ĻJgöRf48`ē48`Ŧ2%gHUe6g08ō`08đ V“ÎHį 4@N’ĶÎ&V‘Ë"×ÎLßaū6aũžGč NuRf&Y2HÁpNu&Y K2HÁ Nu2&YHÁp˙Nux`x~`x~˙r6\×ĘWg|`õ6å‰\$+k/ B P" aū Baū"aũē'HGđz7a˙$0JĮf R@@˙ū7T@`7R@ĘĀSCgHEJEfHE`Ô|`ôĸ,˙ũ7Jg څSg څڀ"Xaũ` Á'[â‰BXQÉ˙üNu-nøĘ*É nø Ė Í-Hø`ôHBÜ:ü˙˙B`ôH0Aō:Š:ÅWg æH:Ā*č`ô(B] ( 110 L=10552:REMark L=10624 pour QLib_run v3.36 120 AD=ALCHP(L):LBYTES "flp1_QLib_run",AD 130 : 140 REMark Placer $C4  l'offset $0D10: 150 POKE_W AD+3344,196 160 : 170 REMark Placer $C2  l'offset $146E: 180 POKE_W AD+5230,194 190 : 200 REMark Sauver la nouvelle version de QLib_run: 210 SBYTES "flp1_new_QLib_run",AD,L:RECHP AD 220 : 230 REMark C'est tout ! j*Ā`ô&@r2+å‰\aüė*ČâIS0ÛQÉ˙ü`ķúz˙2%g4UeT‚:Á:Å*É`ķԂ:Á:ü˙`˛aū”aū€2<‚:Á:Å*Č`ķ° Y`ėr4<02f$“ÁŗÍeķĻA IGō0Ā0Ķ6‚X‹ Ķ0ÁBP&ˆNur"aØ„Nur 4<`Ä6T×Ę#+336ŧp˙'@`ķRx:<`x:<~`x:<~˙r&å‰\6\×Ę?/+6…aūR#33,˙ū`ķ (vr@ԃԃ“ÁŗÍd`ķ ĶÁz˙3 nø&`Yˆ-HøJƒg*ģËfB]p˙:Ā*Ā0\3ŅĘ460‚XˆX‹$ “&ÂSfÖģËg(]JUkU`ō0%gė mWg Udāaûž`ÚaûĘ`Ô#3`ō†r2$2j ‚˙˙˙˙g2 e# B*‰NĐ|ô`ōr“ÎQ‰-IX nø&`Yˆ-Hø*ŽHį<—ΛÎ-I\~ BN*Lß<@ŊÕg| `ō:aL2,˙ū2 f4  T. Godefroy. 1991 ° Gą Gš Gēæ G  GĄ Gē Gģ> Gų Gúl Gf Gg G{ G|[ G× GØ GŲ" Gû GüÎ GĘ IËę Iĩ Iļ Iˇ Iš IŲ IÚc I= I> IH IR I[ I\k IĮ IĶę˙ü(D" 6k "A0s0Ņë˙ü´fė°fæSfö5ƒP`Ė|(Nu*_pNu&,Hpr˙t(“ÉNAJ€gNu.Eč˙˜%L<0üNų Ė\Œp"0ÜU@nú"j\## # #pNAJfB‘#3<˙˙%I\v"p t NApv˙r˙NAJŽTg "jXJ)ØgZjNu(i”PŒ, ģËg(gWg ląü˙˙˙˙g0a<4x N’J€f*P‹PŒ`Ô(Fx8,Āg  l f Pap"NANup˙/aō Nu"nXUg(n224VAū’ÁEé=‚˜âIUAk"=˜¨TJQÉ˙ø`]I-˜˜=˜` Sf UI=˜-IXNu2 P`ēInit missing! Q_LIB Error  Line Job Retry Continue Abort R/C/A Data : Stack : Internal During WHEN  No stack leftSlice not allowed intern flag, checksig in progress * * word activ set when signalhandling, cleared by signal(), * sigaction(), sigreturn() * to avoid handler beeing reset to old * long uval NULL or *uval[nsigs+1], stored# * long block block this signals * long pending mask of # signals * long resethandler # if han Array not allowed No heap space Variable undefined $OverflowString too longArray too bigArray not DIMedIndices wrong#Index out of range%Division by 0String is not numericCannot retry/contUnresolved reference RETurn missing in function!Out of DATA in READ"GO TO out of range&For type error'Overlay table full(Global missing˙˙the setting that is current at the SuperBasic level. STANDAdling 1of these .. *** * and its defines hc_nsigs equ 6 .l hc_curr equ 10 .l hc_def equ 14 .l hc_samask equ 18 .l *hc_protid equ 22 .w *hc_protlev equ 24 .l hc_stackid equ 28 .w hc_stack equ 30 .l hc_priid equ 34 .w hc_prio equ 36 .l hc_scinf equ 40 .l hc_sigvec equ 44 .l *hc_chlev eqNuJ…k Dü NuDüNu¸@fę`Ô*p˙4%`zxJBft˙Rf()`()`UdRf&Y2`2&YRf Y0`0 YHįl"K‘ΓÎGņEđJ.Ųg(8xæKė x@â—âTFDØüLâ_dØü z <<\N­˙î`xâœU8xæNŦ˙ú$Lß6pJ„g Daö‚J…g EaöxJ‚Nu4&r  g BkBĢNu|&`íD0\ŅĘ (&@Xkg0%ĐeĐe\M f00ŧ`0Ug(a÷h7Ya÷`7Ya÷X06€AëJkjR``0ŧaöč7Y 'YaöÜ7Y 'YaöĐ86„*'E"+0+ `H:&rP'L K2Pg02kĐA°PnZ6€. ŲÔ`ė~ĐA°Plđ`H4&#3gLaņō0"8*~J+k"aū"e$f6ë &Ģ . ŲÔNu6Ä&é˙ü. ŲÔNuaūeîgŪp0+. ŲĀŲÔNu\‰`î. 4&r Čč I° Ią I˛) IÛ*********************************************************************** * Signal Extension *  Richard Zidlicky *********************************************************************** * Changes * ^^^^^^^ * v 0.12 : * - first testing done by KP Greiner * - included with APL11 interpreter * v 0.24 : * - first real release * - added timers * - added %CSG handler to get Unix like behav&+gę(CWLNuaö–.(* aöŒ&$ŌDi6aôæ#B]0ÁS‚kÛQĘ˙üSDk&EÛQĖ˙üJƒo CaôđJ‡o GaôæNu|`ëĖaöD/(* aö:/JAg0JDg& ˜e E؈$ԋa>g¸ˆlø~`.R‹´‹ga*gö G&C`â~`ž…3:ü o @aô„ o @aôzNu Zn Am  Zn Am ˛Nuaõ8aõ°.ÉAHÁaô 0SDk&f#B]0ÁgSAūâI0ĀQÉ˙üJ‡o GaôNu|ņ`ęøaõp3:üJ€o @aķöNuaõZJAgær`āaõ&8raķĒ#B]0Á„Nuaõ?aBjJz:j:` ēSo @f>:šAj @f2REg `,RE @fB]&H"aķ\#aōîNu:ü#3Nu|`|`|`ęZaôŦ?aŪję(:j:`ēSnāšAj @fÖaôŽ.`REaiour easier * - added sigvec interface for maintaining %CSG handler, * sigcleanup(),sigraise(),sigaction(),sigprocmask(),sigpending() * - send/receive message now basic mechanism for communication * with signal device (io_sstrg and io_edlin traps) * - changed signal numbering in signal.h to match at least * some of the signals defined in X/OPEN 87 * v 0.25 : * - fixed bug in sub_penq * v 0.26 : * - fixed bug in insert_event, repoô¤. D’Ek2aō–J‡o Gaķ"Nu8ŌEaō‚p ĀRDkú`âSf˜8jx¸AnŽ:-j:ēAn‚SDšDc˙|HÅØ‹NuaB>-˙ūgSgd22&YaÄ#3Nu&Y2a¸"aōÉ‹aōBm˙ū#RfU„ D`ō¨Nu|Nux6ÖC2%WgRaķÖ:™SCfîNux0\ŅĘ (j|`2&@Wg6: Ef&SDf&aķ 2g˛SnAķz˙x0<JNu|#`é,|`ø|`ô:g6v¸Cf0 [ļ[f(2%Unaķ`0kа[nĖHĀЀSēf"ЀЁŅĀJNu]‹6a˙Z2 [>$ 0kĸ°[nžĀÛրSAfđ˜Gg RDf˜8So.`ŒSkgփ g` փր`2-˙ūfz`UƒRƒz˙xY‹ŅÃ*BJNuRLaūđ0\ŅĘ:&h Elx EfdSfd40jp°Bn\r2-k˛Bo2S@’@mHÖĀaņ ađ¨0<€,˙ü:Ā:ü˙˙*Črted by Phil Borman * v 0.27 : * - rewrite of checksig()/raise() * - bug fixes for defering * - added system default handlers/table * - preparing new features, more error checking * v 0.30 : * - removed some experimental features, mainly ring protection * scheme * - added emulated unix system call handling and coresponding * sigvec calls * - changed sigvec calls to always apply to job's own sighandler, * usefull `č r ađü:<Š,˙ü:ÅB]*Č Ëp0Ā0Ä0Ā`įū|`|`|`įö/ /v4~ VŅÎ0jp2k˛[nŪ`2’@eÖÁĶրJAf Bf EoT‹`0Á0ÛRGSBfSDg`ĒSDfž ÛRGSBføPÄ0SegSfpÆĀ`ÖC`Jf:<RƒJfRA1A˙ü֟*_JGf, EfLx&Cr ađ6:<Š,˙ü:ÅB]*Č Ëp0Ā0Ä0Ā`į8"å‰\ađŠ,˙ü:ÅB]*Č Ã0Į&V×Î ÛSGfú`įEŠ,˙ü:Å4,˙ūæJ:Â*Ã`æú,aŒCú*an a`8AīJPj4aâPf*Aī6afra@ @f.|˙Ø nä"p NA`aŽ``aâfĻAī6aŪa aäÎ.‰F‰AîLØ6aæNFˆAî Hāl*nüJg kT m8fL|x-PgŦaâ`0-FÄJ.Økā|+Ørp NApv˙r˙NA`ör˙for threads and shared libraries * - added message to allocate and init handler '%CSG' * *********************************************************************** * structure of signal handler : simple case * $00 word $4afc * $02 long '%SIG' magic * $06 long sighnd pointer to handler routine or NULL * $0a long stackmin no interrupt if sp < stackmin * $0e long priority *** * and the coresponding defines tp PîŠNAQîŠ.‰`Ša¤ S€*š­ ačgCúTava‚r.lgavJjŒ2$42"n ŌÂĶÎta6a(JĒ˙čjCú^a4 aV ôg’Cú aaR_ Rg Cg& AfæaÖ`d .Ęf .ø$@(Z-L˜-Zœ-JøaŽ|.‰`ūĖCúžaÎ"aØaĒCúôkg°föfüga€`ögäjúCúēaša|*nč*UCú’aˆ"-8aŪ".ÔaÖ2.Îa€Cú|ah$n¨&n &-Lt0kaéÜpNu l0ŅĖ"l4ĶĖ$n0ÕÎ&n4×Îr(JPkp $ØQČ˙üŗČgˇĘfėNuĐÁÔÁ`đ"UJŽTfD nø&`ģËg*-˙ųp @fYˆ-HøHį|aLß>(Yaī`āė*ŠHįD*LØ­ AõH/&nčr °g PKQÉ˙ö&nčGë€rJ“g$QKQÉ˙ø|'`āÄ +g$@aŨPa>(_Lß"`íˆ/ "-H’­8’­LaęnaŨR&_&Í-Mü&Šra˙a2gÆ(_Lß"`āx *˙đg(@&mZ×Í0k225´%´`ęNu nč(X&X*-ZgLڍ(,Zg>،%K˙đ/ *E:k42rPstacks * word pri_id ** 0 : priority ** 1 : *priority[MAXSIZ+1] * long (*)pristruct([]) priority(ies) * long *scinf system call emulation stuff * long (*sigvec)() pointer to interface routine * *** some status info * word void * was cprotlevel * * byte deffer intern flag, defered signal * byte ixx it for job sgn_sus equ 3 ; suspension sgn_raise equ 4 ; raise() ed signal * rest of structure is undefined for raised signals svb.fs1 equ $6 ; 2 svb.sgn specific longwords svb.fs2 equ svb.fs1+4 svb.d4 equ svb.fs2+4 ; saved registers svb.d5 equ svb.d4+4 svb.d6 equ svb.d5+4 svb.a4 equ svb.d6+4 svb.a5 equ svb.a4+4 svb.a7 equ svb.a5+4 svb.sr equ svb.a7+move.l a0,a4 ; arg for _send_msg suba.l a5,a5 moveq #1,d3 bsr _send_msg ; ... send the signal cmpa.l #0,a5 beq scerr_spur ; pretty bad ... addq.w #MT_TIMER,msg.type(a0) subq.l #ml,a0 move.l ml.nxt(a0),ch_events(a5) ; unlink move.l msg.t_int+ml(a0),d0 ; interval timer ? 4 svb.ret equ svb.sr+2 svb_len equ svb.ret+4 *** extended handler sigcontext *** * struct sigcontext / esvb used for %CSG handlers * * svb.* ; same as above esvb.oblock equ svb_len ; block mask to restore esvb.ohand equ esvb.oblock+4 ; handler to restore or 0 esvb.signr equ esvb.ohand+4 esvb.hstruct equ esvb.signr+4 ; pointer to handler struct esvb.uval equ esvb.hstruct beq.s scnoint move.l d0,msg.t_ticks+ml(a0) ; new tick count move.l a0,a4 clr.w d7 ; no response ! bsr insert_event ; insert time sorted scfe: bsr find_next_event ; reschedule bra.s rsched ; more pending events? scnoint: move.l a3,a4 move.w mm.rechp,a2 jsr (a2) move.l a4,a3 br+4 esvb.d0 equ esvb.uval+4 ; saved compiler scratch registers esvb.d1 equ esvb.d0+4 esvb.d2 equ esvb.d1+4 esvb.a0 equ esvb.d2+4 esvb.a1 equ esvb.a0+4 esvb_len equ esvb.a1+4 * shadow definitions for cint_ret hack esvb.ret equ esvb_len-4 esvb.sr equ esvb.ret-2 *********************************** * temporary storage block for cseval and do_int tmp.htype equ 0 ; type of handler tmp.ha.s scfe * now check for channels that require expiring QDOS calls rsc: move.l dev_joblist(a3),d0 beq.s rtss rscl: move.l d0,a5 tst.w ch_ispf(a5) beq.s rsclnx bsr.s qexpire rsclnx move.l ch_nxtch(a5),d0 bne.s rscl rtss: ***** movem.l (a7)+,d3-d7/a3-a5 rts qexpire: subq.w #1,ch_ispf(a5) bne.s rtsc addq.w #1,ch_ispf(a5) u 48 .w * unused hc_defer equ 50 .b hc_ixx equ 51 .b hc_activ equ 52 .w hc_uval equ 54 .l hc_block equ 58 .l hc_pend equ 62 .l hc_reset equ 66 .l hc_len equ 70 ** total 70 ** *********************************************************************** * messages for communication with signal device * * internal link block ml.nxt equ equ $08 * private variables in channel definition ch_nxtch equ $14+4 ; next receiving in ll ch_sigh equ ch_nxtch+4 ; pointer to handler struct ch_events equ ch_sigh+4 ; ll of timer events ch_ispf equ ch_events+4 ; scheduler loop flag ch_alloc equ ch_ispf+2 ch_len equ ch_alloc+2 ERR.NC equ -1 ERR.NJ equ -2 ERR.OM equ -3 ERR.OR equ -4 ERR.NO 4 ; ml equ 8 ; link block size * message header definition msg.magic equ 0 ; '%MSG' msg.len equ 4 msg.type equ 8 ; message type * MT_SIGNAL equ 0 MT_TIMER equ 1 MT_HINIT equ 2 ; alloc and init handler msg.txi equ 10 ; .w timer info (unit),0=ticks,1=secs * ; hinit: HI_PR | HI_UV | HI_SYSC msg.jobid equ equ -6 ERR.NF equ -7 ERR.IU equ -9 ERR.BN equ -12 ERR.BP equ -15 ERR.XP equ -17 ERR.NI equ -19 ERR.BL equ -21 *********************************************************** * dev init code SECTION TEXT install: moveq #dev_size,d1 moveq #sms.achp,d0 clr.l d2 trap #1 tst.l d0 bne.s exi 12 ; .l * for signal and timer types msg.signr equ 16 ; .l msg.prio equ 20 ; .l msg.uval equ 24 ; .l * sigmsg_len equ 28 msg.t_evid equ 28 ; .l timer event id, 0 reserved, 1=alarm, msg.t_ticks equ 32 ; .l send signal after ticks units msg.t_int equ 36 ; .l interval timer if <>0 tmsg_len equ 40 * for hinit command msg.hi_nsigs equ 16 ; nr of signals to ht_ini move.l a0,a4 lea sched,a1 move.l a1,dev_scadr(a0) lea poll,a1 move.l a1,dev_pladr(a0) lea open,a1 move.l a1,dev_open(a0) lea io,a1 move.l a1,dev_io(a0) lea close,a1 move.l a1,dev_close(a0) clr.l dev_joblist(a0) ; (-$18) init joblist clr.l dev_nxevent(a0) clrandle - 0== simple handler msg.hi_stack equ 20 ; reserve some place himsg_len equ 24 msg_maxlen equ tmsg_len msg_minlen equ himsg_len * SIG_IGN equ 0 SIG_DFL equ 1 * priority: WFJOB equ %111000000000 ; mask interrupt if waiting for job SUSP equ %000000111000 ; trap#1 WFIO equ %000111000000 ; trap#3 NORM equ %000000000111 ; .l dev_nticks(a0) lea dev_link(a0),a0 moveq #sms.liod,d0 trap #1 tst.l d0 bne.s exit_ini lea dev_scblk(a4),a0 moveq #sms.lshd,d0 trap #1 lea dev_plblk(a4),a0 moveq #sms.lpol,d0 trap #1 suba.l a0,a0 lea init_text,a1 move.w ut.wtext,a2 jsr normal execution * optional flags for: * priority_s: DF_WIO equ %10000000000000 ; defer if waitiong for io DF_SUSP equ %1000000000000 ; suspended DF_WJOB equ %100000000000000 ; waiting for job *SIGPG equ %1000000000000000 ; send to process group * priority_r: *PGROOT equ %1000000000000 ; root of process group * priority: mask of reserved bits P_RES_R equ ^(NORM+SUSP+WFIO+WFJOB) P_RES_S equ ^(DF_WIO+DF_(a2) exit_ini: rts version equ '0.30' init_text: dc.w ite-itsst itsst dc.b 'Signal extension v0.30, ' dc.b ' Richard Zidlicky',10 ite: ds.w 0 *********************************************************** * devdriver code ****************** * poll routine : dev_gticks++, if dev_nticks!=0 then dev_nticks-- poll: addq.l #1,dev_gticks(a3) tst.l dev_nticks(a3) beq.s rtpoll SUSP+DF_WJOB+NORM+SUSP+WFIO+WFJOB) *********** * stackframe of saved context (struct SIGSVB ) * used for %SIG handler svb.finish equ $0 ; pointer to interrupt cleanup routine, * usualy called by rts svb.sgn equ $4 ; .W : 0 normal, 1 io-susp, 2 waitforjob * * 3 susp sgn_nrm equ 0 ; normal sgn_ios equ 1 ; io suspension sgn_wfj equ 2 ; wa subq.l #1,dev_nticks(a3) rtpoll: rts ****************** * sched routine : send signal if dev_nticks==0 && dev_nxevent!=0 sched: **** movem.l d3-d7/a3-a5,-(a7) rsched: tst.l dev_nticks(a3) bne.s rsc tst.l dev_nxevent(a3) beq.s rsc move.l dev_nxevent(a3),a0 addq.l #ml,a0 move.l #'%MSG',msg.magic(a0) clr.w msg.type(a0) ; just a signal equ job.d3+4 job.d5 equ job.d4+4 job.d6 equ job.d5+4 job.a0 equ $40 job.a1 equ job.a0+4 job.a2 equ job.a1+4 job.a3 equ job.a2+4 job.a4 equ job.a3+4 job.a5 equ job.a4+4 job.a6 equ job.a5+4 job.pc equ $62 job.sr equ $60 job.sp equ $40+7*4 job.a7 equ job.sp * Signal device offsets dev_plblk equ $8 ; poll link *************************** open: move.l a0,a2 move.l d1,d7 ; save jobid move.w (a2)+,d2 ; check name move.l (a2)+,d1 andi.l #UCMASK0,d1 cmp.l #'*SIG',d1 bne.s err_nf move.l (a2)+,d1 andi.l #UCMASK1,d1 cmp.l #'NAL_',d1 bne.s err_nf bra.s nm_found dc.w 6 block dev_pladr equ $c dev_scblk equ $10 ; sched link block dev_scadr equ $14 dev_link equ $18 dev_io equ $1c dev_open equ $20 dev_close equ $24 dev_joblist equ dev_close+4 ; ll of signal-recving channels dev_nxevent equ dev_joblist+4 ; ptr to next timer event dev_nticks equ dev_nxevent+4 ; #ticks till next event dev_gticks equ dev_nt dc.b 'SIGNAL' nm_found: subq.w #8,d2 beq.s err_bp blt.s err_nf subq.w #1,d2 bne.s err_bn move.b (a2)+,d1 andi.b #$df,d1 cmp.b #'S',d1 ; send only beq.s o_send_sig cmp.b #'R',d1 ; send & receive beq.s o_sr_sig ; init signal handler err_bn: moveq #-12,d0 rts eicks+4 ; global tick count dev_scratch equ dev_gticks+4 dev_size equ dev_scratch+48 * trap #3 interface SEND.SIG equ $2f ; old call SEND.MSG equ $7 SR.MSG equ $4 INFO equ $3 UCMASK0 equ $ffdfdfdf UCMASK1 equ $dfdfdfff * Channel block definition ch_driver equ $4 ch_jobwt equ $14 ch_actn equ $13 ch_tag equ $10 ch_stat equ $12 ch_ojob rr_nf: moveq #-7,d0 rts err_bp: moveq #-15,d0 rts err_iu: move.w mm.rechp,a2 jsr (a2) ; release memory moveq #-9,D0 rts * open send/receive o_sr_sig: move.l d3,d5 ; save ihptr beq.s o_send_sig ; no address, maybe later andi.b #1,d3 bne.s err_bp ; uneven address move.l addr equ tmp.htype+4 ; ptr handler routine or cntxt tmp.stack equ tmp.haddr+4 ; stackbottom tmp.prio equ tmp.stack+4 tmp.imode equ tmp.prio+4 ; interrupt mode (syscall) tmp.force equ tmp.imode+2 ; syscall mode tmp.sregs equ tmp.force+2 ; flag, ignore blocking tmp_size equ tmp.sregs+3*4 ; space for 3 saved regs * tmp.imode : IM_NORM equ 0 ; normal interrupt IM_EXP equ 1 ; make lea 0-tmp_size(a7),a7 move.l a7,a2 ; alloc tmp struct move.l ch_sigh(a5),a4 cmpi.l #'%CSG',h_type(a4) bne.s uqx move.l hc_scinf(a4),d0 beq.s uqx move.l d0,a1 cmp.w #SCS_EXP,sce.stat(a1) bne.s uqx move.l sce.pend(a1),a1 tst.l (a1) beq.s uqx move.l ch_ojob(a5),d1 QDOS calls expire IM_BLOCK equ 2 ; simply block it IM_LJMP equ 3 ; longjmp to tmp.haddr=si_retcntx ** * emulated system call stuff * * struct SYSCE, * * word stat SCS_NOSYS,SCS_ATOM,SCS_EXP * long *link link to higher level SYSCE * long *pend signals received here * * long a3-a7,PC longjmp context *sce.id equ 0 sce.stat equ 2-2 sce.nx equ 4-2 sce.pend equ move.l d1,d4 move.l #%01001001,tmp.prio(a2) ; fake, priority move.l #%11011011,d6 ; already tested bsr getjbasea0 tst.w d0 ; debug only, shouldn't happen bne.s uqbj move.l hc_scinf(a4),a1 move.l job.a7(a0),d0 ; check stack, debug only cmp.l sce.a7(a1),d0 bcc.s uqbs bsr sub_penq 8-2 sce.cntxt equ 12-2 sce.a3 equ sce.cntxt sce.a4 equ sce.a3+4 sce.a5 equ sce.a3+8 sce.a6 equ sce.a3+12 sce.a7 equ sce.a6+4 sce.pc equ sce.a7+4 sce_size equ sce.pc+4 * SCS_NOSYS equ 0 SCS_EXP equ 1 SCS_ATOM equ 2 * ****************************************************************** * * QDOS system definitions * TRAP3 equ $4e43 ; opcode SUPER equ tst.w d0 ble.s urqx ; error or nothing to do bsr sub_sysci addq.w #4,ch_ispf(a5) ; avoid infinite timeout loops bra.s urqx uqx: clr.w ch_ispf(a5) ; condition gone urqx: lea tmp_size(a7),a7 rtsc: rts uqbj: suba.l a0,a0 clr.l dev_nxevent(a3) lea sbj_txt,a1 move.w ut.wtext,a2 jsr (a2 $2000 ; s-bit in sr ** signals that need special attention SIGILL equ 4 SIGSEGV equ 6 SIGBUS equ 7 _SIGFTX equ (1<<(SIGILL-1))+(1<<(SIGSEGV-1))+(1<<(SIGBUS-1)) SIGKILL equ 9 *SIGTERM equ 15 NOBLOCKMASK equ ^(1<<(SIGKILL-1)) ; can't block this NOCATCH equ SIGKILL EINTR equ -1 ; frjob return code sgn_def equ 100 ; intern define * Trap #1 keys sms.info equ ) bra.s urqx sbj_txt: dc.w sbje-sbjs sbjs: dc.b 'signal extension: bad job in scheduler loop' sbje ds.w 0 uqbs: suba.l a0,a0 clr.l dev_nxevent(a3) lea sbs_txt,a1 move.w ut.wtext,a2 jsr (a2) bra.s urqx sbs_txt: dc.w sbse-sbss sbss: dc.b 'signal extension: bad stack in scheduler loop' sbse ds.w 0 * should not really happen, $00 ; get system INFOrmation sms.achp equ $18 ; Allocate Commaon HeaP mt.alchp equ sms.achp sms.lpol equ $1c ; Link in POLled action sms.lshd equ $1e ; Link in SCheDuler action sms.liod equ $20 ; Link in IO Device driver * Vectors mm.alchp equ $c0 mm.rechp equ $c2 ut.wtext equ $d0 ; Write TEXT vector * System Variables sv_jbpnt equ $64 ; current JoB P uncomment for debuging: scerr_spur: clr.l dev_nxevent(a3) ** bra rsc suba.l a0,a0 clr.l dev_nxevent(a3) lea scerr_txt,a1 move.w ut.wtext,a2 jsr (a2) rts scerr_txt: dc.w scete-scets scets: dc.b 'signal extension: timer ll corruption',10 scete ds.w 0 getjbasea0: moveq #0,d0 move.w d1,d0 asl.l oinTer sv_jbbas equ $68 ; JoB Table Base sv_jbtop equ $6c ; JoB Table Top sv_chmax equ $72 sv_chbas equ $78 ; CHannel Table Base sv_chtop equ $7c ; CHannel Table Top * Jobheader Offsets job.stat equ $14 job.tag equ $10 job.wflag equ $17 job.wjob equ $18 job.d0 equ $20 job.d1 equ job.d0+4 job.d2 equ job.d1+4 job.d3 equ job.d2+4 job.d4 #2,d0 move.l sv_jbbas(a6),a0 adda.l d0,a0 moveq #ERR.NJ,d0 cmpa.l sv_jbtop(a6),a0 bcc.s gjb_bj tst.b (a0) ; job removed ? bmi.s gjb_bj move.l (a0),a0 ; get jobheader swap d1 cmp.w job.tag(a0),d1 bne.s gjb_bj swap d1 clr.l d0 gjb_bj rts *************** lea dev_joblist-ch_nxtch(a3),a1 ; adjust to "last" ptr cll: cmp.l d1,a0 beq.s eclsf move.l d1,a1 move.l ch_nxtch(a1),d1 bne.s cll cret movem.l (a7)+,d4-d7/a4-a5 rts ; not in list ?? eclsf: move.l ch_nxtch(a0),ch_nxtch(a1) ; unlink channel bsr find_next_event ; reschedule events ecls: dbra d0,icrl move.l a1,hc_samask(a0) adda.l d1,a1 move.w msg.txi(a4),d2 btst #0,d2 ; uval array ? beq.s hnu move.l a1,hc_uval(a0) adda.l d1,a1 hnu btst #1,d2 ; priority array ? beq.s hnuex move.l a1,hc_prio(a0) move.w #1,hc_priid(a0) adda.l d1,a1 hnuex: * now link into lis* tst.w ch_alloc(a5) * beq.s clna * move.l ch_sigh(a5),a0 ; return handler if allocated * suba.l #12,a0 * move.w mm.rechp,a2 * jsr (a2) clna move.l a5,a0 ; return chdef block movem.l (a7)+,d4-d7/a4-a5 move.w mm.rechp,a2 jmp (a2) ; return memory and rts ********** io: cmp.b #SEt of receiving channels move.l a0,ch_sigh(a5) st.b ch_alloc(a5) move.l dev_joblist(a3),ch_nxtch(a5) move.l a5,dev_joblist(a3) clr.l d0 bra sm_ret * subr: a4 msg-4, a3 dev_df a5 ch_def d7 flag -> copy old event to (a1),d6 len * signr==0 : cancel previous event insert_event: tst.w msg.txi+ml(a4) ; unit? beq.s cticks move.w ticks_per_second,d0 ND.SIG,d0 ; old entry point? beq send_sig moveq.l #0,d7 moveq.l #0,d6 and.l #$ffff,d1 and.l #$ffff,d2 cmp.b #SR.MSG,d0 beq.s sr_msg move.l d2,d5 ; length cmp.b #SEND.MSG,d0 beq.s send_msg cmp.b #INFO,d0 beq.s info_msg moveq #-15,d0 rts err_m_or: moveq move.l msg.t_ticks+ml(a4),d1 bsr mul16x32 move.l d1,msg.t_ticks+ml(a4) move.l msg.t_int+ml(a4),d1 bsr mul16x32 move.l d1,msg.t_int+ml(a4) cticks: move.l dev_gticks(a3),d0 add.l d0,msg.t_ticks+ml(a4) ; form now on move.l msg.t_evid+ml(a4),d1 lea ch_events(a5),a2 ; 'previous' iltev: move.l (a2),d0 beq.s ins #-4,d0 rts * io_fstrg : write out struct SIG_INFO info_msg: moveq.l #12,d0 move.l d0,d1 cmp.w d0,d2 bcc.s iic move.l d2,d1 iic: move.l d1,d0 imc: lea dev_scratch(a3),a4 move.l #version,(a4)+ move.l dev_gticks(a3),(a4)+ lea c_sigvec,a5 move.l a5,(a4) subq.l #8,a4 subq.w #1,d0 imcc: rt move.l d0,a0 ; search for old entry cmp.l msg.t_evid+ml(a0),d1 ; event id beq.s rmv_oldevent lea ml.nxt(a0),a2 bra.s iltev rmv_oldevent: move.l ml.nxt(a0),(a2) ; unlink tst.b d7 beq.s nmcp ; no response wanted lea ml(a0),a2 move.l dev_gticks(a3),d1 sub.l d1,msg.t_ticks(a2 a3,a5 ; save move.w mm.alchp,a2 move.l #ch_len,d1 jsr (a2) tst.l d0 bne.s rtfo lea dev_joblist-ch_nxtch(a5),a1 ; adjust to "previous" loop: move.l ch_nxtch(a1),d0 beq.s eloop move.l d0,a1 cmp.l ch_ojob(a1),d7 ; max one handler per job! beq.s err_iu bra.s loop eloop: move. sm_ret * alloc & init handler, add to list * chan a0 must be owned by msg.jobid & must be only one used as handler * hinit: cmp.w #MT_HINIT,msg.type(a4) bne.s err_msg_ni cmp.l #himsg_len,msg.len(a4) bcs.s err_nomsg * now check that owner of a0 is msg.jobid cmp.l ch_ojob(a0),d1 bne.s msgerr.bj * check that no handler for this job exists move.l a0,a1 bsr fjhand tst.l l a0,ch_nxtch(a1) init_ch move.l d5,ch_sigh(a0) * clr.l ch_nxtch(a0) * clr.l ch_events(a0) * clr.w ch_ispf(a0) ; no pending signals moveq #0,d0 ** now check whether handler is '%csg', if so init some values move.l d5,a1 cmp.w #$4afc,(a1) bne.s rtfo ; should really give some warning cmp.l #'%CSG',h_type(a1) bne.s rtfo le d0 bne.s msgerr.iu ; job already has an handler move.l a1,a0 * compute space required addq.l #1,msg.hi_nsigs(a4) ; all arrays dim(NSIG+1) !!!!! move.l msg.hi_nsigs(a4),d0 beq.s msgerr.or ; hook in '%SIG handler' bmi.s msgerr.bp cmp.l #32,d0 bhi.s msgerr.or moveq.l #8,d1 ; x size (current+samask) a c_sigvec,a2 ; vector for clib calls move.l a2,hc_sigvec(a1) * clr.l hc_block(a1) ; mm.alchp clears it * clr.l hc_pend(a1) * clr.w hc_defer(a1) rtfo: rts * open send only o_send_sig: move.l #ch_len,d1 move.w mm.alchp,a2 jsr (a2) * clr.l ch_sigh(a0) ; mm.alchp clears it * clr.l ch_nxtch(a0) * clr.l ch_events(a0) bra.move.w msg.txi(a4),d2 beq.s hnsys ; no extras btst #0,d2 ; HI_UVAL ? beq.s hiuc addq.l #4,d1 hiuc btst #1,d2 ; HI_PRIO ? beq.s hiuc1 addq.l #4,d1 hiuc1 mulu d0,d1 add.w #hc_len,d1 ; add basic size * btst #2,d2 ; HI_SYSC ? * beq.s hnsys * s rtfo ****** close: movem.l d4-d7/a4-a5,-(a7) move.l a0,a5 tst.l ch_sigh(a0) beq.s ecls ; send only, no unlink needed move.l ch_sigh(a0),a1 cmp.l #'%CSG',h_type(a1) bne.s cevnt clr.w hc_activ(a1) ; still could be inside handler clr.l h_type(a1) * cancel all ch_events, free their memory cevnt: move.l ch_e addi.w #sce_size,d1 hnsys: move.l a0,a5 ; save channel addr movem.l d2/a1-a3,-(a7) ; check mask move.l msg.jobid(a4),d2 moveq.l #mt.alchp,d0 trap #1 movem.l (a7)+,d2/a1-a3 tst.l d0 bne.s msgerr.om * setup handler move.l a0,a1 move.w #$4afc,(a1)+ move.l #'%CSG',(a1)+ move.l msg.hi_vents(a0),a4 cmpa.l #0,a4 beq.s unlink clr.l ch_events(a0) move.l a3,d4 l_rm: move.l a4,a0 move.l ml.nxt(a0),a4 ; next move.w mm.rechp,a2 jsr (a2) ; release mem cmpa.l #0,a4 bne.s l_rm cl_erm: move.l d4,a3 move.l a5,a0 unlink: move.l dev_joblist(a3),d1 beq.s cret nsigs(a4),(a1) subq.l #1,(a1) move.l msg.hi_stack(a4),hc_stack(a0) * now set all arrays and extras move.l a0,a1 move.l msg.hi_nsigs(a4),d1 move.l d1,d0 asl.l #2,d1 ; size X adda.l #hc_len,a1 move.l a1,hc_curr(a0) subq.l #1,d0 moveq.l #SIG_DFL,d2 icrl move.l d2,(a1)+ ; default all handlers tst.w d0 bne.s sm_ret csam: subq.l #ml,a4 ; point to linkage block tst.l msg.signr+ml(a4) beq.s mscnt ; cancel request; dont alloc move.l msg.len+ml(a4),d1 addq.l #ml,d1 ; extra space for link pointer move.w mm.alchp,a2 jsr (a2) tst.w d0 bne.s sm_ret addq.l #ml, MOVE.W D0,D1 * + LSW -> d1 SWAP D1 DIVU d2,D1 MOVE.W D1,D0 * division result -> d0 SWAP D1 EXG D0,D1 <--> * rest -> d1 RTS * a3 device def. block find_next_event: suba.l a1,a1 moveq.l #-1,d0 ; unisgned, max tick count moveq.l #0,d4 move.l dev_joblist(a3),a2 a0 addq.l #ml,a4 move.l msg.len(a4),d2 move.l a4,a1 move.l a0,a4 ; save addr of block subq.l #1,d2 cpymsg: move.b (a1)+,(a0)+ dbra d2,cpymsg subq.l #ml,a4 ; point to msg-4 * a4=lmsg, a3=dev, a5=chdef mscnt: movem.l (a7),d1-d2/a0/a1/a3 bsr insert_event movem.l (a7),d1-d2/a0/a1/a3 bsr find_next move.l a2,d3 beq.s fnele fnel1: move.l ch_events(a2),a0 cmpa.l d4,a0 beq.s fnel1nx ; no events for this channel move.l msg.t_ticks+ml(a0),d1 cmp.l d0,d1 bcs.s fnnm fnel1nx: move.l ch_nxtch(a2),d3 beq.s fnele move.l d3,a2 bra.s fnel1 fnnm: move.l a0,a1 ; new ticks-min mo_event ; reschedule events clr.l d0 ; no error sm_ret movem.l (a7)+,d1-d2/a0/a1/a3 tst.w d0 bne.s srs move.l d6,d1 ; msg.len or old msg.len sr1: adda.l d1,a1 ; behave like a real io.sstrg sr2: rts ; or io.edlin srs: tst.w d7 bne.s sr1 rts msgerr.ni: err_msg_ni: moveqve.l d1,d0 bra.s fnel1nx fnele: move.l a1,dev_nxevent(a3) sub.l dev_gticks(a3),d0 bcc.s fnnz ; >=0 clr.l d0 fnnz: move.l d0,dev_nticks(a3) rts *** getjobid: move.l a4,-(a7) move.l sv_jbpnt(a6),a4 move.l a4,d1 sub.l sv_jbbas(a6),d1 asr.l #2,d1 swap d1 move.l (a4),a4 #ERR.BN,d0 bra.s sm_ret msgerr.bp: err_nomsg: moveq #ERR.BP,d0 bra.s sm_ret msgerr.bl: err_blmsg: moveq #ERR.BL,d0 bra.s sm_ret msgerr.bj: moveq #ERR.NJ,d0 bra.s sm_ret msgerr.iu: moveq #ERR.IU,d0 bra.s sm_ret msgerr.or: moveq #ERR.OR,d0 bra.s sm_ret msgerr.om: moveq #ERR.OM,d0 bra.s move.w job.tag(a4),d1 swap d1 move.l (a7)+,a4 rts ***** * d1=jobid, d2.l=interruptnr, d3=tmout, a1= priority, a2=usr_value * * verify jobid, find handler, send signal(s) send_sig: move.l a2,d7 ; save uval lea -tmp_size(a7),a7 move.l a7,a2 tst.l d1 bpl.s checkjob ; bsr.s getjobid ; remove when removing $2 move.b (a4)+,(a1)+ dbra d0,imcc clr.w d0 rts _send_msg: movem.l d1-d2/a0/a1/a3,-(a7) bra.s _sxmg * io_edlin parameters sr_msg: suba.l d1,a1 ; start of message st d7 ; flag: return value wanted move.l d1,d5 ; actual length * io_sstrg parameters send_msg: lea dev_scratch(a3),a4 moveq #) ; remaining time tst.w msg.txi(a2) beq.s nocnv move.w ticks_per_second,d2 move.l msg.t_ticks(a2),d1 ; convert rest time bsr.s udiv32x16 move.l d1,msg.t_ticks(a2) * tst.l d1 * bne.s cnvnz * moveq #1,d1 ; must be at least '1' *cnvnz: move.l d1,msg.t_ticks(a2) * move.l msg.t_int(a2),d1 * bsr.s udiv32x16msg_maxlen-1,d4 move.l a1,a2 smcpm: move.b (a2)+,(a4)+ ; copy to scratch to insure dbra d4,smcpm ; word alignment lea dev_scratch(a3),a4 tst.b d7 bne.s _smsg move.l msg.len(a4),d6 ; len for io.sstrg return _smsg: movem.l d1-d2/a0/a1/a3,-(a7) cmp.w #msg_minlen,d5 ; too short bcs err_nomsg move * move.l d1,msg.t_int(a2) nocnv: tst.l msg.t_ticks(a2) ; must return at least 1 unit bne.s nznc addq.l #1,msg.t_ticks(a2) nznc: move.l msg.len(a2),d6 subq.l #1,d6 move.l #'%MSG',msg.magic(a2) ; return with correct magic cpml: move.b (a2)+,(a1)+ dbra d6,cpml ; and copy return msg into buffer move.l msg.len+ml(a0),d6 nmcp: move.w.l msg.len(a4),d4 cmp.w d4,d5 ; complete msg must be in buffer bcs err_nomsg cmp.w d4,d2 bcs err_nomsg _sxmg: cmp.l #'%MSG',msg.magic(a4) bne err_blmsg move.l msg.jobid(a4),d1 bpl.s snn bsr getjobid ; -1 ->current move.l d1,msg.jobid(a4) snn: tst.w msg.type(a4) ; signal ? mm.rechp,a2 move.l a3,-(a7) jsr (a2) ; free mem move.l (a7)+,a3 insrt: tst.l msg.signr+ml(a4) ; BUGFIX, insrt label moved beq.s ievret ; return, was a cancel/info request lea ch_events(a5),a2 ; now insert into time sorted list move.l msg.t_ticks+ml(a4),d1 istev: move.l (a2),d0 beq.s link_in move.l bne.s set_alarm movem.l d6/d7/a1,-(a7) move.l msg.signr(a4),d2 move.l msg.jobid(a4),d1 move.l msg.uval(a4),a2 move.l msg.prio(a4),a1 bsr send_sig movem.l (a7)+,d6/d7/a1 bra sm_ret set_alarm: cmp.w #MT_TIMER,msg.type(a4) bne hinit cmp.l #tmsg_len,msg.len(a4) bcs err_nomsg moveqd0,a0 cmp.l msg.t_ticks+ml(a0),d1 bcs.s link_in lea ml.nxt(a0),a2 bra.s istev link_in: move.l a4,(a2) move.l d0,ml.nxt(a4) ; next event pointer clr.l ml+msg.magic(a4) ; clear magic to keep ievret rts ; clean heap entry mul16x32: move.l d1,d2 clr.w d2 swap d2 mulu d0,d2 #0,d2 ; signr := test move.l msg.jobid(a4),d1 movem.l d6/d7/a4,-(a7) move.l msg.prio(a4),a1 bsr send_sig ; test job and handler movem.l (a7)+,d6/d7/a4 move.l d1,msg.jobid(a4) ; real jobid if jobid=-1 movem.l (a7),d1-d2/a0/a1/a3 * a5= chdefbl for jobid cmp.w #-20,d0 beq.s csam ; ignore low priority swap d2 ; ignore overflow clr.w d2 mulu d0,d1 add.l d2,d1 rts *div16x32: * divu d0,d1 * andi.l #$ffff,d1 * rts * unsigned div d1/d2; 32/16 * result ->d1, rest ->d0 udiv32x16: MOVEQ #$00,D0 SWAP D1 MOVE.W D1,D0 DIVU d2,D0 * MSW/d2 SWAP D0 * rest 0<> if successfull fjhand: move.l dev_joblist(a3),d0 fjlll beq.s fjret ; not found move.l d0,a0 cmp.l ch_ojob(a0),d1 beq.s fjret ; found move.l ch_nxtch(a0),d0 bne.s fjlll fjret rts *** * rearange registers * from now: d6 priority, d4 jobid, d5 signr, a5 chdefbl * later a0 jobbase found: move.l a1,d6 ; save priority simpleframe suba.l #esvb_len,a1 bra.s cofr simpleframe: suba.l #svb_len,a1 ; adjust to frame cofr: cmpa.l tmp.stack(a2),a1 ; enough stack for interrupt? bcs.s err.nostack ; blt move.w d0,svb.sgn(a1) ; set frame type move.l d1,svb.fs1(a1) move.l d2,svb.fs2(a1) rts err.nostack: addq.l #4,a7 moveq #-3,d0 ; move.l d1,d4 ; jobid move.l d2,d5 ; signalnr clr.w tmp.force(a2) move.l ch_sigh(a5),a4 * see whether emulated syscall in progress and set flags bsr chk_ssc * now handle the different jobhandlers fnss: cmp.w #$4afc,(a4) bne ix_bl cmp.l #'%SIG',h_type(a4) bne try_csig *** * * '%SIG' specific * move.l err.om bra end sub_sysci: cmp.w #sgn_wfj,d0 bne.s cssci move.l d2,a3 clr.b job.wflag(a3) cssci: move.w #1,job.stat(a0) rts sub_chaddr: move.l tmp.haddr(a2),d3 ; extra check for ignore/default beq.s cha_ign ; ->ignore moveq #1,d0 cmp.l d0,d3 ; =1 ? beq.s disysd ; -> SIG_DF h_type(a4),tmp.htype(a2) tst.l d5 ; signr==0 beq.s test_ok bmi ix_ni ; signr<=0 ?? move.l d6,d0 andi.l #P_RES_S,d0 ; some unimplemented bits ? bne ix_ni move.l hs_prio(a4),tmp.prio(a2) tst.w tmp.imode(a2) bne.s ssic move.l hs_handler(a4),tmp.haddr(a2) beq ix_nc moL and.l d0,d3 ; uneven address ? bne.s cha_bl bra.s cha_ret * do system default action disysd: cmp.b sysdeftab,d5 bcc.s cha_ign lea sysdeftab,a3 move.b 0(a3,d5.w),d0 beq.s cha_ign dik: lea killjob,a3 move.l a3,tmp.haddr(a2) cha_ret: clr.l d0 rts cha_ign: moveq.l #ERR.NC,d0 rts cha_bl: moveq.l ve.l hs_stackmin(a4),tmp.stack(a2) ssic bsr sub_penq * do_int | set job_stat&do_int | err_nc | err_smp * if d0=sgn_def : clr d0, just proceed * if d0<0 : bra end, error * if d0>=0 : do_int cmp.w #sgn_def,d0 beq.s cd0 tst.w d0 bmi end nxi movem.l d0-d2,tmp.sregs(a2) bra do_int cd0: clr.l d0 bra.s nxi test_ok: clr.l d0 bra end #ERR.BL,d0 rts * main entry point do_int: tst.w tmp.imode(a2) bne.s diisysc ; insides syscall special treatment bsr.s sub_chaddr ; check handler address cmp.w #-1,d0 beq.s eret ; ignore blt.s end ; other error movem.l tmp.sregs(a2),d0-d2 bsr setupframe tst.w d0 ble********************* * '%CSG' specific * subroutine to check blocking conditions and evaluate * handler information cseval: cmp.l #'%CSG',h_type(a4) bne cse_err.ni move.l h_type(a4),tmp.htype(a2) move.l hc_stack(a4),tmp.stack(a2) cmpi.l #32,d5 ; signr>32 ? bhi cse_err.ni cmp.l hc_nsigs(a4),d5 bhi cse_err.or tst.l d5 .s csdi bsr.s sub_sysci ; interrupt system call csdi: move.l job.pc(a0),svb.ret(a1) ; save PC move.w job.sr(a0),svb.sr(a1) ; save SR move.l job.a7(a0),svb.a7(a1) ; for REQSIGSTACK move.l job.d4(a0),svb.d4(a1) ; save D4-D6 move.l job.d5(a0),svb.d5(a1) move.l job.d6(a0),svb.d6(a1) move.l job.a4(a0),svb.a4(a1) f checkjob: movem.l d1/a0-a1,-(a7) ; d1=jobid move.l d1,d4 beq ix_bj ; don't send signal to job 0 bsr getjbasea0 tst.w d0 bne ix_bj check_d3: tst.l d3 beq.s oj ; is it current job ? * search for handler roj: move.l a0,a5 bsr.s fjhand move.l d5,job.d4(a0) move.l d7,job.a4(a0) move.l d5,esvb.signr(a1) move.l d7,esvb.uval(a1) move.l d2,d5 move.l d0,d7 bsr.s is_blocked ; mark old as pending movem.l tmp.sregs(a2),d0-d2 bsr sub_sysci bra test_ok cs_def: clr.l d0 tst.w tmp.imode(a2) bne cs_doint ; exg.l a5,a0 ; a5 chdef, a0 jobbase tst.l d0 beq ix_nf bra.s found oj: move.l sv_jbpnt(a6),a4 ; BUGFIX ?? cmpa.l (a4),a0 bne.s roj tst.l d2 beq.s roj ; only testing job & handler bra ix_nc *** * a5 chdef, sets tmp.imode, tmp.force chk_ssc: clr.w tmp.imode(a2) cmpi.l don't set defer flag! tas.b hc_defer(a4) ; defer max one bne.s cs_blocked movem.l d0-d2,tmp.sregs(a2) bra cs_doint cs_blocked: bsr.s is_blocked bra test_ok suval: move.l d0,a3 move.l d5,d0 asl.l #2,d0 move.l d7,0(a3,d0.l) bra.s ib1 is_blocked: move.l hc_uval(a4),d0 bne.s suval ib1: #'%CSG',h_type(a4) bne.s rnss move.l hc_scinf(a4),d0 beq.s rnss move.l d0,a1 move.w sce.stat(a1),d0 ; ATOM=IM_BLOCK & NOATM=IM_EXP beq.s rssc * these signals get special treatment cmp.b #SIGSEGV,d5 ; signr<=32!, lazy eval beq.s cssf ; hard exception cmp.b #SIGILL,d5 beq.s cssf cmp.b #SIGBUS,d5 moveq.l #1,d0 move.l d5,d2 sub.l d0,d2 asl.l d2,d0 or.l d0,hc_pend(a4) ; mark pending bra.s csdone ; no further action needed default: move.l hc_def(a4),d1 beq.s sysdefl move.l d1,a1 move.l 0(a1,d2.l),d0 beq.s ignore ; SIG_IGN bra bch sysdefl: moveq #SIG_DFL,d0 bne.s nelj cssf st.b tmp.force(a2) moveq #IM_LJMP,d0 lea sce.cntxt(a1),a3 move.l a3,tmp.haddr(a2) ; longjmp ctxt rssc move.w d0,tmp.imode(a2) rnss rts nelj: cmpi.b #IM_BLOCK,d0 beq.s rssc addq.w #1,ch_ispf(a5) ; set expire flag bra.s rssc *** * find jobs receiving channel,a3 devdriver, d1 jobid * returns a0 channel def block, d bra bch ignore: moveq.l #1,d0 sub.l d0,d5 ; reset pending asl.l d5,d0 ; sigmask not.l d0 and.l d0,hc_pend(a4) csdone: moveq.l #-1,d0 rts ************************ * now do the software interrupt * * subr, alloc stack frame and store context info on stack setupframe: move.l job.a7(a0),a1 cmp.l #'%CSG',tmp.htype(a2) bne.s bra.s csp * mangle tmp.prio : always apply #NORM while in emulated syscall pmng: moveq.l #0,d0 move.l d1,d0 andi.w #%111,d0 andi.l #^(WFJOB+WFIO+SUSP),d1 asl.w #3,d0 add.w d0,d1 asl.w #3,d0 add.w d0,d1 rts try_csig: move.l d6,d0 andi.l #P_RES_S,d0 ; any unimplemented bits ? bne ix_ni cmp.l bra.s srt ix_nc moveq #ERR.NC,d0 bra.s srt ***************** * sub_penq : check if job can be interrupted * returns d0, d1=svb.sf1, d2=svb.sf2 * d0 = sgn_def : defer after syscall * d0 = -1 : err_nc * d0= -20 : error, priority to small * d0 >= 0 : interrupt syscall sysc_def equ $1000 sub_penq: move.w job.sr(a0),d0 andi.w #SUPER,d0 ; job in sv mode? #'%CSG',h_type(a4) bne ix_ni tst.w hc_priid(a4) bne.s rpri move.l hc_prio(a4),tmp.prio(a2) csp: tst.w tmp.imode(a2) beq.s cscp move.l tmp.prio(a2),d1 bsr.s pmng move.l d1,tmp.prio(a2) move.l d6,d1 bsr.s pmng move.l d1,d6 cscp: bsr sub_penq tst.w d0 b bne.s ret_nc ; must wait move.l tmp.prio(a2),d3 ; required priority andi.l #P_RES_R,d3 ; some unimplemented features ? bne.s ret_ni move.l tmp.prio(a2),d3 move.l d6,d0 ; priority of interrupt tst.w job.stat(a0) bne stnook ; test some conditions andi.w #NORM,d3 andi.w #NORM,mi end ; priority too small ? movem.l d0-d2,tmp.sregs(a2) ; save results.. bsr cseval cmp.w #-1,d0 beq test_ok ; report sucess blt end ; report error tst.b hc_ixx(a4) bne cs_blocked ; checksig in progress sxcc movem.l tmp.sregs(a2),d0-d2 cmp.w #sgn_def,d0 beq.s cs_def tst.d0 cmp.w d3,d0 ble ret_smp ; priority too small clr.l d0 clr.l d1 clr.l d2 rts ret_nc: moveq.l #-1,d0 rts ret_ni: moveq.l #-19,d0 rts wj: andi.w #WFJOB,d0 andi.w #WFJOB,d3 cmp.w d3,d0 bgt.s wji move.l tmp.prio(a2),d3 ; required priority to signal move.w d6,dw d0 bgt.s cs_sstat cs_doint: bra do_int cs_sstat: tst.b hc_defer(a4) beq.s cs_doint bsr sub_chaddr ; test handler address cmp.w #-1,d0 beq test_ok blt end ; error * now reuse frame of defered signal: * doesn't need special handling for INSYSCALL since nothing gets deferred * while INSYSCALL clr.b hc_def0 move.w d6,d1 andi.w #DF_WJOB,d1 bne ret_def ; defer signal after job released bra ret_smp * deal with jobs waiting for another job * first find that other job: wji: move.l sv_jbbas(a6),a1 ; base of jobtab move.l sv_jbtop(a6),d3 ; top jslo cmp.l a1,d3 bcs.s ret_errbj move.l (a1)+,a3 move.l a3,d0er(a4) move.l job.a7(a0),a1 move.l tmp.haddr(a2),(a1) ; substitute new handler lea 4(a1),a1 ; addr of frame to be reused movem.l tmp.sregs(a2),d0-d2 move.w d0,svb.sgn(a1) move.l d1,svb.fs1(a1) move.l d2,svb.fs2(a1) move.l esvb.signr(a1),d2 ; get old values move.l esvb.uval(a1),d0 move.l tmp.prio(a2),job.d5(a0) bmi.s jslo tst.b job.wflag(a3) beq.s jslo cmp.l job.wjob(a3),d4 beq.s jobfound bra.s jslo ret_errbj: moveq.l #ERR.NJ,d0 rts ; shouldn't ever happen jobfound: move.l a1,d0 ; compute jobtable index sub.l sv_jbbas(a6),d0 asr.l #2,d0 subq.w #1,d0 ; sw ; signr==0 (test job&handler) beq csdone bmi cse_err.ni ; signr<=0 ?? move.l d5,d2 asl.l #2,d2 cmp.w #IM_LJMP,tmp.imode(a2) beq.s ljsm csfh: * default/current/ignored ? cmp.l #SIGKILL,d5 beq default ; ... always do default action move.l hc_curr(a4),a1 move.l 0(a1,d2.l),d0 ; current handler move.l job.a5(a0),svb.a5(a1) ; .... A4/A5 move.l d5,job.d4(a0) ; interrupt number move.l d7,job.a4(a0) ; usr val move.l d6,job.d5(a0) ; priority cmp.l #'%CSG',tmp.htype(a2) beq.s csg_setpc lea int_ret,a3 move.l a3,svb.finish(a1) move.l a1,job.a7(a0) ; adjust jobs SP beq ignore ; ignore signal cmp.l #SIG_DFL,d0 beq default bch: move.l d0,tmp.haddr(a2) ljsm: moveq.l #1,d0 move.l d5,d2 subq.l #1,d2 asl.l d2,d0 ; sigmask move.l d0,d3 ; save it for a moment tst.w tmp.force(a2) bne.s cseforce ; ignore any blocking and.l move.l tmp.haddr(a2),job.pc(a0) ; handler routine eret: clr.l d0 end: movem.l (a7)+,d1/a0-a1 lea tmp_size(a7),a7 rts diisysc: movem.l tmp.sregs(a2),d0-d2 bsr sub_sysci cmp.w #IM_LJMP,tmp.imode(a2) bne.s eret * now arrange for the longjmp(), cntxt addr in tmp.haddr move.l tmp.haddr(a2),job.a4(a0) ; pass pointer to hc_block(a4),d0 ; blocked? and.l #NOBLOCKMASK,d0 bne is_blocked cseforce: * check for syscall move.w tmp.imode(a2),d0 beq.s nssc move.l hc_scinf(a4),a3 move.l sce.pend(a3),a3 * *pend or.l d3,(a3) move.l hc_uval(a4),d1 beq.s csneret move.l d1,a3 move.l d5,d1 asl.l #2,d1 move.l d jmpbuf lea do_ljmp,a3 move.l a3,job.pc(a0) move.l d7,job.d4(a0) bra.s eret csg_setpc: lea cint_ret,a3 move.l a3,svb.finish(a1) ; cleanuproutine address move.l a4,esvb.hstruct(a1) ; some more info move.l d5,esvb.signr(a1) ; for handler restore move.l d7,esvb.uval(a1) ; and reset move.l tmp.haddr(a2),-(a1) 7,0(a3,d1.l) subq.w #IM_BLOCK,d0 beq csdone bra.s csneret nssc not.l d3 and.l d3,hc_pend(a4) ; delete any pending instances csneret clr.l d0 ; proceed rts cse_err.ni moveq #-19,d0 rts cse_err.or moveq #-4,d0 rts rpri: move.l hc_prio(a4),a1 move.l d5,d2 asl.l #2,d2 move.l 0(a1,d2.l),tmp.prio(a2) move.l a1,job.a7(a0) ; adjust SP lea ccal_setup,a3 move.l a3,job.pc(a0) ; wrapper for c68 calls clr.l d0 srt: bra.s end ix_nf moveq #ERR.NF,d0 bra.s srt ix_bl: moveq #ERR.BL,d0 bra.s srt ix_ni moveq #ERR.NI,d0 bra.s srt ix_bj moveq #ERR.NJ,d0 bra.s srt ix_or moveq #ERR.OR,d0 suspcheck cmp.l ch_jobwt(a3),d4 ; jobid matches? bne.s suspcheck cnfound: move.l tmp.prio(a2),d3 move.l d6,d0 move.l d6,d1 andi.w #WFIO,d0 andi.w #WFIO,d3 cmp.w d3,d0 bgt.s t3_int move.w d6,d1 andi.w #DF_WIO,d1 ; can it be defered ? bne.s ret_def bra.s ret_smp t3_int: move.l (a0),a0 move.l ch_driver(a0),a3 lea io,a2 cmp.l 4(a3),a2 ; is it really a signal_ channel? bne.s su_err.bp cmp.l ch_ojob(a0),d1 ; is it our channel ? beq.s svfch lea 0-$18(a3),a3 ; ... serach it bsr fjhand tst.l d0 beq.s su_err.no svfch: move.l ch_sigh(a0),a4 moveq.l #sgn_ios,d0 move.l job.a0(a0),d1 ; save chid clr.l d2 move.b ch_actn(a3),d2 ; save action rts suspcheck: move.l d6,d0 ; send priority move.l d6,d1 move.l tmp.prio(a2),d3 ; required priority andi.w #SUSP,d0 andi.w #SUSP,d3 cmp.w d3,d0 bgt.s cmpi.l #'%CSG',h_type(a4) bne.s su_err.bp * set scheduler flag; as it is in the ch def block it can be done in * supervisor mode only - doing it here saves from doing all consistency * checks twice. The scheduler will sort needs to check the flag anyway addq.w #1,ch_ispf(a0) move.w d7,sr ; return to normal state move.l a0,a5 asl.l #2,d4 jmp table(pc,d4.l) su_err.no move.w int_susp move.w d6,d0 andi.w #DF_SUSP,d1 bne.s ret_def ; defer signal after syscall bra.s ret_smp int_susp: moveq.l #sgn_sus,d0 clr.l d1 clr.l d2 rts ret_smp: moveq.l #-20,d0 rts ret_def: move.l tmp.prio(a2),d3 move.l d6,d0 ; priority of interrupt andi.w #NORM,d3 d7,sr bra sverr.no su_err.bp move.w d7,sr bra sverr.bp * a1 chdefblock table: bra sigcleanup bra sigact bra sigprocmask bra sigpending bra raise bra fraise bra checksig bra chprio bra dosyscall bra sysctl * sgv(chid,8,flags,&sctl,&sycfunc,argc,..) * PAR1 PAR2 andi.w #NORM,d0 cmp.w d3,d0 ble ret_smp ; too small even to defer moveq.l #sgn_def,d0 clr.l d1 clr.l d2 rts *********************************************************************** * interrupt setup, cleanup and longjmp routines * * standard cleanup, restores jobs stack, registers and sr flags * tested only on 68008 *int_ret: * lea -4(a7),a7 *_iret_: trap PAR3 PAR4 * : run sysfunc as emulated system call, * : return qdos error * flags: 0 : none so far * struct sctl{pend,rv} : pflag and return value sctl.ppend equ 0 sctl.rtval equ 4 dosyscall: * alloc and link in sysce struct move.l PAR1(a7),d5 ; any flags ? bne sverr.ni ; sorry, no flags so far cmpa.l hc_stack(a4),a7 #0 * move.l USP,a5 * move.l svb.a7(a5),a4 * move.l a4,USP ** if not g.o. 68000: move.w #0,(-a7) * exception format word * move.l svb.ret(a5),-(a7) * move.w svb.sr(a5),-(a7) * move.l svb.d4(a5),d4 * move.l svb.d5(a5),d5 * move.l svb.d6(a5),d6 * move.l svb.a4(a5),a4 * move.l svb.a5(a5),a5 * rte * old version, can't relocate stack, but then * it should w bcs sverr.om move.l hc_scinf(a4),d0 lea -sce_size(a7),a7 move.l a7,a1 move.l d0,sce.nx(a1) ; save link move.l sce_size+PAR2(a7),a2 clr.l (a2) move.l a2,sce.pend(a1) ; set pflag addr * set longjmp context lea dsljret,a3 move.l a3,sce.pc(a1) move.l a1,a3 movem.l a3/a4/a5/a6/a7,sce.cntxt(a1) ork on all 680x0 chips int_ret: lea -4(a7),a7 move.l svb.a5(a7),a5 move.l svb.a4(a7),a4 move.l svb.d6(a7),d6 move.l svb.d5(a7),d5 move.l svb.d4(a7),d4 lea svb.sr(a7),a7 rtr ; ccr restored, sr must be preserved ** return from C68 signal handler cint_ret: lea -4(a7),a7 ; adjust esvb frame * restore mask&handler move.l * link in move.w #SCS_ATOM,sce.stat(a3) move.l a3,hc_scinf(a4) * copy args, save registers for call move.l sce_size+PAR3(a7),a0 ; sysfunc() lea sce_size+PAR4(a7),a1 move.l (a1)+,d0 move.l d0,d1 asl.l #2,d1 suba.l d1,a7 move.l a7,a2 subq.l #1,d0 dscal move.l (a1)+,(a2)+ dbra d0,dscal * set syscall status, pending ap d0 move.w job.tag(a3),d0 swap d0 ; to get jobid * SAVE STATE INFO move.l d0,d1 ; save jobid move.l a3,d2 moveq.l #sgn_wfj,d0 rts t3: andi.w #WFIO,d0 andi.w #WFIO,d3 cmp.w d3,d0 bgt.s schan move.l tmp.prio(a2),d3 move.w d6,d1 move.w d6,d0 ,how,&omask,&mask) : sigprocmask(how,oset,nset), c/e block mask * sgv(chid,3,&mask) : sigpending() examine pending * sgv(chid,4,signr,uval) : raise() signr,uval * sgv(chid,5,signr,uval) : fraise() * sgv(chid,6) : checksig(), raise pending signals * sgv(chid,7,signr,&oprio,&prio) : c/e priority * sgv(chid,8,flags,&sctl,&sycfunc,argc,..) * flags: none yet : run sysfunc as emulated system call, * struct {pp;rval;} sctl andi.w #DF_WIO,d1 ; defer signal after completion bne ret_def bra ret_smp * try to figure out why job.stat is set and handle it stnook: cmp.w #-2,job.stat(a0) ; waiting for another job ? beq wj ; ... check if we should signal * ... assume WFIO and try to verify * by examining a0 schan: move.l sv_chbas(a6),a1 move.w 2+job.a0(a0),d0 ; chnr : return qdos error, actual return vale * : in sctl->rval * sgv(chid,9,flags) : syscontrol, set flags & return pflag addr * * MAXSIGV equ 9 PAR1 equ 12+52 PAR2 equ 16+52 PAR3 equ 20+52 PAR4 equ PAR3+4 c_sigvec: movem.l d1-d7/a0-a5,-(a7) ; (7+6)*4 = 52 move.l 52+8(a7),d4 ; opcode bmi svnoimp cmp.w #MAXSIGV,d4 cmp.w sv_chmax(a6),d0 bhi.s suspcheck asl.w #2,d0 ; *4 adda.w d0,a1 tst.b (a1) bmi.s suspcheck move.l (a1),a3 ; ch.defblock -> a3 move.w job.a0(a0),d0 cmp.w ch_tag(a3),d0 ; another channel with same bne.s suspcheck ; index in chan table? tst.b ch_stat(a3) bge.s bgt svnoimp moveq #sms.info,d0 trap #1 svc: move.l 52+4(a7),d3 ; channel move.l d3,d2 move.w sr,d7 trap #0 cmp.w sv_chmax(a0),d1 bhi.s su_err.no asl.l #2,d3 move.l sv_chbas(a0),a0 adda.w d3,a0 tst.b (a0) bmi.s su_err.no tst.b (a0) bmi.s su_err.no (a7),a5 clr.b hc_defer(a5) * now save compiler scratch regs movem.l d0-d2/a0/a1,esvb.d0+4(a7) move.l (a7)+,a0 ; handler address move.l a7,a1 ; esvb move.l a4,-(a7) ; usrval move.l d5,-(a7) ; priority move.l d4,-(a7) ; signr move.l a5,a4 ; not inside syscall move.l d0,a1 tst.w sce.stat(a1) beq sverr.bp move.l sce.pend(a1),d0 ; return value move.l PAR1(a7),d1 subq.l #1,d1 bhi sverr.ni bne.s dcstat move.w #SCS_EXP,sce.stat(a1) * move.l d0,a2 * tst.l (a2) ; anything pending ? * bne.s dcssf bra svret ; ptr to %CSG struct move.l d4,d0 ; signr asl.l #2,d0 ; *size addq.w #1,hc_activ(a4) ; handling in progress move.l hc_block(a4),esvb.oblock(a1) ; save procmask move.l hc_curr(a4),a5 move.l 0(a5,d0.l),esvb.ohand(a1) ; save handler move.l hc_samask(a4),a5 move.l *dcssf addq.w #1,ch_ispf(a0) ; set scheduler flag * bra svret dcstat move.w #SCS_ATOM,sce.stat(a1) bra svret * sgv(chid,7,signr,&oprio,&prio) : c/e priority * PAR1 PAR2 PAR3 chprio: move.l PAR1(a7),d5 beq.s scp tst.w hc_priid(a4) beq sverr.bp ; non matching cardinality cmp.l hc_nsigs(a4),d5 bcc 0(a5,d0.l),d1 or.l d1,hc_block(a4) ; new procmask moveq.l #1,d2 sub.l d2,d4 asl.l d4,d2 ; sigmask and.l hc_reset(a4),d2 ; reset handler? beq.s cssc lea hc_curr(a4),a5 move.l #SIG_DFL,0(a5,d0.l) ; reset it cssc: jsr (a0) ; call handler lea 12(a7sverr.or asl.l #2,d5 move.l PAR2(a7),d0 bne.s scsp move.l d0,a1 move.l hc_prio(a4),a2 move.l 0(a2,d5.l),(a1) ; set oprio scsp move.l PAR3(a7),d0 bne svzret ; done move.l d0,a1 move.l (a1),d0 andi.l #P_RES_R,d0 bne sverr.xp move.l (a1),0(a2,d5.l) bra svzret ),a7 rts * a4 -> lonjmp context, d4 uval do_ljmp: move.l a4,a0 move.l d4,d0 movem.l (a0)+,a3-a7 move.l (a0),a0 jmp (a0) ******************************************* * system default table used by sub_chaddr * known actions are * 0= ignore, 1= kill * signals>15 are ingored by default sysdeftab: dc.b 15 ; table length dc.b 1 ; SIGHUP dc.b 1 ; S scp tst.w hc_priid(a4) bne sverr.bp ; non matching cardinality move.l PAR2(a7),d0 beq.s scpno move.l d0,a1 move.l hc_prio(a4),(a1) ; set oprio scpno move.l PAR3(a7),d0 beq svzret move.l d0,a1 move.l (a1),d0 andi.l #P_RES_R,d0 bne sverr.xp move.l (a1),hc_prio(a4) bra IGINT dc.b 1 ; SIGQUIT dc.b 1 ; SIGILL dc.b 1 ; SIGPIPE dc.b 1 ; SIGSEGV dc.b 1 ; SIGBUS dc.b 0 ; SIGFPE dc.b 1 ; SIGKILL dc.b 1 ; SIGALRM dc.b 1 ; SIGABRT dc.b 1 ; SIGTRACE dc.b 0 ; SIGWINCHD svzret sigcleanup: *** clr.b hc_defer(a4) *** clr.b hc_ixx(a4) clr.w hc_defer(a4) ; instead of above clr.w hc_activ(a4) bra checksig SV_RESETHAND equ 1 sigact: move.l PAR1(a7),d0 move.l d0,d1 cmp.l hc_nsigs(a4),d0 bhi sverr.or move.l PAR3(a7),d2 ; old value of sigaction beq.s svnact move.l dc.b 0 ; SIGWMREQ dc.b 1 ; SIGTERM dc.w 0 * default handler special cases killjob: moveq.l #5,d0 moveq.l #-1,d1 moveq.l #EINTR,d3 trap #1 rts ******************************************* **** c-interface ** parameter passing through stack * sgv(chid,0) : sigcleanup() * sgv(chid,1,signr,oadr,nadr) : sigaction(signr,oadr,nadr) * sgv(chid,2 d2,a2 asl.l #2,d0 move.l hc_curr(a4),a3 move.l 0(a3,d0.l),(a2) ; sa_handler move.l hc_samask(a4),a3 move.l 0(a3,d0.l),4(a2) ; sa_mask clr.l 8(a2) ; sa_flags moveq.l #1,d3 sub.l d3,d1 asl.l d1,d3 and.l hc_reset(a4),d3 beq.s svnact move.l #SV_RESETHAND,8(a2) ; set reset handler esvb.hstruct(a7),a1 tst.w hc_activ(a1) ; sigaction() called beq.s noreset ; .. in the meantime ? subq.w #1,hc_activ(a1) move.l esvb.oblock(a7),hc_block(a1) ; restore mask move.l hc_curr(a1),a0 move.l esvb.signr(a7),d0 asl.l #2,d0 move.l esvb.ohand(a7),0(a0,d0.l) ; restore handler noreset: cmp.w #sgn_ move.l sce.pend(a3),a2 move.l sce.nx(a3),d0 beq.s pns ; nothing relevant pending move.l d0,a1 move.l sce.pend(a1),a1 move.l (a1),d0 pns: or.l d0,(a2) * call syscfunc, save retval jsr (a0) move.l sce.a7(a3),a7 dsljret: move.l sce_size+PAR2(a7),a1 move.l d0,sctl.rtval(a1) ; save return value(or uval) * restore sraise,svb.sgn(a7) ; gets raised anyway beq.s ncs ; no need for recursion movem.l d3/a2/a3/d7/a5,-(a7) move.l a1,a4 ; handler pointer bsr _checksig movem.l (a7)+,d3/a2/a3/d7/a5 ncs: movem.l esvb.d0(a7),d0-d2/a0/a1 ; restore scratch regs ** bra.s _iret_ ; requires stack relocation, not yet ** tested with all 680x0 chips, so use this hackome regs move.l a5,a0 move.l a3,a1 move.l ch_sigh(a5),a4 * get pending move.l sce.pend(a1),a2 move.l (a2),d4 andi.l #^_SIGFTX,d4 move.l sce.nx(a1),hc_scinf(a4) ; unlink, set flags! lea sce_size(a7),a7 ; dealloc sce struct * pass pending sigs back to user program or higher level call * except fatal signals beq.s dsnn move.l instead: move.l svb.a5(a7),a5 move.l svb.a4(a7),a4 move.l svb.d6(a7),d6 move.l svb.d5(a7),d5 move.l svb.d4(a7),d4 move.w svb.sr(a7),esvb.sr(a7) move.l svb.ret(a7),esvb.ret(a7) lea esvb.sr(a7),a7 rtr ; ccr restored, sr must be preserved ** wrapper to allow c-handlers * first 2 instructions critical ccal_setup: move.l esvb.hstruct+4 hc_scinf(a4),a1 move.l sce.pend(a1),a2 or.l d4,(a2) bra.s dret dsnn: or.l d4,hc_pend(a4) * return QDOS error dret bra checksig ; raise pending signals, return 0 * sgv(chid,9,flags) : syscontrol, set flags, return pflag addr * PAR1 : or error code * flags: expire 0x1 sysctl: move.l hc_scinf(a4),d0 beq sverr.bp m_mod move.l d0,a3 move.l hc_block(a4),(a3) spm_mod: move.l PAR2(a7),d0 beq.s sigvecret ; nothing to set move.l d0,a2 move.l PAR1(a7),d0 beq.s spm_block subq.l #1,d0 beq.s spm_unblock spm_set move.l (a2),hc_block(a4) bra.s sigpmret spm_block move.l (a2),d3 or.l d3,hc_block(a4) bra.s sigpmret sNŌ /g´~|˙˙‚˙˙ gJ* gH gpņNupüNup "´@d" Ië8(ü0.30(ë4Kú Ž(QŒS@ÜQČ˙üB@NuHį`Đ`<“ÁPĮ*Ië8x'$IÚQĖ˙üIë8Jf,,Hį`Đ Eeæ(,ēDeÜ´DeÖ ”%MSGfĐ", jač)A Jlf Hį@$,", $l"laâLßĀ`€ lfĻ Ŧ(e‚t", Hį"la˛LßĀ)A L×  @˙ėgJ@f@QŒJŦg&", P4xĀN’J@f(PˆPŒ$,"L(HS‚ŲQĘ˙üQŒL× aL× aB€Lß J@f"ĶÁNuJGføNupô`čpņ`äpë`āpū`Üp÷`Øpü`Ôpũ`Đ lfÜ ŦeÖ˛¨fØ"HažJ€fŌ IRŦ ,gĘk¸ € bĀr4, ggXgXÂĀAF*HHį p$, pNALßJ€f"Hpm_unblock move.l (a2),d1 not.l d1 and.l d1,hc_block(a4) sigpmret: and.l #NOBLOCKMASK,hc_block(a4) moveq.l #0,d0 bra checksig sigpending: move.l PAR1(a7),a2 move.l hc_pend(a4),(a2) bra sigvecret raise: move.l PAR1(a7),d2 move.l d2,d5 move.l PAR2(a7),d7 lea -tmp_size(a7),a7 move.l2üJü"ü%CSG"ŦS‘!l"H", åĶüF!I S€t"ÂQČ˙ü!IĶÁ4, g!I6ĶÁg !I$1|"ĶÁ+HPí&+k('M(B€`ūđJlg0: č",(a˛)A(",,aĻ)A, +4ŅŦ(",$Eí g` @˛¨$gEč`î$¨Jg@Eč"+4“Ē Jj g4: "* al%A JĒ fRĒ ,*S†$ŧ%MSGÚQÎ˙ü,( 4xÂ/ N’&_JŦg$Eí ",( g @˛¨(eEč`î$Œ)@BŦNu$BBHBÄĀHBBBÂĀŌ‚NupHA0€ÂH@2HA‚Â0HAÁANu“Ép˙x$k(& g j ąÄg"((˛€e &*g $C`æ"H `đ'I,Ģ4dB€'@0Nu/ (nd" ’ŽhäHA(T2,HA(_Nu. Oī˙ā$OJjaÖHį@Ā(gŒaúČJ@f‚Jƒg*HafÁMJ€gf`r(ndąÔfęJ‚gæ`h a7,a2 clr.w tmp.force(a2) st.b hc_ixx(a4) bsr.s sub_raise lea tmp_size(a7),a7 move.l d0,-(a7) bsr _checksig move.l (a7)+,d0 cmp.w #-1,d0 beq svzret ; no error, just blocked bra svret * hc_ixx must be set before entering sub_raise: bsr chk_ssc ; inside syscall ? Bj Ŧ%CSGf0 ,(g*"@0g g g fPępGé %K5@Nu gôRm$`î +(g @˛¨g (fđNu, (*Bj(maŽ TJüfŪ Ŧ%SIGf<$ŦJ…gJkĘ €˙˙€fž%l Jjf%lg´%l aŽ @dgJ@k4Hę`´B€`ōB€` Ŧ%CSGf¨$Ŧ%l … b”ēŦbJ…gøk‚$å‚ jg$ … gē"l 1(gÆ €g¤%@p$S‚å &JjfĀŦ:€˙˙ū˙fn0*g"&l(&k‡“",6g&A"å'‡U@g€`FƒĮŦ>B€NupíNupüNu"l$$å‚%q( ``$",g "A 1(g `ūNp`ūHpš€ë F€ÁŦ>p˙Nu"h\ ’%CSGf“üT`“ü,ŗęe3@#A#B NuXpũ` @f&BB+1|Nu&*g(pļ€gƀf"`ē:`dGúZ3Pg Gúb%KB€Nup˙NupëNuJjfza @˙˙gfmfLęa˙hJ@oa–#hb(3h`&#h\"#h0#h4#h8#hP#hT!E0!GP!F4 ’%CSGgBGúæ"‹!I\!jbB€Lß beq.s sr_ok ; SIG_IGN blt.s srha move.w sr,d0 andi.w #SUPER,d0 bne.s srj ; must not be in sv mode clr.l d0 lea 0-esvb_len(a7),a1 cmpa.l tmp.stack(a2),a1 bcs.s srso move.l a1,a7 move.w #sgn_raise,svb.sgn(a7) ; frame type move.l d0,svb.fs1(a7) move.l d0,svb.fs2Oī NuLęa˙. jfâ!jPGú˜!Kb!G0`ÎGúÂ"‹#L8#E4#G<#*!I\Gú!KbB€`Ēpų`úpë`öpí`ōpū`îpü`ęp˙`æ0(`@ f0&* ƒ˙˙đf(&* JhfžC@°CoB€BB‚Nup˙NupíNu@C°Cn&* 02A@fō`ę"nh&.lļ‰e&Y köJ+gđ¸Ģg`čpūNu Žhä€S@H@0+H@"$ pNu@ĀC°Cn&* 20A f”`Œ h˙ūg˙z"nx0(B°nrbLå@ŌĀJkD&Q0(@°kf8J+l2¸Ģf,&* "@ĀC°Cn 2A f:`4p"(@B‚+Nu "&* @8C8°Cn 0Af`pBB‚NupėNu&* C@°CoępdBB‚NuOī˙ü*o(o,/*/(/Oī&NwOī˙ü"o8Ji4gSi(a7) move.l a1,svb.a7(a7) move.w d0,svb.sr(a7) ; just clear it move.l a4,svb.a4(a7) ; no other registers needed lea sr_ok,a3 ; this is our exit point move.l a3,svb.ret(a7) lea cint_ret,a3 move.l a3,svb.finish(a7) ; cleanup routine move.l a4,esvb.hstruct(a7) ; some xtra info move.l d5,esvb.signr(a7) ; for han4#o,: i /4å€!¯0 ogHį4(IaĒLß,ˆLī@*o(o,/*/(/?o&N/o(POīNNw*o P&hEúôâĩëf4˛¨g Gë˙čaųJ€g(h Ŧ%CSGfRh$FĮ*Hå„NûHFĮ`úFĮ`ė`~`†` `^`d`2`R`ę``˛*/@fĀŋėeĀ ,(Oī˙Ū"O#@$ofB’#JGúJ#K&IHéø 6ŧ)K( ojCīn "偟Á$OS€$ŲQČ˙ü$k +g"@"i ’N.k"odler restore move.l d7,esvb.uval(a7) ; and reset move.l d7,a4 move.l d5,d4 move.l tmp.haddr(a2),-(a7) jmp ccal_setup ; longjmp() like return sr_ok: clr.l d0 srr: rts srha: moveq #ERR.BL,d0 rts srso: moveq #ERR.OM,d0 ; not enough stack rts srni: moveq #ERR.NI,d0 rts srj: moveq #ERR.NJ,df#@ M"K(m$i(„˙˙˙—)i(Oī"g "l($i‰’`‰Ŧ>`– ,(g "@JQg )"/@Sbúf2ŧ`ū2ŧ`ö*/@g@Jl"gÖēŦdĘå… /Df "@$l$"˛X /HfÄ"@ €˙˙đfž%‘X`ŽJl"f– /Dg"@"Ŧ$ /Hg’"@ €˙˙đfl)Q$`|Bl2Bl4`â /@"°ŦbN$/Hg.$Bå€&l $ŗ&l%sBĒv’ƒãŖÆŦBg%|$/DgHBl4$B /@"å€v’ƒãŖ&l'ĒFƒĮŦBĮŦ:ĮŦ> €$g&l '’ *gFƒĮŦBŦ˙˙ū˙:p`Ô /Hg&@&Ŧ: /Dgā$@ /@g S€g)R:`&‡Ŧ:`"FÃŦ:Ŧ˙˙ū˙:p`$o@$Ŧ>`Ļ$/@*./DOī˙ā$OBjPė3aOī /aØ  @flag svnact move.l PAR2(a7),d2 beq.s sigvecret clr.w hc_activ(a4) move.l d2,a2 move.l PAR1(a7),d0 move.l d0,d1 asl.l #2,d0 moveq.l #1,d3 sub.l d3,d1 asl.l d1,d3 move.l hc_samask(a4),a3 move.l 4(a2),0(a3,d0.l) not.l d3 and.l d3,hc_reset(a4) and.l d3,hc_block(a4)  unsigned short prot_id; /* VOID, init to 0 */ rhpB‚NAJ€f^(HCúš!ICú‚!I Cúf!I Cúš!ICú!I$B¨(B¨,B¨0Ačp NAJ€fAėpNAAėpNA‘ČCú 4xĐN’Nu+Signal extension v0.30,  Richard Zidlicky RĢ4JĢ0gSĢ0NuJĢ0fZJĢ,gT k,Pˆ ŧ%MSGBh(H›ÍvaVģügFRhQˆ+h (,g!@((HBGa>a&`Ŧ(K4xÂN’&L`î +(g*@Jm$ga -fđNuSm$frRm$Oī˙ā$O(m Ŧ%CSGfR ,(gL"@ QfD"iJ‘g<"-(%|I ,<ÛaōJ@f*"l( (\°Šd\a ¨J@oa rXm$`Bm$Oī Nu‘ČBĢ,Cú 4xĐN’`č,signal extension and.l d3,hc_pend(a4) cmp.l #4*NOCATCH,d0 beq.s sigvecret move.l hc_curr(a4),a3 move.l (a2),0(a3,d0.l) move.l 8(a2),d0 beq.s sigvecret ; no flags not.l d3 and.l d3,hc_reset(a4) sigvecret: and.l #NOBLOCKMASK,hc_block(a4) moveq.l #0,d0 bra svret sigprocmask: move.l PAR3(a7),d0 beq.s sp: bad job in scheduler loop‘ČBĢ,Cú 4xĐN’`¨.signal extension: bad stack in scheduler loopBĢ,‘ČBĢ,Cú 4xĐN’Nu(signal extension: timer ll corruption p0å€ nhŅĀpūąîldJk PHA˛hfHAB€Nu$H.4"˙ßßß *SIGf:"ßßß˙ NAL_f*`SIGNALQBg mSBfß Sgn RgpôNupųNupņNu4xÂN’p÷Nu*gNfč*K4xĀr(N’J€f8Cí )g "@žŠgĖ`đ#H!Ep"E QJüf Š%CSGfEú n#J,Nur(4xĀN’`ôHį *HJ¨gf"h Š%CSGfBi4BŠ(h šügB¨ ( L(h4xÂN’šüfė&D M"+(gCëąÁg"A")fôLß0đNu#hal MLß0đ4x st.b hc_ixx(a4) ; inside checksig flag ** bne.s _icsr move.l hc_nsigs(a4),d1 moveq.l #1,d2 ; d2 nr to check move.l d2,d3 ; d3 mask move.l d0,d4 ; (potentialy) raiseable mask lea -tmp_size(a7),a7 move.l a7,a2 ; tmp.* struct checkloop: st.b hc_ixx(a4) ; set again (in looööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööp!) move.l hc_block(a4),d0 not.l d0 and.l hc_pend(a4),d0 and.l d3,d0 ; sigmask(i) beq.s nxchl ; not this one move.l d2,d5 ; prepare raise() call: signr clr.l d7 ; uval movem.l d1-d4/d6/a1/a4/a5,-(a7) move.l hc_uval(a4),d0 bne.s guval chraise: bsr sub_raise movem.l (a7 of reasons.A mix of strategies is used to achieve a good emuvrm1qdf0€‰'æ&HQDOS/SMS SIGNAL HANDLING EXTENSION User GuideSIGNAL_DOC Last Changed: 20 Oct 1995 Page nnn1. INTRODUCTIONThis document describes the implementation of the SIGNAL device driver for QDOS and SMS. Initially C68 compiled programs have been seen as the main users of this facility, but the implementation is actually language independent so that it can be used from any language [althou)+,d1-d4/d6/a1/a4/a5 nxchl: asl.l #1,d3 addq.l #1,d2 cmp.w d2,d1 bge.s checkloop lea tmp_size(a7),a7 _csret: clr.b hc_ixx(a4) move.l hc_pend(a4),d0 not.l d6 and.l d6,d0 bne.s _checksig ; some new signals to check rts guval: move.l d0,a1 move.l d5,d0 asl.l #2,d0 move.l 0(a1,d0.l),d7 gh processing signals by good old SB interpreter could pose a problem].This document is structured in such a way that the general information is given first. Subsequent sections get deeper into the way that the SIGNAL system has been implemented. You only need read, therefore, as much of the document as you think is relevant to the use you want to make of the SIGNAL system.The SIGNAL system was developed by: Richard Zidlicky Babenbergerring 69 96049 Bamberg Germany Tel: +951-55175 Email: rdz bra.s chraise sverr.xp moveq #ERR.XP,d0 bra.s svret sverr.or: moveq #ERR.OR,d0 bra.s svret sverr.bp: moveq #ERR.BP,d0 bra.s svret sverr.ni: svnoimp: moveq #ERR.NI,d0 bra.s svret sverr.no: moveq #ERR.NO,d0 bra.s svret sverr.om moveq #ERR.OM,d0 bra.s svret svzret: clr.l d0 svret: movem.l (a7)+,d1-d7/a0-a5 rts *****idlic@cip.informatik.uni-erlangen.deIf you have any feedback on the SIGNAL ssytem, then it can be provided either directly, or via Dave Walker (Issue co-ordinator of the C68 system).2. BACKGROUNDIn UNIX and similar operating systems signals are used for a number of purposes:(a) signalling and handling soft and hardware errors and exceptions like stack overflow, illegal ops, div by zero, bus and address exceptions(b) notifying processes about a situation needing urgent response, for example commu*********** *sysvar_base: * dc.l 0 t_p_s: ticks_per_second: dc.w 50 config: dc.b '<>01' ; Flag,level dc.w cne-cns cns: dc.b 'Signal Extension' ; Name cne: ds.w 0 dc.w 4 dc.l version ; Version * ticks per seconds dc.b 10 ; Item type: word dc.b 0 ; Item selectionication with sockets or special devices(c) for (asynchronous) communication between processes(d) handling of certain keyboard or timer events like ctl-c(INT) or ctl-s, alarms, or events generated for example by the window manager (SIGWINCHD)(e) telling the process that it exhausted its limit on certain resources like memory, CPU time, number of open filesIn all of the above cases the normal execution of the process is interrupted (at any point), its context saved and the handler for the event is can Key dc.w t_p_s-* ; Pointer to item dc.w 0 ; pre-proc dc.w 0 ; post-proc dc.w tps_text-* ; description dc.w tps_attr-* ; attributes dc.w -1 ; End flag tps_text dc.w tpte-tpts tpts: dc.b 'Ticks per second' tpte: ds.w lled. If the user program has not supplied an explicit handler for a particular signal type, then the system supplied default handler is used instead.In QDOS and SMS option (a) is already (largely) implemented through MT.TRAPV but, unlike signal handlers, the handler routines are called in supervisor mode and also need to take care of the differing stack frames formats used by different members of the 68xxx family of processors. Sooner or later the signal extension will offer some option to take care of 0 tps_attr: dc.w 49,61 dc.w -1 ; End Flag end */ unsigned long m2; /* type = '%CSG' */ unsigned nsig; /* # of signals to be handled */ void (*** curr) (int) ; /* current table * */ void (*** def) (int) ; /* default table * */ /* def=NULL is legal since signal extension v0.27 */ /* thus using default table builtin siegxt instead */ sigset_t **samask; this.It is my intention to provide an implementation for (b), (c), (d) and (e) in QDOS through the signal extension.At the moment (c) and (d) is working fine (at least on some machines).The mechanism provided means that in principle (b) and (e) is no problem either, but you need some special way to generate the events - a job checking for a special keyrow combination or a button or hotkey appear more appropriate in a QDOS enviroment than rewriting console drivers to send signals on ctl-\ etc.The SI0 rts * longjmp needed inside simulated syscall handling rljmp: move.l tmp.haddr(a2),a4 ; context addr move.l d7,d4 ; uval bra do_ljmp fraise: move.l PAR1(a7),d2 move.l d2,d5 move.l PAR2(a7),d7 lea -tmp_size(a7),a7 move.l a7,a2 st tmp.force(a2) ; force flag st.b hc_ixx(a4) ˙˙gX`VaõôaöÎ @˙˙mvgr0*gW@g|`fB,3aų$ @˙˙gXmZ@Ā@ f^B€Cī˙ŦŗęeJ.I?|/@/@ /I"?@&/LGú$/K(Gúû€.‹/L8/E4/G<(G(/*NúûĐB€NupëNupũNupíNupūNu(j(`ü$/@*./DOī˙ā$OPęPė3a˙FOī `’HzŒ ,:F€,,>†gHPė3",t&(Oī˙ā$OPė3 ,:F€ĀŦ>ƒg*B‡HįzL ,6f$aūôLß2^ãƒR‚˛BlĐOī B,3 ,>F†Ā†fœNu"@ å€.1`Đpī`pü`pņ`pí` pú`pũ`B€Lß?ūNu2<>01Signal Extension0.30 ˙Ú˙˙Ticks per second1=˙˙al system calls, this is not practical in the current implementation for a variety bsr sub_raise lea tmp_size(a7),a7 bra svret * see whether some pending signals could be handled checksig: pea svzret ; fall through * subroutine _checksig: *should use fast check for pending signals now move.l hc_block(a4),d0 not.l d0 move.l hc_pend(a4),d6 ; remember old value and.l d6,d0 beq.s _csret ; nothing to do ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööithin device driver code or extern interrupt handlers, currently this can be done only from the scheduler loop.3. INSTALLATIONTo load the signal extension, use the instruction  LRESPR sigext_rextIf in addition, you use the pointer interface and you wish interactive signal generation via the SIGUTIL program then use a command of the form ERT HOT_RES(chr$(236),sigutil) : rem alt-F2Note that if your QL has other than 50 Hz poll loop frequency, you should run the config program on sigexnd other that use %CSG type handlers) get access to a vectored set of calls to control their handlers and raise signals - see %CSG handler interface. C programs can also use the standard Posix defined set of library routines for handling signals.QDOS signal handlers:This section describes the differences between %SIG and %CSG handlers. However it is recommended to use the automatic handler initialization, goto next chapter. When initially opening a channel to the SIGNAL device, one can ask ft_rext to adjust it, otherwise alarm() and related calls will be pretty unprecise.Lightning is known to upset the timing mechanism of the signal extension, _lngOFF apparently cures the problem.4. SENDING SIGNALS USING SIGUTILThe SIGUTIL program is a simple interface that allows you to send signals to any program running on the system.Activating SIGUTILThe SIGUTIL program is activated by whatever hot-key combination you have chosen (the example above uses ALT-F2).Sending Signals- Get the or two different modes of operation. The mode required is defined by the type of structure that is passed as a parameter to the open.%SIG is a very simple, stateless handler intended for use in assembler programs. There is only one handler routine getting signal number and some other parameters passed in registers.%CSG is a complex handler structure intended to emulate UNIX signals as close as desirable for C68 programs, uses C style parameter passing and provides a vector for some functionsBothactive cursor or mouse pointer into a window of the job you want to send the signal- press ALT-F2 (or whatever hotkey you assigned to it), SIGUTIL will open a window with a primitive menu and show the jobname and some options.Now you can simply press ENTER to send this job SIGINT, this is what you will do most of the time, or press some of the other keys for other signals or options.SIGUTIL will now try to send this signal, if there was an error it will show the error message for a couple of seconds. structures are defined and partly initialized by the job in its private memory, where they must remain allocated for the lifetime of the handler. A major difference between them is that %SIG handlers don't allow you to block signals, while the %CSG handlers can do this. Also %CSG allow to ignore certain signals so that the job is not at all disrupted when they occur.C programs would normally use the standard library routines for manipulating signals, and these are mapped onto the %CSG handler. Setting uval'uval' is an extra parameter that can be delivered to the signaled job, SIGUTIL zeroes it by default.To change this hit 'u' in the main menu and edit the value.Setting pioritySIGUTIL uses the highest possible priority for sending signals by default. To change it hit 'p' in the main menu and adjust with the arrow keys.WFJ applys if the job is waiting for another jobSYSC ... I/0SUSP .... suspendedThe defer flags should always be enThere is no technical reason, however, why C programs cannot use any of the handlers directly using trap#3 style calls if they need to implement functionality that would not otherwise be available. If you wish to access the signal structures from within a C program, this can be done by using #include The QDOS_SIGH structure corresponds to the %SIG structure, while the QDOS_CSIGH structure corresponds to the pretty complex %CSG handler.Assembler programs should probably use the simabled for c68 programs.If you do not want to use the programming interface to signals, then you can probably skip the remainder of this document.5. DIFFERENCES TO UNIX SIGNALSThere are still some, but using standard C library calls you may never notice the difference. While some of the differences are considered usefull features, other may disappear sometime.Some of the differences :- Default actions are very different from unix, for example signals can't cause coredumps. - Some unix flavors apler %SIG type handler. The layout of the %SIG handler is Offset.size Value Description 0.w $4afc magic 2.l '%SIG' type 6.l sighnd pointer to sighandler or SIG_IGN 10.l stackbot dont signal if a70Errors:This macros are defined for system call management:err=SYSCALL0(flags,&sctl,syscall)err=SYSCALL1(flags,&sctl,syscall,arg1)........err=SYSCALL3(flags,&sctl,syscall,arg1,arg2,arg3)currently no flags, syscall() is the function to be called in system call mode with args.err<0 : system call could not be initiated for some reason, try calling syscall(...) direclty.The return value of the system call is always stored in sctl.rval, see below.struct SYSTL sctl; includes following members:sigset_t pendiSame as above, obviously only those that are detected at timer setup time can be reported.Currently the same primitive time measurement is used for all units. A poll routine is used to count 50/60 Hz ticks, this usually works but gets very inacurate if many disk operations are performed.Obviously signr can be any legal signr not just SIGALRM. If msg.signr=0, no event will be generated but any with the given msg.t_evid will be cancelled and (only io.edlin) returned.Sigvec handler interfaceIf tng; stores pending signals, can be used for checking and must be checked for FATAL signals after return from SYSCALLnlong rval; return value of syscall() or uval in case of a FATAL signalAfter return from SYSCALLn a test on fatal signals should be performed, something like:if (sctl.pending | _SIG_FTX) ....Inside syscall mode following things are defined:sigset_t *pf=SYSCTL(flags);flags 0 or SCTL_EXP, used to obtain addr of pending flag and to change to or from SCTL_EXP mode if neehe handler was setup by the normal procedure, the sigvec routine can be used for handler maintenance and some other things. In c68 programs the address of the sigvec routine can be normaly found in the _sigvec variable.The parameters are same as in equivalent POSIX calls, currently implemented calls are:sgv(chid,0): sigcleanup()sgv(chid,1,signr,oadr,nadr): sigaction(signr,oadr,nadr)sgv(chid,2,how,&omask,&mask): sigprocmask(how,oset,nset), c/e block masksgv(chid,3,&mask): sigpending() examine pendedSYS_ISPENDING(pf) returns true if any signal pendingSYS_PENDING(pf) returns set of pending signals (not its address!) Here is a small example merely to demonstrate the calling sequence. As it is a toy program it doesn't seriously test for fatal signals as it should. /* here is the actuall "system call" */int sys_test(a,b,c) int a,b,c;{ int err,tmout; sigset_t *pf; printf("entering sys_test(%d,%d,%d)\n",a,b,c); if (a<2) printf("sysctl(0) returns %d \n",pf=SYSCTL(0)); else pdingsgv(chid,4,signr,uval): raise() signr,uvalsgv(chid,5,signr,uval) : fraise()sgv(chid,6): checksig(), raise pending signalssgv(chid,7,signr,&oprio,&prio): c/e prioritysgv(chid,8,flags,&sctl,&sycfunc,argc,..) low level func to implement SYSCALLn macros, run syscfunc as emulated system call,sgv(chid,9,flags): low level func to implement SYSCTL macrohere is the actual implementation of sigaction() as an example: int sigaction (signo, act, oact) int signo; struct sigactiorintf("sysctl(1) returns %d \n",pf=SYSCTL(SCTL_EXP)); tmout=a<2 ? 100 : -1; if (a==4) {testsyscall(); return a;} /* nested syscalls */ while(0==(SYS_PENDING(pf)&sigmask(SIGQUIT))) { printf("signals pending: %s\n",psigset(*pf)); mt_susjb(-1,tmout,NULL); } if (a==3) { printf("\nnow test longjmp exit\n"); raiseu(SIGSEGV,144); } printf("do normal exit\n"); return a;}/* and here comes the stub functions */void testsyscall(){ int err; struct SYSCTL sctl;n *act; struct sigaction *oact; { _oserr=(*(_sigvec))(_sigch,1,signo,act,oact); if (_oserr==0) return 0; errno=(_oserr==ERR_OR ? ERANGE : EOSERR); return (int)SIG_ERR; }ĘØB}=JVB}=J˜ I™ IĒ IĢ] I I 5 I> I?$ Ic Id Iv IŠ I™ Iĸ IŖ I´1 Iå Iæ“ Iy printf("\n&sctl = %d\n",&sctl); printf("\ntest plain syscall\n"); err=SYSCALL3(0,&sctl,sys_test,1,-5,0x100000); printf("returns %d, rval %d\n pending : %s\n",err,sctl.rval,psigset(sctl.pending));}As seen in this example, it is possible to do nested 'system calls', but special care is needed to avoid deadlocks; especially this simple example will hang easily. Control of signal receivingFor '%SIG' handler receiving signals may be disabled by - setting QDOS_SIGH.sighandler Iz I{ IŠ I‹Q IÜ IŨŽ Ik Il} Ié Ię7 I! I"• Iˇ I¸u I- I.+ IY IZm I Į I Čp I 8 I 9G I € I 8 I š I ē I Ô I ՞ I s I tŧ I0 I1 I2 I3 ID IE3 Ito 0 This will cause the sending job to retry or err.nc - closing the channel opened for receiving signals.'%CSG' handlers may block signals by the use of sigprocmask(), this will delay the signal after it has been unblocked again or simply ignore them. The sending job can not distinguish whether the signal was processed or blocked or ignored.For both handlers signal delivery is also controlled by the priority, see below. If the signal is not delivered due to a too small priority, the sending job x Iy IŽ I‘ I  I!2 IS ITĀ Ip I„ I… I†" I¨ IŠp I I I I/ I0r Iĸ IŖ I¤ Iĩ Iļ^ I I IĨ IĻĄ IG IHx IĀ IÁ I IĐ IŅf I7 I8> Iis returned an ERR_RO.Priorityis a longword that consists of the actual priorities for each possible state of a job and some flags to control additional features. Thus the definition of receiving priority  struct SIG_PRIOR_R is slightly different from the sending priority,  struct SIG_PRIOR_S the common part for both are these bit fields: p.norm ; applied if job is in normal state p.susp ; ................. suspended p.wfio ; ................. waiting for io p.wfjob ; .....v Iw Ix I‰ IŠ“ I I2 IP+ I{! Iœ I; IØ IŲ{ IT IU IV  Iv Iwģ I2 I3 IM IN\ IĒ IĢ  Iˇ I¸ô IŦ I­§ IT IUP IĨ IĻž ID IE… IĘ Iˏ IZ............ waiting for another job any of them [0-7].According to the state of the signal receiving job one of these priorites is applied. The job receives the signal only if the priority given by the sending job is GREATER than that of the receiving job. Thus by setting required priority to 0777(octal) a job may inhibit any signals.Inside an emulated system call p.norm is always applied.furthermore the sending job may use bits (flags) p.df_susp; p.df_wfio; p.df_wfjob;if the receiving job  I[ Ii  Ik"I„ I… I‡ IˆY Gá Gâ" G  G đ G õ I ÷ˇ I"Ž I"¯A I"đ I"ņv I$g I$h I$i% I$Ž I$4 I%à I%Ä I%Ö I%×8 I& I& I& I&b I&} I&~? I'Ŋ I'ž I(? I(@ą Iis in one of the suspended states and the priority of the sent signal is not big enough to break the suspended state but enough to interrupt the job in the normal state, the according flag is examined and if set, the signal is effectively delivered after the job returns from the suspended state or the I/O call. This does not block the sending job.In assembler this is a long word with this bit masks: xyzjjjiiisssnnn ;xyz only for use by the sigsending jobwhere n = norm field, s = suspend, i = wfio,(ņ I(ō I(ķi I*\ I*] I*^ I*m I*n› I+  I+  I+  I+ " I+. I+/p I+Ÿ I+¨ I+° I+š I+Å I+Ķ I+ā I+í I+ü I,  I, I,' I,5 I,D I,Q I,_ I,`¤ I- I- I- I-! I-"‰ I-Ģ j = wfjob, x = df_wfjob, y = df_wfio, z = df_susp The df_* bits should be on when sending signals to C68 programs. All other bits of priority are reserved and should be cleared, otherwise they could cause ERR_NI or some ugly errors if these bits are assigned in the future.The following table shows some suggested receiving priority values. For example if your job is doing some work, expecting some signals for communication but can not handle interrupted trap #3 calls a priority like 01611(oct) or 0 I-ļ I-É I-× I-Øh I.@ I.A9 I.z0 I.Ē7 I.á G.ã` G/C G/D G/E" I/_ I/`š I0 I0 I01 I02Ģ I0Ũ I0ŪÔ I1˛ I1ŗ I2Ŋ I2ž I2ŋ I2Ö I2×Ŗ I3z I3{ I3|Ė I4H I4Iē I5 I5ˇ I5ģ I1711(oct) may be appropriate.0 job isn't doing any usefull work, it definitely waits for some signal to proceed1-3 job is working and expects some signals, use for job communication, asynchronous IO or sockets4 default value for c68 progs; there is good chance signals will be handled gratefully, ie not terminate the process5 signals will probably have serious impact on this job6 signals will probably terminate this job7 block every signal, report ERR_RO to signalerSignal TRAP #3 callsSendin5ŧ} I79 I7:Ģ I8å I8æ I9 I9 I9‘ I9’l I9ū I9˙! I:  I:4 I:F. I:t. I:ĸ I:ž I:ŋ I;Ō I;Ķ I;Ô I;đ?I$JI>nI>p?I>¯5g signals and setting/examinig timer events is implemented as standard trap#3 io_sstrg, io_edlin calls that are used to send or send and receive message structures.io_fstrg reads the struct SIG_INFO as defined in sys/signal.h into the buffer. This is the easiest way to obtain the address of the sigvec routine and the version number of the signal extension.Messagesthe signal extension currently understands three message formats: struct SIG_MSG, msg.type=M_SIG to send a simple signal structI>äI>æCI?))I?R8I?ŠI?‹AI?Ė(I?ôII@=I@?I@X2I@Š9I@Ã9I@üI@ū;IA9IA:2IAlIA‡ IA§ IA´IAĩIAļ IAˇ IA¸= IAõ IAö÷ IBí IBî§ IC• IC– IC—( ICŋ ICĀ3ICķ>ID1?ID TMR_MSG, msg.type=M_TIMER to set/change/cancel a timer event struct HINIT_MSG, msg.type=M_HINITSending SignalsTo send the signal do a TRAP#3 io_sstrg with this parameters: D0 = #7 D2.L = #buflen ; sizeof(struct SIG_MSG) D3.W = #timeout ; should be >0 if signaling ; job==-1 is to work A0 = chanid ; signal channel A1 = bufferA1 should point at a struct SIG_MSG: dc.l '%MSG' msg.magic dc.l 28 msg.len length of struct dc.w 0 msg.type type and dc.w 0 msg.txi extra infpIDqIDr ID‹ IDŒ IDf IDķ IDô. IE" IE5. IEc> IEĄ0 IEŅ8 IF ; IFD IFE0 IFu7 IFŦ IF¸ IFš& IFß IFā> KGR KGp KGq} IGî IGī IGđ IGņ. IH IH ™ IHš IHē IHģ# IHŪ IHße IID Io dc.l jobid msg.jobid dc.l signr msg.signr dc.l priority msg.prio dc.l uval msg.uval extra parameter that gets passed to the jobsErrors: err.nc : err.bp : bad message, bad buffer len? err.bj : bad job, or signaling to job #0 or exotic error condition err.om : job supposed to receive signal doesn't have enough stack err.nf : no signal handler established for job err.bl : signal handler found but has bad format or MAGIC id or some inconsistent data err.ni : failed due to some uniIE? II„ II… II† II— II˜' IIŋ IIĀ4 IIô/ IJ#- IJP? IJ2 IJÁ IJ‹ IKM IKN IKO: IK‰ IKŠ IK‹ IKŠ IKĒÆ ILp ILq ILr& IL˜ IL™¨ IMA IMB¨ IMę IMë/ IO IOą IOĖ IOÍ IOÎ IOĪmplemented feature, probably bad setting of priority err.ro : priority too smallSignal #0 is special, it can be used to test whether a job exists and has established an signal handler.Getting no error message is no guarantee the signal will get processed. Also the sequence in which incoming signals will be processed is implementation dependent in some cases.A primitive example how to send signals from basic, setup of timer events works similarly: 100 signr=3: uval=3 110 jobid=2*65536+2 120 OP IOä IOåJ IQ/ IQ0 IQÍ IQÎX IR& IR'ÄIRëIRėkISWISXVISŽIS¯IS°° IT` ITaė IUM IUNq IUŋ IUĀ4 IUô IUõ" IV' IV> IVG1 IVx IVyZ IVĶ_ IW2 IW3N IW IW‚ IW– IW˛ IXAM IEN#4,'*signal_s' 130 msg$='%MSG'&lw$(28)&lw$(0)&lw$(jobid) 140 msg$=msg$&lw$(signr)&lw$(HEX("7fff"))&lw$(uval) 150 PRINT#4,msg$; : rem : send it !! 160 DEFine FuNction lw$(x) 170 LOCal r$,rx 180 r$=' ' 190 r$(4)=CHR$(FMOD(x,256)) : rx=INT(x/256) 200 r$(3)=CHR$(FMOD(rx,256)) : rx=INT(rx/256) 210 r$(2)=CHR$(FMOD(rx,256)) : rx=INT(rx/256) 220 r$(1)=CHR$(FMOD(rx,256)) 240 RETurn r$ 250 END DEFine 260 DEFine FuNction FMOD(a,b) : RETurn a-b*INT(a/b)Timer EventsTimXŽ IXX IXį IXč" IY  IY 2 IY= IY> IYZj IYÄ IYÅ5 IYú0 IZ* IZA IZC• IZØ IZŲ)V[ L[ L[# L[% L[6 L[F L[G1 L[x L[y; L[´B L[ö L[÷ L\ L\= L\M L\N/ L\} L\ƒ4 L\ˇ L\Öer events are identified by their event-id (msg.t_evid) which is unique per job.EventId #1 is reserved for alarm(), also Id's <=10 should be reserved for future use by c68 or other libraries.setup/cancel timer event : use io_sstrg parameters as above, message struct see belowsetup/cancel and return pending timer event: use io_edlin a1 should point at the end of the message, d1=message length, returns empty buffer or previous event message with t_ticks indicating time units remaining till event th L\Ũ L\é L\î) L] L]0 L]5 L]6 L]T L]` L]b L]c( L]‹ L]ž L]  L]Ģ L]Á L]Â" L]ä L]å$ L^ 0 L^91 L^j. L^˜ L^™ L^› L^œ I^Ļ I_C I_E I_F I_G I_d I_e: I_Ÿ I_ % I_Å6 Iöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö(Iíüēf¸,d8ŧũBlUŒšÍnč(nXpņžfēlf ¸ldŧPŒšî\mā5|˙˙(Pč,pNu( g gN(kFNÔ|HįPaîLß | @˙ųg&J€fČx@IčfB¤B¤Bd)ptB¨ aū !D `˙:B¨ `˛Bh2`ŦJ(,gp4!@ /pNA _IčX(ptaũę(kJNÔN@/pNA,HJ.îfúpH@S€fü~Iî@ $g @J("f4xÂN’B”QĪ˙ę,_|Ø˙Nuaāf0|a–f(x4xN’fSCnøm86˜(Hp"<t˙NA*HJ€fjQîm=|ŒpNA ‚1.03c 4x:Ôü@`4x,ÔüA8+JĐ Lp v˙NCp "MEú2NCJ€faövz|~aa’p "MEúlNC(p MNA NuGéØ&č&č&L¨L¨0&€Ä4‚Å66Ā6ÁS@6ĀSA6ÁW@6Ā[@mBSAo>ÄÄÆÅH¨ _û5 I`0 I`1ņ Ia" Ia#´ Ia× IaØ IaŲ IaÚ Iaä Iaå° Ib• IbŦ2 IbŪ Ibõ Ibö/ Ic% Ic&/ IcU* Ic/ IcŽ8 Icæ Icį Icü Icũ Ie9 IeQ IeR1 Ieƒ Ie Ie IeĢs Ig Ig6 IgU; Ig Ig– “ÉNAŪüNupņ(p"/NA*/gÚŽ0 vXp˙-€XpNB /g @pNB `ÆxČ/ ,Aú/ P‹N’&_J€j˙(`˛`Hį "a)@Lß@NuHį a*,LßPNua@r`2a8"`,a2Iúî€\ˆ XJûf(H`+H(KÖüģËm-ˆnQ‹a*K&La a'„`+B~za"HA^a62\a0J_jŧsˆ˙2A˙Xat La+Æfž"_ YJûfa*úf°`+ĻU‰=˜4xōN’ŧ ˆRˆģČIg§ Igĩ IgĀ IgĖ IgÛ Igé Ig÷ IgøA Ih9 Ih;Ÿ IhÚ IhÛ IiŪ Iiß< Ij Ij39 Ijl+ Ij—< IjĶ: Ik 8 IkE+ Ikp0 Ik  IkĄ Ikĸ IkŖ Ikš IkēŦ Ilf IlgĮ Im. Im/ Im0 Im1 Im; Im<B ImbôNu~`~` ~`~`~a)~a(*fd6HGa&ėf-ˆHJ€Nua)fa&Øf Inu Inv In* InŠ- InÖ Inđ! Io Io  Io!% IoF Io_& Io… IoŖ Io IoÚ Ioō Ip E6 IpQ IpY  Ipd( IpŒE IpŅD Iq1 IqFY IqŸV Iqõ Ir Ign4xa„J6˜gpî`nR‰ta„`ŪzK`zAaˆˇīfR an`NaxˇīfDa'Č. aa'ļ`8pCrv oNC"GJ€g t˙°‚gtö°‚f a#ÔpNu./m ŪŽ(\‡aĖ`pņŪü NuX`öKëN’&MfōNu’Âp`p oa(ö’ÁfÜNu~8ģËgÎ6¸|a%ūf>(WB—P×/ / 0f,><Îv¸ Gf/v¸a&Šf˜P‹pB"6˜XŽXv WNCNÔXNuˇīmpX`˙b2<˙Âv¸g( Af"v¸Ķî( v˜g`āY4<ÅgāIUNuX`˙:a%nfla&ff(I46ČTŒ"V~aLmpJgžf8~`đ fa6`* \fr pŪĐg"[gXg^_gZSgRUgRZgNXgJag¸Nu`˛SBm6ČRŒpNu|a fø˜R‰`îŌÆŗî’ÆoäH§`$ "V”‰a'ēLŸ"VNux`x™î\/ r$a&"_Ųîri Ir} Ir~ŗ Is1 Is2 Is3[ IsŽ Is Is¤ Isš IsŅ+ Isü5 It18 Iti Itj It† It˜ It¨. ItÖ0 Iu0 Iu6 IuU Iud Iuu5 IuĒ IuĢ IuŦ Iu­ IuŽ Iuŧ IuŊT Ivp Iv Iv‚ Ivƒ( IvĢ/ IvÚ\~|zHDv •ĘP‹ģËoĀ 6$Č˙g8RFaŽm0pßĐg\UgN_gHUg8Ug4rZgVrYgPrTgJ^gRBSŒ`HB6Č˙$La˙Rf˛RF #fđSŠ`˛JDg~z`v*JDgRERF`šWBVŒ<o'ĸ^FDG`RFHD8HDa˙,Hį0|pJ6¸m 0<Āv¸gJDf, @f&$v¸Õî(06¨4r S@m6¨RЁ˜R‰SBnę`a$€fL×0 JGlaĀ`aZpLß> ŌÆgūVNur$a$øpЋf:a$Lf6P‹a$2f.<6˜ Fb":6˜mX‰(IpûĐF€˜Ā›Ív x:įŧpNupņXNu~`~aĒaú`~a ačU‰=†˜`$€a0E_@mâa.`æGúa=€˜ūU‰lDv˜X‹4xNŌ-ŧP˜ü=ŧ˜ú]‰Nu0vփ"åi¤ÖQČ˙ō>6˜G¸mÎüŽü Gc`~0Ga ` RGGúža°a¨ v˜lîGú IvÛ: Iw, IwA IwU5 IwŠ9 Iwà IwŪ Iwß Iwā7 Ix Ix1 Ix11 IxE)1 Ixn/1 Ix1 Ixą1 IxÉ1 Ixá1 IxûC1 Iy>1 Iy[01 Iy‹-1 Iy¸1 Iyš IyÁ[ Iz IzĮ Izä Izå: I{ I{ } I{ I{ž I{Ÿ I{  I{Ą I°aš"6˜X‰lD˛ƒlÚv ?YF?~ÉIYŒaHLŸBEņ`ŧE¨üp+JlDp-€¨ũaaJAg`‚ü p0HAĐBAHA`r0a˙0fGúQa˙:ÉIflHD"6ČlDi`ZD?;@Bg SFŌÆ€˜’ÆHDad<6ØSga.`ôHD;@ga"Nu00+ --( + --)ĩÉoSŠ€¨NuXv*a$INu $I`ƒ¨RŠQČ˙øNuv aęŪESGf ~@aÄ B@H@€ü 40€ü H@0aĒSEfaĸ0"HAfČJElÄNuz8xū`z8xør"a"Âa!úfJ(6˜oBr ¸Ab<-X‰AéęiÁN”SDęlRDg2’Á˙R‰QÉ˙öU‰’ÄU‰=„˜`"dpņNuIúR`Iúba!´fî06˜>T‰rN”fāgR‰a|`"6tĐÔ6˜R‰m$  o‚ o_ b 鉂QČ˙ØpNupīNu6˜R‰{ģ I{ŧā I|œ I|W I|ô I|õ M}8 M}JI M}“2 M}Å, M}ņ# M~3 M~G/ M~v) M~Ÿ0 M~Ī) M~ø M , M8 I9@ Iy Iz" Iœ IŦ IČ Iå Ič Ié3 I€ I€ I€;/ I€j I€„ I€‡ I€ˆ I€‰ I€‰âã‘QČ˙ô`čz`za Ļf a!†v˙NCNua ”f0a!f*p%$v˜"v˜`#da zfa! fp Eú`#L!Q&pNuIúäŪ~`Iúäô~a ę<6˜$n0zp v˙ v¨"LNCp NCÔü(PŒQÍ˙āpęN‚A4NANuģËf#€a!TpNA"(’¨ ar`!0a@fNXpt˙NAJ€gr`äa>4xŌN’"X`Öaf,Y Aa("g#0˛ˆg"A`ō"pNANua 6f "6˜XŽXpNuCîāNuaø(QB‘ gî LpNA(T`ō~`~a V×ĮrÂ6¸` \a BpĀ6¸Sf>6¸aū=‡¸J€`DP‹aāfJTŽX66˜o>SCįK$n<ĩî8o0J6¨øg*&v¨čÖÃˇö¨ėlpNAB04m×îarg BIúãR` $pņNuaîfa€f .ÂSCmn 6˜`"RpņNuaļrpõ°ŽÂWÁD`´ ¸ I€‰ I€‰ I€Œ I€ I€Ž I€ I€ Ihandler routine gets these parameters:s Ōe& : failed due to some unimplem@Â0. '1;E "',16;@E  rts scerr_txt: dc.w scete-scets scets: dc.b 'signal extension: timer ll corruption',10 scete ds.w 0 getjbasea0: moveq #0,d0 move.w d1,d0 asl.l Clock€ Alarm a f>(H. ž‹ga8f0>6˜ G@n$*I&LIú˙Äaļf(Ë8Įg T8öØUGnöt`ÆpņNuaöfø<6˜>6˜ Fbč G;bâ/ Iú˙av"_fÖ Vx ax:a V(öˆ8öˆĖü<ŪFÎü8‡`ŦpdŅv˜4xōN’„ˆũNuGîpKîJUfKú˛(n0 f Cúš4xČN’(HÎv aÜ"K4xėN’T‰4xîN’prtv˙ LNCJ€f*$M< %f,tpî Yg4põ Dg,pø Hg$pû Mgpū` $ftpņ MgpčSFCķp`pNCSFnĸ`˙t<ĀÎ$d %d $m %h:%m:%s v2a.䉂üT`HA’n A–bępGúNA`‚ ĒĒPPpr˙“ÉNApNANua”f<ˇÍf \&nrÂ6¸Qf ļm" aBa–aœfaööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööfP‹ˇîmÎNuN@pNA ‚2.00ldIčH*H L(TJ”føšüĀlN/pr6tNACír$Yšęf%HQÉ˙ō&Hr*&ÜYAnúGčIč*(ĶCú&É(ĶCúâ&É(ĶCú>&É"_"ˆFüNu JgŒ KgN AfJCf ($īHîˆIčX(€txa(pA(kBNÔt@p"LHį¨f,a+rf&-ˆH˜Ž0/D/CQB¯zGí˙øa*€fa,ČfF*K:6˜R……-IX“î\/I&M~˙Q‹R‡ˇīga*Fgđa*DfPī a,Œf 6¸a+f`pGtv˙"VNDNCJ€fH’ÂpņS6˜f>(Hp"$6˜&Vƒå‹Ö…Öļ˜“ÉNAÉHJ€f"L$LŲÂŲÃ.J¯f/ApHv˙NCJ€g (pNB `”pNBBd"/gŌŽ\TŒŌE96UU…löz"LJ/ gRG(/gRG)REpNA hxåL p@!W\Š ZJûf2RAÔÁ ZJûgø&MQ‹a)Zf,a+Jm REJ€nvJ/ fžEf v Efva**fB)`ĖJ/ ga)ú)RE/CQī 9p "tNA!L\*KQ‹ˇīmnūvJ6¸jūna*ŒfN-¯H>/n:"p(tNA*gpNAšp "4:ī*J…gvNA"`Ú6NAJGf pr˙vpRQČ˙ūpa`âīHv˙âKƒQČ˙üƒƒNua!INuCčH!INuBhBa†aäp1WÉ˙üf"0<‡VČ˙ügp WČ˙ügx0<ÅQČ˙ūaÜfj°(Afb˛(@g °(@fTA@:šhB!QDx(ETfåLat4aŽf*¸(Ff$J(@mJ(Al¸EfBEaPJEf!Ia `ÚQčD`ÖR(BdR(CNuxtØBSAføNuaĘz(E (ūDfåM2CčHaÖDFJ(AmJ(@l1DBrCč@aē„_‰v˙6(@ëKæƒHCėƒrp˙4<íVĘ˙üfb⋃m pVČ˙üfN`pQČ˙ūQÉ˙äJ(@f0<"QČ˙ūta€f,4axf&J(@fp|VČ˙ügfüp|VČ˙üfa˙2p`p˙Ž Lß2ū|ø˙J€Nu HįL"@p. ĀfÜIų€Kė|0.ĻoĀüíS€füBnφã~NŅa #2,d0 move.l sv_jbbas(a6),a0 adda.l JûX$CARE / QJUMP Toolkit V2.12  1985 YNAQ&*4DNh ..Y or N? ..Y/N/A/Q?  TO exists, OK to overwrite sectors Job tag owner priority Network aborted . pipe_00256pipeflp1_ flp1_ ser 2Î˙Ę˙ĘĀ( ØĀČ ĀČ T!ĸEDúVIEWJDATA_USE:PROG_USE*DEST_USESPL_USE,DDOWN2DUP"DNEXT¨DLIST$DIR"WDIRÂSTATWSTATDELETEWDE (DāHá˜6ĀS^Āęr’ĀÁ` (¨&!@"!iØPčHpNupüNuJíøf (H‘Čp NC LaHpNCpNC(pNC fXAû  e ŋb a4aB`žCúT‰4g´´föŌŅ/ āBgna` aVgX`¨"_N‘`’a’`J-ųfX`žJuPfa,fÖJFgQESFNuJUgúta^`JuP faf˛ŧmægPERFNut0-æį@JufŠNua"SAARA`arž@žAl J@g&Ūmā`žŪ@Nua 25PÂíčŌGNupJuPgpž@l>NuaŪFAARA`rŪA4-äžBoJuP gžBVG`˙z>Nua´gúaš`VF-úNu ˙Ä $˙Ā˙€˙Â˙ŪÃjČ˙¸˙Ę˙ØĐ˙Ņ˙$ÔâØ˙*Ų˙>Üāö˙Āũ˙DJíųfEíėaĀ85PfĒ-VB­đp#`€NuJ-ųgø85Pa°mr(L2COPYCOPY_OCOPY_NCOPY_H¸WCOPY žSPL ´SPLFPRENAMEžWREN ¨LRESPR ÂLBYTES JCALL ÆSBYTES ¸SBYTES_O ŧSEXEC °SEXEC_O ēCLEAR ŽNEW ĸSTOP ‚RUN NDO RLRUN DLOAD "MRUN MERGE ¨SAVE ¤SAVE_O đEX ęEXEC ÜEW ÖEXEC_W ÆETøOPENôOPEN_INîOPEN_NEWæ OPEN_OVERŪOPEN_DIRDCLOSE:BGETĻBPUTžGET`PUT¸TRUNCATE°FLUSHøJOBS^RJOB`SPJOB`AJOBVRECHP†CLCHP2DEL_DEFB’ PRINT_USINGFCURSEN@CURDISJCHAR_USEXCHAR_INCjWMONjWTVÆ;Dđfaj` ad4-âįJ05Pg ¸@gnaDm\`.2’uPSAmįI¸uo2PA˛BnNJufô05gB¸@m>amļpøP€85gø6-`V¸Um05 g°DNu`J-ųgôaô85Pg„`¸mđg alaÖ;Dđ`Œ25PÂíčŌG$VÔÁ&naâ" ĩËNuH§aÜl" T’‹2xNŠĩËlbJ-úgaĸ`v"KS‰ŗĘlôR‹a„aˆ( ˜–SD¸uPn25PÂíčŌmā˛uPfpEa6ÜfPAé ŧ ˆ˙Cč -˜aŧ/ˆRˆa$"V”‰ La7 p ``Øpr4JCgraZp#aVJDg\¸mđgaÚfP8;Dđa< .–2Âíčf4-ā`XA4Ômča,RC´@m4vRDHĩPüp"VŌÁ”AoND?v˙NC6Nuxv;ƒP;„PRFPENuSFPENuQíųEíęp)v˙NCp'NCp(NCNu8aüä26-8?a>f(—WoaŠf8aœ&.––[ƒ‡íčRC`āBW6DCaTNu"L“î+IÔ;Bō`.(mÔŲî4-ōf46ČpršîlN26Ȳ„ng af˛„møJ€Nua fa˛„gônôTŒØÂšîlÔvČ26ČpNušîo”vȘÂUŒ`č˜ÂULaâpüNuHį <~QîĢ4x8NĒ@Lß0ūNuHįp€ V"H=„˜4xōN’-H;DđLßNup0gøaØPîŽBmōB­Ô"np ŗÖoâ°6˜˙fS‰`ōŧ ˜R‰/.-IHįŒ$mĐN’4x.Ôü@8x,NŦ@m&4x2NĒ@4x6Ô4xōNŌ K`6ˆa5ŠvFCa2úxų¸€fpNuz~`zPÅ`z`z~a4Äfä-IXr˙va3\fÖP‹ģËf &H"nXKú3`/a4˜&_fēKú3:r˙&N•lxø°„fŽa6:fˆvr˙a3vfî`5ĸa5va2|fˆP‹,va2pf/ pNB"_pJ Fa6č`5Üa6(f,v Ka‚fh&Havga>fXvang xø°„fHa^fD`5Fa5úfdv KaTf<&Hag0af,a8 Ka` pJ"L`6Žxø°„fHG Ma5æVÄHGJNuXga K`5dBG M`6ú Lp` aøfv Lpr˙NDNBJ€Nua14"K46˜T‰R‰SB 6_˜˙fô`Ta1aäfÜv KaĖfļ&Ha5&f8/6˜4//"6˜xz| ~aTt ,."gŌü 4xėN’=ŧ ˜"Vt a`˙l Ma5Ôfô`5Â"Ka5$fR Ka˙b`˙VIúūØ`Iú˙~a2Æf6`€~˙`~Iú˙V6NĒ@` . $nŠ]€g06¨`pë4xĘN’"nŧ ˜˙Lß1ū-_J€lQíøNuāˆV@üJŽ$ZLvNuā Ž,‡ €$N 8dlNuāčl€d$p"<tNAJ€f0&HCú˙¨a,a*a(a$a$a &Hp NAAëp NAAëdp"NAAë.p"NANuP‹X‹$I0ã dÔĀ&Ę`6ĀSnėNuKë˙Ę`*K(H|)a LNu"<T/ 4xĀN’&_f|)HXF=CčK,ÃSgWVč5T‰$IģËgéNGõ`h<0ÛS@núGė20`ÛQČ˙ü“Ę5 Eč@†JÚî7\‰" A$azf fJm !]8]6Nu(aX NuHį (H lXa,p,åEî$rS*"AėCî@4xÔN’ La"Lß0€NuJ(4la6afaZR€gėpaa`Ļp÷NuEú afEúBaūfKčHNua0\`~Iú˙da0PfâŽBF` ~Iú˙˛a2”f`8Nuva0äf*/ r(a3Вü(-IX$_06¨gļ¨˜RŠR‰S@nōB6˜Nux˙]H჈“ÉaČ ‹Q€n`&x]H჈ ‹gQ€gQ€gpņ`>P‹a˜f8pNBQ‹aŽf.`4a2\f&-IX&Ir˙va0°mgx˙a˙vpNB"Kr˙va0Úf„a˙`L× Á/HJ‡l TF(Maüä~"nXEé(&VIë@H× IaXD JaR?Dp oa3˜f4Cé26˜gęapfæ LīŒU€=€ČaJaH M"oN‘JGmJ€f`Ā oa3BŪüNu"6ˆßø˙ N0_fPöˆ6ˆRˆg _fōR`îÉK 6˙¸fŧ_¸Nut_(VTŒ oaø‚ČRŒļ˜ČR‰SAnōB6Č&V™ËSŒ=Œ¸LīT‹TŒ KaÖ&H IaÎ"H J8/lPÄtaŽ$Ht_Jo aš$HSnö´6¨pūaV ( *Ā*($š€*ÅpЅäH@ENuJ(4l*aÚa(f$ g&~˙°‡m.ߨ ߨ(šGXõxSEnøJ€NuaĸJ€mö`–@DKčH$M*č8Nuaî*Á*ÂEčH* šŠEENu,(,J(7gŧ¨0l@*($J(6g@J(4la4mH`Hŧ…m>`B*((,(,J(6g J(4mKč BB*üB•Nuŧ…m`˙FJ(4gŧ¨ mŧ…mpaęmnQč4~€åOp@*D…܀Άž€n~š€p˙a˙N*Į*Å!G !G$Ū…!G(a˙Na˙*f2 *Û¨$~˙°‡l~ö°‡fPč7!h$0J(6g!h ,|4pNuIë˙Ę`(K/ hXa _Nu(Y@gmW@n’J(5ga˙$gf2xaūė Hl@4xęNŌpėNurax,(,ŧ¨$mJ(7gŧ¨0lp˙Nuœ¨ 0`TpNupöNuaÔmęR¨,Nu,(,ŧ¨(lØ ¨ TPč4R†!F,ŧ¨$oĘWÃR6˜gv°WÅfR‰R oJf Jal$H`RŠJ6¸gJ/ / a~"_ _f,Jo I6¨g°g Ja@ KaD JaN$H IaH"H KaB&H`–JgJga`a0&H`°pų`pNuJDmøJ6¸gô Ktp_€ČRŒ6ˆgRˆ°fîNu6ˆgRˆ°fôNuag°g ĮIaÃK°gėNu6˜R‰ am zn NuŦ†SPL~˙`~ˇÍgjIú˙ęa,öfb8Įa/œm\n/ v"a.”"_fL(ČP‹ģËga/~m>n0v"a.xg&`0v"a.*lx÷°„f (Ā06˜8Āö˜R‰S@nö`(Čt`,ŧpņNu"`,ÆMî*N>&] ]0l Mpr˙vNBJ€gx÷°Df$pv2NA`äp,€Pîza0–JGg (r a1ä `,rS.‘lB.‘zģËga/Žfn=v˜’B.‘Bn˜B.š`hz|˙J.ofz |a2fFJ.of<.h`z!F$ŧ¨0oĀ!F0`ēpžĐ„m`g S€fZJCfŌ¨,Jnr`DJ(6fü˛¨0o6J(7f*,pB"<˙˙ŋaūaũ–f Pč7"X,ŧ¨0mĐ!F0`Ę"(0pö!A,NuaũĻmHp÷ĐDgŦY@gp@gjQ@mQ@obpŋЄg[€ @b"Đ@EûÔŌNŌJūŪūĖ|Xa vņļ€fpNua*aũ†fö "J€fî$IĶŨtôÔ(EoâŨSnúQč4NuQč4 `ũtaôp$IÚQČ˙üaũjažf¸ĶŨNu"(,!A0Pč7˛¨$n!A$xBaœJ€f–xK`”aē, T~>Ū‰Eë< ÄJ(@fâON’g0m0<ÛQČ˙ū GĐna4fQĪ˙æHį`ĀCúÍ^ŌŅ‘Č4xĐN’Lßp˙Nu @ Gú˙ėagGú˙îHįEpNAÂ#LßĸNua´Ũ¨aJ"hŗčnaĖg|D`FpXgîQČ˙úaĒfFJfBT‰áMšhBYDYFa˜f&¸(Ff p aDJEfa !IJ(Dgž!IaJ`Čp#fQČ˙ú`’pR€fú €^mäREE_MEMORY* CHANNEL_ID4 DATASPACEP SEARCH_MEMORYd ALLOCATION NBASIC_B% FBASIC_W% >BASIC_LBASIC_F . BASIC_POINTER ¤ BASIC_NAME$ ¤ BASIC_TYPE% đ BASIC_INDEX%tEDIT$.EDITFEDIT% DEVICE_STATUS DEVICE_SPACE<GET%FGETF€GET$RINPUT$POSITIONÔSTRING%ÄSTRINGFzSYS_VARSFWINDOW%ä LONGINTEGER$Î LONGINTEGER ° BASIC_ADRˆ TURBO_DUMMYFx TURBO_DUMMY%h TURBO_DUMMY$ PC_FREEMEMpNA(HJŦŦf2rltpNAJ€f&)HŦ$Hp4ĀS@GúŠÛQČ˙üAč$)H°Ač$)H´pNuHį`pNAEč`$R"Ja"ja˙üfė*S…-GX"G`îGņč˛WË˙üf*S…`âpņNuz`ÚRCJƒgöSƒ`ļRCJƒgėSƒ`Ö3ččaRWCfÖ 1č qč$qč f. $H GĩüdpėNuJ€kJ@g S@ØQČ˙üR@J€gčS€`đD€ŅĀÕĀJ@g S@ QČ˙üR@J€gĖS€`đaît˙SCk4"1čX‰JCgUCf&HB41čHB41čP‰-IXpNAJ€g*`*`pņNuaŦSCfô 1čkîfč @pNANua šKé:5čūg€8xāvr˙“ÉpNA.pNA$hL5čJ‡gN@|N”|Ø˙`N”J€fĐRSEfŪNua`f$Hakrtv˙p|NCJ€f~a JpNBNu|v˙ppNCJ€f|0Nu>åOpNA"hxÜąpk‚˙˙˙ ‚110mX†Üŧd!FLNuAúr˙vpNBJ€Nucon~ģËg6¸fa fa˜aĻpNu~a œfģËfÖ v˙NCJ€NupAú<ą fęQČ˙ú ILßNupNAŗČcŗč bNuXLßpųXNu:.Æ`:.Ä|aŦU‰3…č`ā..Xa@ IaPf*6¨`J€fpū*pNB"G`L..XAëģČfüQa qč*1čoę&MPa X&41čoØH–‚eÔU‚kļGņč Bo„$V".’Š mr0R‚Ađ 3 :HB4:<%‚čXŠQÍ˙ø$V"KzÚEÔÅ5€č”ÅQČ˙đzēf0S€Gč˙˙–Â(Iš VČ˙ügÚEÔÅ02č”ÅAđHĀ–€SƒlÎ`FÂSˆ*`˛WË˙üf8"K$H8ŗ VĖ˙üfė*S…-GX"G`XGņč˛WË˙üf*S…`âpņNuz`ÚRCJƒgöSƒ`ļRCJƒgėSƒ`Öaît˙SCk4"1čX‰JCgUCf&HB41čHB41čP‰-IXpNAJ€g*`ė*`æpņNuaŦSCfô 1čkîfč @pNANua šKé:5a ü“Æ3ŧč#ēühč`>4xN’fâz` aÔ:1čTE EücpüNuafz`aĀzSCf†|a 瓯3…č` ta 0fĸa>•ĘSCgSCfb$qč"qčp%`„a f .aSCfHv˙pB"1čNC @˙ög @˙˙fpNu4xN’flNua ŪfėģËfpCrvNCaĐJ€fÚ*` 6|Ø˙pņNua`J€f:4xva`ōaPJ€f*4xva`ōˈ/.HÁہN’ˈ2J€fž…f P(-IXNu*HÁš.`ėaJ€fėU‰< VAöˆ` Ōa VfØ. Kë*aļžf>:Č`&M*GaĒSCf˙r>1čT‰RG .Q€–ž@epûNu41čN@Aņč$VPŠ"J6gļGd˙6˜,6˜†ßßßß Gb\Ač$0Į Æ~P‹ˇÍlNa:fH:6˜g6WEo< E b686˜„ DN0o( Db" 6_˜f(H8Ä8Åö˜R‰SEnöĐüQĪ˙˛NupôNu@8ServerNSV"V-ē˙î˜-ē˙ė˜`ŽaėgIú˙Öa°ft`ĐNupr˙vAú˙ĘNBJ€fÎ*Hvp MNCJ€gR€fępr˙vNA`æap6<č MNCv2`Ö$I Y"$Jn.&IpBvNC"KpFgŽpNC"KJ€f a p4"KNCNup`Np n2g$p6Q‰ IJmpaf$ČpBrvNCrņ°WÚNur˙/ NB$_$ĀHįBaJ"M|)Jfŧa– @˙˙g|Cí$Mr B‚ą($(RSfô"MG`0a˙zfĻaÜfLN@HįBaúaN @˙˙g@"MX‰4x$NĒ@`2pNA,H&|€ apįĀ. @˙â@ LßB|Ā˙pNuLŸ|˙`Ę|-0<čH§ĀCí4x*NĒ@`ÔLŸžWČ˙æNuCí4x*NĒ@`ž"MG`ˆaūŌfūūa2f¤N@HįBaRa¨ @˙˙gšCíB€!á@€!?"MX‰4x&NĒ@0`˙N" ’‹ f4xN’J€f Cf*v˜p`pņJ€NupNA,H.îfú|ShĻm 0< ‹QČ˙ū`đBhĻ&|€ pįĀ. @˙â@ "Mt2SAaNutr‚p<⏂p<ā¸tQÉ˙ėNu~F`~GģËgöP* Kë4xN’fJTŽX01č&M*EĀü(ĐŽ0°Ž4līŠ*6kī‚4xN’fSCföNuzöÚSc:gUf a"ÕÉNuaPŠNuzĐÚ]bGéĀz&ŲQÍ˙üCé v/ NC$Ā$Á“ß$ÉNuptNAJ€Nur@aōf,(HpNAAč<"H g @H@J@fō"Œ(Ø(Ø I`č ŒCúĻ)INuvv`$v`v` v`v`vģËo¸/ Këa*_NuHį €4C4jN’LßPNup`p`pЋgpņXNu?aVU‰=Ÿ˜x`D& a`8rŌ68a<ÖASƒS‰ļ8˙˜SAnōB6˜NurŌTaŲÁU‰=¤˜Unöx`x-Ive.l hs_stackmin(a4),tmp.stack(a2) ssic bsr `€V¨ TURBO_DUMMYPēPOKE_F 8 TURBO_ref , TURBO_objstk TURBO_buffersz IMPLICIT% ū IMPLICIT$ ōEXTERNAL æGLOBAL Ü DATA_AREA Đ REFERENCE Ä WHEN_ERROR ļEND_WHEN Ē RETRY_HEREˆSNOOZE~CATNAP ˆ THROW_AWAYŧCHARGE MOVE_MEMORY" SET_CHANNEL 0DEFAULT_DEVICE üCONNECT ¨EXECUTE † EXECUTE_W ~ EXECUTE_Aœ LINK_LOADˆ LINK_LOAD_W~ LINK_LOAD_AŦ COMMAND_LINE4 DEALLOCATEBTYPE_INĸ SET_POSITIONė CURSOR_ONú CURSOR_OFFŽ SXpNur4xHįpN’Lß"nXNurŌv˜ĶŽXNuzaa K`^JmĮHajĮHf$v˜ē6˜b pFNDNC`4|˙˙r@ԁ$ gD´c$pv"VÁKNDNCĮH(”Á4g"Vaf gĐJ.gR„gÆa /pNB Nuxö¸€fpNupGt@"Vaė"VNuHį@xaūaŌpa paaJLßNuCúÁĸŌĀŌŅ4p`ŧ Ggč"KaĻpaā"L GgÖa–`JGnzpaĘ:ÁhJGnHpv`pvaļ4pvNCJ€göCúÁH1 pahpadf gxßČpaT  cÚ ŋbÔa6a2J.l&CúÁ¸g"¸gJBg¸g ¸gpa `Ē><pNu~˙J—Nur p` 46˜T‰pND/v˙NC&J€NuN@ĶÎa“Î|Ø˙NuHįĀpRˆR‰°`aa ´VČ˙øLßNuÃH ae zc €e ‹bANu .1čÎü(ŪŽ0žŽ4lÜ 6xmÖ @r.,tpNAJ€fÆ(*J†fAúŠ` \ˆ XJûgAúr"H Ga.a(2a"HF2aHa"J…jCúl`Cúba "fŽNua CúP4xĐNŌ4xÎNŌ..XIëģĖgÉMaú &M*L8qč¸ülú&`™ĖTŒaũ  I,80čRD„g`abpNB Fpr˙NDNB-GX`ũāaBg2rņ˛€fprö˛€fPpNB Fr˙pNDNBrô°gäJ€f8 Fpva˙`8paap`rpB`ī’a$fNu"VNDpEaîgrņ°gNuHAz:áÚ…pNuHį@"VpOv˙NDNCJ€f0Cé(6˜:6˜6ĘÄmHDJDgÆÄHCJCfBCڃin*<˙˙pLßNupųNupNAJgpūNu$VEęjBrčIëģĖbøf,vaņÖ40čr´Ac41‚č$VEęjRB°ččRˆRŠQĘ˙ô~GúZa2J€fõXaëZ$HJRfõJ~GúNaCúVN@aöFkõ‚$h˙ú|Ø˙NŌpNA hŦ0*Kg:$a>ԈCčj Ka2J‡gJpčjgGčbKčjŧč1ŧčb‡čE~˙!‡čV`ķ"XpųNu0S@k ˜(R‚QČ˙ø V”ˆ1‚čNu V!ŧ*čtNuHį` Jr˙pNDNBLß`ņVpíNu~F`~GģËg÷* HÄ6 jva*2 klgTUAf\J…` Hį @"HpNA hxÃHr˙pNDNBJ€f$JCf $åJ"1 k"AHB´ifļ)gpNBpėLßNupú`öJ…kjap*kf(a´pNB`XJ…k*pNB Fva’*jzė`aHJ€g k r˙aĸ`pø*pNB @˙ųf$ Fva˙f*jpõē€g`abpNB Fpr˙NDNB-GX`ũāaBg2rņ˛€fprö˛€fPpNB Fr˙pNDNBrô°gäJ€f8 Fpva˙`8paap`rpB`īža$fNu"VNDpEaîgrņ°gNuHAz:áÚ…pNuHį@"VpOv˙NDNCJ€f0Cé(6˜:6˜6ĘÄmHDJDgÆÄHCJCfBCڃin*<˙˙pLßNupųNu V!ŧ*čtNuHį` Jr˙pNDNBLß`ōˆHįā€pNA (§g ŌTfrÂ(§ gp`pLßNupíNuaĘføa.fžN@Kë4xN’fJTŽX01č&M*EĀü(ĐŽ0°Ž4lđJ*6kđB4xN’fSCföÖ 1čföĘ E"@t@v˙ NCNuHįā€JŽTgJ.Tj ŽSBAS˙üfp`pLßNuaövSCf@ qčf8*1č\‰-IX`û`aö^[Cf"01čT‰-IXĀü(ĐŽ0°Ž4l 6jpúNupņNu @"nX/1č/1č"OBBBv˙p NCJ€fP"nXar3čxNuP"nX"ap`ę\‰-IXNuAëģČfŽQ0xNf("nX.1čkšf”&MP0xNf (G(ņč8ąčpNuAëąÍf˙r4xN’f˙h01čV@€HĀŅŽXz`ú† ĒĒdä  PARSER_TASK CODEGEN_TASKCLEARNo nameBASIC, . s Module mismatch E & G at item  in D.P.:TURBO:Ičūg€8xāvr˙“ÉpNA.pNA$hL5čJ‡gN@|N”|Ø˙`N”J€fĐRSEfŪNua`f$Hakrtv˙p|NCJ€f~a JpNBNu|v˙ppNCJ€f|0Nu>åOpNA"hxÜąpk‚˙˙˙ ‚110mX†Üŧd!FLNuAúr˙vpNBJ€Nucon~ģËg6¸fa fa˜aĻpNu~a œfģËfė v˙NCJ€Nua ü“Æ3ŧč#ēųHč`>4xN’fâz` aä:1čTE EücpüNuafz`aĐzSCfœ|a 瓯3…č` Za 0fĸa>•ĘSCgSCfx$qč"qčp%`„a f .aSCf^v˙pB"1čNC @˙ög @˙˙fpNu4xN’f|Nua ŪfėģËf.pCrvNCaĐJ€fÚ*` aÔå‹g׎X/1čLņ?ūčNu|Ø˙pņNua`J€f:4xva`ōaPJ€f*4xva`ōˈ/.HÁہN’ˈ2˙ûf&SA4v˙:g¨//Gú`pNA.*`–paũŌp˙NuSAS‰ 6 ˜fÎ"D<Nu* Kë4xN’fÄ&M*E01čĀü(ĐŽ0°Ž4l $@*6¨ ENuXpúNuJ6¸f06¸įH$nÔĀ06¨(n ØĀ`a (IRŒ~4čRŒ  bjpNA$hŦ J4ĮgSGôčRŒQĪ˙ø~_ž4č˙gĮRPpNuv$VaģËg0* KëJ6¸gHį@4xN’AéLßf`06¸kžįH$nÔĀ06¨ n ĐĀ$//aR$Haž*tų"k pNB g˜˛‚fV$ _a`R&HpNA$hŦ K0g$r0čŌ@ A>b S@š(R‚QČ˙øp0čS@k°č(RˆR‚QČ˙ô V”ˆ=‚ˆNuX J&M*ENuva f@"Vtv˙pGNDNC"EJ€f.$V6¨SNuv* r˙ € @fNDpNB"E @˙ôfpųJ€NuXNu~˙`~`6¸€J€fž…f P(-IXNu*HÁš.`ėaJ€fėU‰< VAöˆ` Ėa @fØ. Kë*a°žf>:`&M*Ga¤SCf˙r>1čT‰RG .Q€–ž@epûNu41čN@Aņč$VPŠ"J6gļGd˙fÂ-ˆ¨&AúˆRˆa˙.f$J3čj>EëģĘf6.aũŒpNB-‡¨=ŧP¨"pNuaū aūÚf$VPö¨F`r E*pNB Nu$V-ˆ¨Faũčaūļf`R$V"6¨V&6¨$6¨*( “ÉpNA"HJ€f0-ˆ¨@J6¨Vj-¨V-¨RŅÂŅÃB`-ˆ¨N Ev˙pHNCJ€fpNB"DNuX`ŽaŦp €¨D6¨Ufb S@š(R‚QČ˙øp0čS@k°č(RˆR‚QČ˙ô V”ˆ=‚ˆNuX J&M*ENuva f@"Vtv˙pGNDNC"EJ€f.$V6¨SNuv* r˙ € @fNDpNB"E @˙ôfpųJ€NuXNu~˙`~`6¸€č€¨Nu~$V‡¨E~˙-‡¨VģËf"aøĘ0R@fčPˆ0R@€ĐĀRˆB6¨`a6.g$V"6¨Vkaā NuIëģĖf˛aũā&k¨AúRˆa˙\fŪ`:J6¸jLaũÂpNBAúÚRˆa˙>fÂ-ˆ¨&AúÔRˆa˙.f$J3čj>EëģĘf6.aũŒpNB-‡¨=ŧP¨"pNuaū aūÚf$VPö¨F`r E*pNB Nu$V-ˆ¨Faũčaūļf`R$V"6¨V G`ūęģËfaB$V6¨Egt"2čVJkpNA0: ę°hŠf pv˙NAp˙Nu"2čVptNAJ€fF“Év r˙pNA`Æ$V" &v¨N 6¨Fl ąü˙˙˙˙fBc`''7< v¨@!K˙ô&A"6¨R6¨Dvp NApNuz` z`z˙`zūaųūSCfn&1čX‰-IXaœN@|J…g fJ…k(U‰g3°8č`Xpņ|Ø˙NuB1č°8č|Ø˙`j 08R…k‘ČAđ|Ø˙*`ôz`20‘ČQgSfä r0`ŪzaØSCfč61čN@|a&S…gĐa:j||Ø˙H†`´pNA hh P hXNuaî$hÕČįKGō0—ȡčj˙`Nu&h ×Č620Aķ0NuaN@a 3č`˙R“Î|KņčaĒ&h ×Č(h$ŲČB01čgCņ( „"D8UDHƒļg ÖÃfôrô`H˛fōEë M:kĩVÍ˙üfāa˙X$H—Ę—ę &6¨$6¨*( “ÉpNA"HJ€f0-ˆ¨@J6¨Vj-¨V-¨RŅÂŅÃB`-ˆ¨N Ev˙pHNCJ€fpNB"DNuX`ŽaŦp €¨D6¨Uf"1čHAv˙ NANuKí˙đģËf&Pa÷ŽP‹PNu4x`4x|Ė6ØųN’†ØųJ€gXpņNu~˙`~`~$V-‰¨J‡¨E~˙-‡¨VaęfĒ v¨@-ˆ¨F!@4-ˆ¨^=€¨ZģËoaĘfŠa`î.6¨Fg" G0(2 @˙˙fa`î°v¨Zm=€¨Z.(4fŪr26¨Z.å‰X$6¨VpNAJ€fB"H"ĀQĪ˙ü$V>6¨ZåO1G.6¨Fg""G0)2gåˆ"0f.!‰#v¨V8.)4fŪ,6¨Fg2"F>)2-‰¨F)"1čHAv˙ NANuKí˙đģËf&Pa÷žP‹PNu4x`4x|Ė6`ė"i.0 @˙˙f&v¨F,+4'H4@=J†`ž°Gg†-‰¨båH°hnČ"0gĀ&A-‹¨NHį€Ā+6¨ZåO1G.6¨Fg""G0)2gåˆ"0f.!‰#v¨V8.)4fŪ,6¨Fg2"F>)2-‰¨F)fęģËfüÂ*`¤aôBUCfü˛"1č$1čÂü(ŌŽ0˛Ž4l˛ v-‚pNB`fˇÍgJ3čkr`B* Këaü^&M*E`(aüNSCfübNuaüBSCfüVžqčfüNT‰NuSCfüD21čT‰-IXÂü(ŌŽ0˛Ž4lD 6k> @pNu~aŧ`t~aļ`Z|"nXaRf"-IX4xN’"nXNuGé˙ū—ÆˇÖjpũ`púXNu“ÆgS‰p$v˙NDNC“ÆJ€Nuaû°a˙x|aÚf x`Đaûœa˙da–aÆf 1čkļpîNuaû€SCga˙D`ra˙L`aûja˙2aÎfÚ`Za¨J€fŌ<1čkûfHÆgT‰T†a˙LU†a˙rfļU‰3†čx``zaˆf&S…`"pNA*`pNA*`pNAajgîAé˙°‘Ö*a˙(rŌ‰R"ANu"v¨J`úúa÷ŧaøŠf4aųÖ"v¨Jt 6¨Yf* Këaũŧ&M*E41č$V"6¨Rvp NAJ€gpņNu"v¨^ v¨@#H4!@4-ˆ¨^Nur˙v`ũ*r`v˙pNCNu`6PH§Á‘ČCú„aî2/6xÎN“Cú†aŪ26xÎN“Cú~aĐLŸƒ6xÎN“$V&v¨boCúpaļaĒSfør aĸp/$V"6¨VvpNA$V"v¨J Nupø`äpų`āHÆađ“ÆgS‰N@Eņč4ÆSFkØQÎ˙ü|Ø˙`v .„g @pNBNua>fúģËfüŌ*`xaôBUCfüÂ"1č$1čÂü(ŌŽ0˛Ž4lš v-‚pNB`fˇÍgJ3čkr`B* Këaün&M*E`(aü^SCfürNuaüRSCfüfžqčfü^T‰NuSCfüT21čT‰-IXÂü(ŌŽ0˛Ž4l, 6k& @pNu~aŧ`Z~aļ`@|"nXGé˙ū—ÆˇÖjpũ`púg8<&փiSD*t&åŖi*˜Bâ‚fō]‰#…č3„čx-IXpNuz˙`zaō`SCfúĐ&1čfōJ…gN@|aøôֈ|Ø˙ C8#čU‰D˙`´púNu~ģËg 4xN’fđ>1čÎü(ŪŽ0žŽ4lÜ 6xmÖ @r.,tpNAJ€fÆ(*J†fAúü` \ˆ XJûgAúä"H Ga.a(2a"HF2aHa"J…jCúŪ`CúÔa "fŽNua CúÂ4xĐNŌ4xÎNŌ..XIëģĖgÉMaųä&M*L8qč¸ülųę`™ĖTŒaũt I,80čRD„HÄ6 jva*2 klgTUAf\J…` Hį @"HpNA hxÃHr˙pNDNBJ€f$JCf $åJ"1 k"AHB´ifļ)gpNBpėLßNupú`öJ…kjap*kf(a´pNB`XJ…k*pNB Fva’*jzė`aHJ€g k r˙aĸ`pø*pNB @˙ųf$ Fva˙f*jpõē€Ač$)H°Ač$)H´Cúú24xN’pNA ‚1.10dCúÖN@a |k ¸EúŒ!J˙ú|Ø˙Cú n0 pč4xĐN’vP` BNu2TURBO TOOLKIT Version 3.37  2003 The TURBO Team Hį`pNAEč`$R"Ja"japAúĸą fęQČ˙ú ILßNupNAŗČcŗč bNuXLßpųXNu:.Æ`:.Ä|ahU‰3…č`ļ..Xaü Iaēf*6¨`J€fpū*pNB"G`4..XAëģČfüQal qč*1čoę&MPa Č&41čoØH–‚eÔU‚kļGņč Bo„$V".’Š mr0R‚Ađ 3 :HB4:<%‚čXŠQÍ˙ø$V"KzÚEÔÅ5€č”ÅQČ˙đzēf0S€Gč˙˙–Â(Iš VČ˙ügÚEÔÅ02č”ÅAđHĀ–€SƒlÎ`FÂSˆ*`˛WË˙üf8"K$H8ŗ VĖ˙üfėfũę`%|dNš¸-@˙ø`ūœ%d NV˙ÜHįåOpNA"hxÜąpk‚˙˙˙ ‚110mX†Üŧd!FLNuAúr˙vpNBJ€Nucon~ģËg6¸fa fa˜aĻpNu~a îfģËfė v˙NCJ€Nua NXJƒg *4ƒJ€o *4ƒ`p%@4`ūŽRĒ4`0Jƒg"BĒ *<ŧįJ€oÚ *<ŧį`Î%|Ēį<`öJƒfTJĒ8fę%|8 JŅüĮė Ž˙ø JŅüĮė PJfXp°‡l$S‡XŽ˙ü n˙ü"JĶüĮė" JŅüĮė P -f.HxHy^\N“.€ JŅÄHPN”PO/ JŅÄHP/ rhNp `4 n˙øJgfRŽ˙ø n˙øJfô`VJƒg *<ƒJ€o *<ƒ`p%@<`ũŒRĒ<`.Hx Hn˙ø/.˙øNšü ąy™tOī `JƒgBĒ@`ũX%|@`öJƒgBĒD`ũ@%|D`ŪJƒgBĒH`ũ(%|H`ÆJƒg %|$`ũ BĒ$`ŽJƒg *LƒJ€o *Lƒ`p%@L`üäJĒLfũā%|L`zJƒgBĒP`üÆ%|P`dJƒg *TƒJ€“Æ3ŧč#ēühč`>4xN’fâz` aę:1čTE EücpüNuafz`aÖzSCfœ|a “Æ3…č` Æa ‚fĸa>•ĘSCgSCfx$qč"qčp%`„a df .aSCf^v˙pB"1čNC @˙ög @˙˙fpNu4xN’f‚Nua 0fėģËf.pCrvNCaĐJ€fÚ*` ˆaÔå‹g׎X/1čLņ?ūčNu|Ø˙pņNua`J€f:4xva`ōaPJ€f*4xva`ōˈ/.HÁہN’ˈ2J€fž…f P(-IXNu*HÁš.`ėaJ€fėU‰< VAöˆ` ėa ’fØ. Kë*aļžf>:`&M*GaĒSCf˙r>1čT‰RG .Q€–ž@epûNu41čN@Aņč$VPŠ"J6gļGd˙HxHy^’N“.€ JŅÄHPN”PO/ JŅÄHP/ rhN-|˙čOī`-|˙č n˙øRŽ˙øH€HĀ-@˙ėfüS‡J‡oXŽ˙ü n˙ü P -gûŪJĒgJĒ@f$JĒgJĒHfJĒ@gJĒHf JĒg:JĒ0g4HxHy^ÜN“.€ JŅÄHPN”PO/ JŅÄHP/ rhN-|˙čOīp°Ēl%|JĒ4g6JĒ0g0HxHy_)N“.€ JŅÄHPN”PO/ JŅÄHP/ rhNBĒ4OīJĒ(gHxNš=J€XOfBĒ( S‡J€gJŽ˙čgä n ‡ n Ž˙üp°ĒLn°p˙°‡f¨p°ĒHxHy/NšĐ„J€Oī g$p°•lVHxHy T/(NšWŒJ€Oī f8$ŧHy]¨Nšā.€Hy] Nšā.€/ / Nš2 / / Nšrt`0B’Hy]—Nšā.€Hy]‘Nšā.€/ / Nš2 / / a|&OīJ•mJƒf TX”"JĶüÆČ"%U\BĒ`J•o4xBŽ˙ė TYH&HBĒd%”x`JĒfŠHxHy /FLOAT$STRING$čTK_VER$ FREE_MEMORYj CHANNEL_ID¸ DATASPACEÔ SEARCH_MEMORYR ALLOCATION <BASIC_B% 4BASIC_W% ,BASIC_LüBASIC_F  BASIC_POINTER ’ BASIC_NAME$ ’ BASIC_TYPE% Ū BASIC_INDEX%bEDIT$EDITFEDIT%r DEVICE_STATUSę DEVICE_SPACE”GET% GETFÚGET$ŦINPUT$~POSITIONSTRING%STRINGFāSYS_VARSžFWINDOW%Ō LONGINTEGER$d LONGINTEGER$TURBO_V ” BASIC_ADRÚ TURBO_DUMMYFĘ TURBO_DUMMY%ē TURBO_DUMMY$l PC_FREEMEMpNA(HJŦŦf2rltpNAJ€fn)HŦ$Hp4ĀS@GújÛQČ˙üNšWŒJ€Oī fn*ˇÔWĀr-@˙ā%|J„gB“Hx K‘ōxHPNšI˛%@\x`JŽ˙ėgB“Hx K‘ęŒHPNšI˛%@` EJ(gT…`PXKJ“g*`FHxHy]ŲNšā.€Aø¤ŅĘHPNš”PO/Aø¤ŅĘHP/ JŅüČ( PNp Lî<ø˙ŧN^NuJĒlg&JĒWĀr%@hB§/Nšč˜&p°ƒPOlB `ĘHxHy]ŗNšā.€Aø¤ŅĘHPNš”PO/Aø¤ŅĘHP/ JŅüČ( PNOīJŽ˙āgĖJĢg,pЋ%€x /Hx rx‘ÔHPNšI˛" %@\`š%|d%ŧ˜ŪxBĒ\`”JŽ˙ėfzHy /NšzJ€POfd-|˙ėˇōxf%ŧ˜ŪxBĒ\`J„gB“Hx K‘ōxHPNšI˛%@\xpЋ%@Œ /Hx jŒ‘ÔHPNšI˛" %@``xXKJ“T‰T†a˙LU†a˙rfļU‰3†čx``zazf&S…`"pNA*`pNA*`pNAa\gîAé˙°‘Ö*a˙(g8<&փiSD*t&åŖi*˜Bâ‚fō]‰#…č3„čx-IXpNuz˙`zaōSCfú”&1čfōJ…gN@|aø¸Öˆ|Ø˙ C8#čU‰D˙`´púNu~ģËg 4xN’fđ>1čÎü(ŪŽ0žŽ4lÜ 6xmÖ @r.,tpNAJ€fÆ(*J†fAú` \ˆ XJûgAúđ"H Ga.a(2a"HF2aHa"J…jCúę`Cúāa "fŽNua CúÎ4xĐNŌ4xÎNŌ..XIëģĖgÉMaų¨&M*L8qč¸ülųŽ`™ĖTŒaũt I,80čRD„HÄ6 jva*2 klgTUAf\J…` Hį @"HpNA hxÃHr˙pNDNBJ€f$JCf $åJ"1 k"AHB´ifļ)gpNBpėLßNupú`öJ…kjap*kf(˙čHykiN“.€Aø¤ŅĘHPN”Oī/Aø¤ŅĘHP/ JŅüČ( PNOīp°‡fHxHykŽN“.€Aø¤ŅĘHPN”PO`"J‡o:Hx/HykŦN“.€Aø¤ŅĘHPN”Oī /Aø¤ŅĘHP/ JŅüČ( PNOī ЅІJ€f2HxHykÍN“.€Aø¤ŅĘHPN”PO/Aø¤ŅĘHP/ JŅüČ( PNa .˙ā`úČNVHį0EųžjGųWŪNš˛¤HxB§Nšč˜ JŅüƤJgNšŪÖ JŅüƤB JŅüČJg JŅüČ/N“ JŅüČBXO JŅüĮŧJg JŅüĮŧ/N“ JŅüĮŧBXO JŅüĮ´Jg JŅüĮ´/N“XO JŅüÆŦJg JŅüÆŦ/N“ JŅüĮ´B JŅüÆŦBLî ˙øN^Nuwarning: cannot set time for %s %sEmpty zipfile. Archive: %s a´pNB`XJ…k*pNB Fva’*jzė`aHJ€g k r˙aĸ`pø*pNB @˙ųf$ Fva˙f*jpõē€g`abpNB Fpr˙NDNB-GX`ũāaBg2rņ˛€fprö˛€fPpNB Fr˙pNDNBrô°gäJ€f8 Fpva˙`8paap`rpB`ī@a$fNu"VNDpEaîgrņ°gNuHAz:áÚ…pNuHį@"VpOv˙NDNCJ€f0Cé(6˜:6˜6ĘÄmHDJDgÆÄHCJCfBCڃin*<˙˙pLßNupųNupNAJgpūNu$VEęjBrčIëģĖb÷Ūf,vaņš40čr´Ac41‚č$VEęjRB°ččRˆRŠQĘ˙ô~Gú`a2J€fõaë$HJRfõ~GúTaCú\N@aö kõF$h˙ú|Ø˙NŌpNA hŦ0*Kg:$a>ԈCčj Ka2J‡gJpčjgGčbKčjŧč1ŧčb‡čE~˙!‡čV`ōæXpųNu0NV˙ĀHį"JĶüĮ<0°Pgž JŅüĮ>"JĶüĮ<0°PcVHx JŅüĮ>B€0/ JŅüĮB€0/ JŅüĮb S@š(R‚QČ˙øp0čS@k°č(RˆR‚QČ˙ô V”ˆ=‚ˆNuX J&M*ENuva f@"Vtv˙pGNDNC"EJ€f.$V6¨SNuv* r˙ € @fNDpNB"E @˙ôfpųJ€NuXHPN”PO/ JŅÄHP/ rhNNšīÎOīB§HycņN“.€ JŅÄHPN”PO/ JŅÄHP/ rhNOīB§HydUN“.€HydN“.€ JŅÄHPN”Oī / JŅÄHP/ rhNRŽ˙ÜOīB§Hyd’N“.€HydN“.€ JŅÄHPN”Oī / JŅÄHP/ rhNRŽ˙ÜOīB§HydÍN“.€HydN“.€ JŅÄHPN”Oī / JŅÄHP/ rhNRŽ˙ÜOīB§HydũN“.€HyHxHxHyd×N“.€ JŅÄHPN”Oī/ JŅÄHP/ rhNRŽ˙ÜJŽ˙Üf6B§HydNN“.€HydN“.€ JŅÄHPN”Oī / JŅÄHP/ rhNOīOīB§HydN“.€ JŅÄHPN”PO/ JŅÄHP/ rhNHy]‘N“.€NšUŽ*OīB§J…g EJf HydNN“XO/Hy]‘N“.€HydCN“.€ JŅÄHPN”Oī/ JŅÄHP/ rhNNu~˙`~`6¸€č€¨Nu~$V‡¨E~˙-‡¨VģËf"aø`0R@fîPˆ0R@€ĐĀRˆB6¨`a6.g$V"6¨Vkaā NuIëģĖf¸aũā&kŽAúūRˆa˙\fŪ`:J6¸jLaũÂpNBAúÖRˆa˙>fÂ-ˆ¨&AúĐRˆa˙.f$J3čj>EëģĘf6.aũŒpNB-‡¨=ŧP¨"pNuaū aūÚf$VPö¨F`r E*pNB Nu$V-ˆ¨Faũčaūļf`R$V"6¨V&6¨$6¨*( “ÉpNA"HJ€f0-ˆ¨@J6¨Vj-¨V-¨RŅÂŅÃB`-ˆ¨N Ev˙pHNCJ€fpNB"DNuX`ŽaŦp €¨D6¨Uf/Hy[ŦN’.€pЇ/HxHxHxHye N’.€ LŅÄHPN“Oī/ LŅÄHP/ thNOī/HyfūN’.€Hy4Hyf@N’.€ LŅÄHPN“Oī/ LŅÄHP/ thNOī/Hy_°N’VÍ˙üfāa˙X$H—Ę—ę 8 SD j"*’ˆæ:Aōˆ¸PPˆWÍ˙úgrų`’E‡0HĀNuaĖSCfÜ61čN@|a˙20g fR3€č`ūŠa˙H€Ö@30 %fp`āp $gØR@`Ôv˙r˙`apSCfr˙` UCfz"1čHAX‰61č“Ép`4aPSCfr˙` UCfZ"1čHAX‰41čp `~ `~a,UCf>"1čHAv˙ NANuKí˙đģËf&Pa÷˜P‹PNu4x`4x|Ė6ØųN’†ØųJ€gXpņNu~˙`~`~$V-‰¨J‡¨E~˙-‡¨VaęfĒ v¨@-ˆ¨F!@4-ˆ¨^=€¨ZģËoaĘfŠa`î.6¨Fg" G0(2 @˙˙fa`î°v¨Zm=€¨Z.(4fŪr26¨Z.å‰X$6¨VpNAJ€fB"H"ĀQĪ˙ü$V>6¨ZåO1G.6¨Fg""G0)2gåˆ"0f.!‰#v¨V8.)4fŪ,6¨Fg2"F>)2-‰¨F.€Hyg)N’.€ LŅÄHPN“Oī / LŅÄHP/ thNOī/Hy_ĐN’.€//Hy_ąN’.€////HyhZN’.€ LŅÄHPN“Oī(/ LŅÄHP/ thNOī/Hy_ZN’.€Hy_ZN’.€Hy_aN’.€Hyj N’.€ LŅÄHPN“Oī/ LŅÄHP/ thNJŽgp `pLîø˙ÜN^Nuss were was.zip_zip NV˙ÜHįHxHyjĖN“.€Aø¤ŅĘHPN”PO/Aø¤ŅĘHP/ JŅüČ( PNpLî<ø˙¸N^Nu JŅüÆŦ PAč "JĶüÆä"ˆ JŅüÆčŧP JŅüÆōŧP JŅüÆíŧP JŅüÆéŧK JŅüÆķŧK)fęģËfü†*`¤aķđUCfüv"1č$1čÂü(ŌŽ0˛Ž4l˛ v-‚pNB`fˇÍgJ3čkr`B* Këaü"&M*E`(aüSCfü&NuaüSCfüžqčfüT‰NuSCfü21čT‰-IXÂü(ŌŽ0˛Ž4lD 6k> @pNu~aŧ`t~aļ`Z|"nXaDf"-IX4xN’"nXNuGé˙ū—ÆˇÖjpũ`púXNu“ÆgS‰p$v˙NDNC“ÆJ€Nuaûta˙x|aÚf x`Đaû`a˙da–aÆf 1čkļpîNuaûDSCga˙D`ra˙L`aû.a˙2aÎfÚ`Za¨J€fŌ<1čkû*HÆgĸ/.˙ÜN•Hxađ&Oī p°ƒfR†`pL°ƒfR‡`p °ƒg JƒgR…`R„ļŽ˙āo-C˙āPO JŅüÆČ/NššäJ€XOgtp°ĒJĒDgJ’g4JĒ@gp°Ē<]Ārf HxHxHyŦ/ JŅüČ( PNOīp°„m°„f^ .˙čЇЅІJ€oPHxp°„f <` <–//HyjķN“.€Aø¤ŅĘHPN”Oī/Aø¤ŅĘHP/ JŅüČ( PNOīJ†oPHxp°†f <ļ` <”//HykN“.€Aø¤ŅĘHPN”Oī/Aø¤ŅĘHP/ JŅüČ( PNOīJ…oPHxp°…f <ļ` <”//HykIN“.€Aø¤ŅĘHPN”Oī/Aø¤ŅĘHP/ JŅüČ( PNOīJŽ˙čoTHxp°Ž˙čf <ļ` <”//.o˙J†f”JĒ0€XOpЇ/N“ JŅüĮ@0€XOp Ї/N“ JŅüĮB0€p Ї/NšĐ JŅüĮD €pЇ/NšĐ JŅüĮH €Oī pЇ/N“ JŅüĮL0€ JŅüĮH  JŅüĮDА%@xp`˙NV˙üHį Eųžjv JŅüĮLJPgrJĒTnJĒTffJĒDf`JĒHxHy\ØN“.€/2xHy\KN“.€ JŅÄHPN”Oī/ JŅÄHP/ rhNp`ųj JŅüÆØ °Ž˙Āg‚B§/.˙Ā JŅüÆĐ/NšM< JŅüÆØ €Hx JŅüÆŦ/ JŅüÆĐ/Nš;î JŅüÆ´ €Oī np3`ų .˙Ä JŅüÆŦА JŅüư € JŅüÆ´ .˙đOī `: JŅüÆ´"JĶüư "JĶüÆŦ‘Ž˙ÄҐ .˙Ä JŅüÆŦАJm"JĶüư QR‘B€`N”ë ˆ€P…ēŽeŌ F€ĀŽ˙ä"ЀЁЀЮ&@B€&p°ƒdxpc°ƒg˙ B€+āŦĀŧ˙š€p–€`( JŅüÆ´SJm"JĶüư QR‘B€`N”ë ˆ€P…ēƒeÔ Ѐ05Āŧ˙˙"FĀ"ЀЁЀĐĢ&@B€&p°ƒeˆB€+āŦĀŧ˙š€B€0+-@˙ôJƒg@`( JŅüÆ´SJm"JĶüư QR‘B€`N”ë ˆ€P…p°…bŌ <˙Ā„ŅŽ˙ôāŒQ… .˙ô‘Ž˙ü <€/Îŧ˙ŧ‡d"`" &ļŽ˙ôc .˙ô&—Ž˙ôJŽ˙Ôg ŧ‡b/B§ JŅÆHh¤NšMö܃ۃOī `: ‡ļ€b/ JŅĮHh¤ JŅÆHh¤NšT¤`Ô GR‡ŅĘ"FR†ĶĘh¤¤SƒJƒfčŧŧ€fB§/Aø¤ŅĘHPNšž€BŽ˙Ô|Oī JŽ˙ôf˙HJŽ˙ünüdB§/Aø¤ŅĘHPNšž€ JŅüÆ´ JŅüư €J’g*NšyŪ*p °Ē lVB§HxHyŦ/ rhNOī`JĒ@fšJĒJĒg8JŽ˙ėg `.JĒ0f`JĒ0f JĒHgJŽ˙ėgūJĒ4f-|˙čJŽ˙čgÄHxAøF¤ŅĘHP <ĮČЊ/N•PO/HywąN“.€ JŅÄHPN”Oī / JŅÄHP/ rxNHyš*Hx Aø•ŅĘHPNš-|€\˙Žž|e8| ˙†|(˙‡Hx KHh Hn˙ˆNšR |)˙ŒB.˙Oī `-|€\˙ŽB—Hn˙†/.˙ŽpЋ/NšĪėXOĀŧ˙˙/ .˙‚å€ @Ņü"/N”.€HyŒŠ`Đž|e\BŽ˙.B.˙2pĀgHyúN”.€Hn˙2NšVRŽ˙.POpĀgNHn˙2NšX-@˙*JŽ˙.g n˙*RŽ˙*Cî˙2ŅÉŧ/.ŧŽN”.€ .˙*Aî˙2Ј/NšVRŽ˙. nXPOpĀgNHn˙2NšX-@˙*JŽ˙.g n˙*RŽ˙*Cî JŅüÆ´ € JŅüĮˆ ŧ JŅüĮŒ Ž JŅüĮ Ž 0POgQ@gJJĒ@gÔB€0á€r€(` JŅüÆ´/ JŅüư//.NšT¤ JŅüĮÄ Ē|Oī `Ō JŅüĮÄBNšąô.gnJĒ@fZHxHyzSN“.€p°‡fHyz!`Hyz7N“.€HyzN“.€ JŅÆHPNš”Oī/ JŅÆHP/ JŅüČ( PNOīp°‡fp`p( JŅüĮÄJgB`@HxB€0/Hy|bN“.€ JŅÆHPNš”Oī / JŅÆHP/ JŅüČ( PNxOī JŅüư Ž˙ü JŅüÆ´ Ž˙ø JŅüĮˆBJ„fr JŅüĮÄ//.B§Nšņœ&ļŽ˙ęgTJĒ@g(<`FHx/.˙ę/ JŅüÆĖ/Hy|¤N“.€ JŅÆHPNš”Oī/ JŅÆHP/ JŅüČ( PNx Lî ø˙ĘN^NuNVHį ˙2ŅÉŧ/.ŧŽN”.€ .˙*Aî˙2Ј/NšVRŽ˙. nXPOJŽ˙.o„B§p°Ž˙.f <|Ū` <u™/Hn˙2HyČ`ž|eTHxHy€W/ NšWŒJ€Oī f8B€+-@˙&B€0".˙&Ōŧ ˛€n .˙&Z€s˙% .˙&Z€B3B§ .˙&Đŧ 3Āŧ˙/ .˙&Đŧ 3Āŧ˙/ .˙&Đŧ 3Āŧ˙/ .˙&Đŧ 3Āŧ˙/ .˙&P€3Āŧ˙/ .˙&^€3Āŧ˙/ .˙&\€3Āŧ˙/.˙%H€HĀ/pЋ/HyŽN”.€ JŅÄHPN•Oī,/ JŅÄHP/ rXN .˙&Z€Ž˙%`lž|e&B§+Ā<g <€T` <|Ū// NšĐ.€HyŽ~N”.€ JŅÄHPN•Oī/ JŅÄHP/ rXN+Ā<f nB`ž|eŧ&. Eųžj JŅüĮļc p2Lî˙øN^Nu//. JŅüĮŒ/NšT¤ JŅüĮŒ× JŅüĮ— JŅüĮÄאp`žNV˙øHį0$n&n `609™tĀ|g /g .fRJü_`  dü^Đ<@Ā`ÚJfÆB . Lß N^NuNV˙ĐHįBĒBĒ@BĒT`âJ…o JŽ˙Ôfp` %@J…o JŽ˙Đfp` .˙Ü%@@`ļ%F%G@`Ŧũô˙ ˙ ˙ ũúū˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ū(˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ūz˙ ˙ ˙ ˙ ˙ ˙ ūÎ˙ ˙ ˙ ˙ ˙ ˙˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ū>˙ ˙ ˙ ūZūj˙ ˙ ˙ ˙ ˙ ūū ˙ ūä˙ ˙ ˙ ūôareisentriesentrysNV˙üHį8Eųžj&<¤GųāIų”(< JŅüĮ4 ĀŧĀr â¨6Ā|gā n˙ög n˙ög n ˙öfpB§pĀCg <É` <ø/p ĀCĀŧ˙˙/Hy‹^N”.€HxXUHyuˆHyzN”.€ JŅÄHPN•Oī/ JŅÄHP/ rXN np ĀCĀŧ˙˙Ґ`RJn˙öfPpĀCfJB§HyøHxHy‹^N”.€HxXUHy€DHyzN”.€ JŅÄHPN•Oī/ JŅÄHP/ rXNOī JŅüĮ.JPf B§Hy`bB§Hy9N”.€ JŅÄHPN•PO/ JŅÄHP/ rXNHx JŅüĮ.B€0/NšČb-@˙üPOg-n˙ü˙øp°Ž˙ümôúOīB§Hy†N”.€ JŅÄHPN•PO/ JŅÄHP/ rXN .˙ø`ôĖ %s %s %7lu%3d%%%c%s %s %7lu batcmdbtmexecom.r.-... %d.%d%d.%d%03uNV˙¸HįB€˙Ėz-Iî˙ÜKų”BŽ˙ôAųĮŅĘ h dAųĮŅĘ0(`p =@˙ō j =h˙đ JŅüĮB@>0.˙ōĀüĐŧ‘õ/Hn˙ĮNšV n˙ōPOf:AųĮŅĘ0(Ā|gp8`p4@˙ČAųĮŅĘ0(Ā|gp3`p2@˙Ę`X n˙ōf* JŅüĮB€0â€r=@˙ÄĀŧ˙˙ @Ņü‘¤P˙Ę`& n ˙ōe JŅüĮB€0/Hy™ĢHn˙ČN•Oī x`ŧ HR„p°„nōB+ JŅüĮ4 B@H@Āŧ˙˙60.˙đAųĸ^°|bęĐ@ĐđNĐx`B4HR„p °„nô0<ĀCgŧR0<€ĀCg |W|Dp@ĀCg|Ep ĀCg|RpĀCg |W|DpĀCg|EpĀCg|RpĀCg |W |D pĀCg|E , BŽ˙ŧx`.BŽ˙Ā`J4Hg FR†´HRŽ˙ĀR„pz!`Hyz7N“.€HyyũN“.€ JŅÄHPN”Oī`Đ|g@|°gB|?˙Ę0<ĀCgXKYn˙šžn˙šPOcHHx!B€0.˙š/B€0/B€0.˙˜/HyŠEN”.€ JŅÄHPN•Oī/ JŅÄHP/ rXN>.˙šOī0.˙˜_@gĸU@gϐ|L8g¨Đ|îgĒĐ|DGgŦ|M=gŽĐ|M,<‹ē`6,<‹Á`.,<‹â`&,<‹į`,<‹đ`,<‹÷`,<Œ`,<ŒB§B€0//N”.€B€0.˙˜/HyŠõN”.€ JŅÄHPN•Oī/ JŅÄHP/ rXN0.˙˜| OīgH|L8gBĐ|îgj|ögĸ| grĐ|.Pgr|?=g˜|–gúĐ|§ôg4Đ|gv`îž|e  n ˙˜f,<Œ&`,<2B§/ NšĐ.€/`ž|erB§/ NšĐ.€HyN”.€ JŅÄHPN•Oī / JŅÄHP/ rXN`pž|e4pЋ/NšĪėĀŧ-@˙‚B.˙†p°Ž˙‚l-|˙‚HxHy€ą/ NšWŒJ€Oī f -|€˛˙Ž`DHxHy€Ŧ/ NšWŒJ€Oī f -|€Ĩ˙Ž`HxWŪXO gfx`T å€J´fHHx å€ @ŅęŒ/Hy\ĢNšā.€ JŅÆHPNš”Oī / JŅÆHP/ JŅüČ( PNOīR„¸Ē`mĻ/ NšWŪJn˙æfp°…mz `ú€may be .%02xunZPITversionVMSVXABKEYVKEYXABPROVPROXABRDTVRDTXABDATVDATXABFHCVFHCXABALLVALLVFABarcdir lab sys hid rdo binaryebcdictextnoyesnot NVūüHįB§ JŅüĮ8  n/Hyƒ­N”.€ JŅÄHPN•Oī / JŅÄHP/ rXNOī JŅüĮ*B€0 JŅüĮ8А JŅüĮ,B2Ё JŅüĮ.B2Ё JŅüĮ"АĐŧ n €Hx˙ū/NšIŽ//B€0.˙ú/Hy×N’.€/N• Lî<ø˙ČN^NuNV˙ÄHį JŅüÆ´SJm"JĶüư QR‘B€`NšŊJ-@úŧp˙°Žúŧg˙N .úŧ順€P„p°„bŧpƒX€-@˙Øč‹Y„žŧ b˙&p °Ž˙Đe˙|`b JŅüÆ´SJm"JĶüư QR‘B€`NšŊJ-@ú¸p˙°Žú¸gūä .ú¸é †€P„p°„bŧpƒ"å AŅü’b"å+€æ‹W„R†ŧŽ˙ØeÖ` å€ @Ņü’b å€BĩR†p°†bä(ŧ/ / B§B§HxHx/ at*J”fzJ…g p°…f(` .˙ĐЇ-@˙ė Ѐ @Ņü[ŠB€0-@˙đBŽ˙ôz0R€/B€02hR€/Hy%N“.€ JŅÃHPN”Oī/ JŅÃHP/ rHNOīB§ JŅüĮD/ JŅüĮD/ JŅÆ hf <u“` <u‹/ JŅüĮBB€0/Hy´N“.€ JŅÃHPN”Oī/ JŅÃHP/ rHNOīB§ JŅüĮH/ JŅüĮH/Hy€7N“.€ JŅÃHPN”Oī/ JŅÃHP/ rHNOīJrxf*B§Hy€|N“.€ JŅÃHPN”PO/ JŅÃHP/ rHN`ūB§B€02x/Hy€œN“.€ JŅÃHPN”Oī / JŅÃHP/ rHNOīB§Hy€æN“.€ JŅÃHPN”PO/ JŅÃHP/ rHNHxB€02x/NšČbJ€POgzOīB§Hy2N“.€ JŅÃHPN”PO/ JŅÃHP/ rHNJ…gZB§Hy~`˙2JĒTgHJrxgBHxB€02x/NšČbJ€POg*HxHy¤N“.€ JŅÃHPN”PO/°Ž˙Ānä FR†ŧ,RŽ˙ŧp°Ž˙ŧnĘS† Fŧ F‘Ëp °ˆol`2 JŅüĮ4 Āŧ˙6Hx B€0/NšIŽ/Hx B€0/NšI˛/Hy™“/ N•pĀCg `pw@pĀCgph` @pĀCgps` @p ĀCgpa` @pĀCOīg ŧd|x`…pĀCgŧV`ÂHx. <ĮČЊ/NšAT,POgĻR†HxHy™/NšĐ„J€Oī gjHxHy™‹/NšĐ„J€Oī gPHxHy™‡/NšĐ„J€Oī g6HxHy™ƒ/NšĐ„J€Oī gHxHy™/NšĐ„J€Oī f |x`0< ĀC|gĐ|gŧ?0<€ĀCgph` ŧd`î…`ę @p@ĀCgps` @p ĀCgpp` @pĀCgpa` @pĀCgpr` @pĀCgpw` JŅÃHP/ rHNz Lîø˙ÜN^Nu-NV˙ĘHįHx/Hy\Nšā.€ JŅÆHPNš”Oī / JŅÆHP/ JŅüČ( PNp`”Nš)Đ&fŠHx JŅüĮ*B€0/N•&POg *p°ƒmæJĒdfÔ jˆYH-H˙ÖBŽ˙ø`N/* n˙Ö/ <ĮČЊ/Nšˇ˜J€Oī g,-|˙ø g,Hx n˙֑ęˆHPNšI˛å€'ŧ @pĀCgpe` @pĀCgpd` @`:0<đĀC|@g4|@g4| g2Đ|@g2Đ|@g2Đ|g2|°g2ŧ?0<ĀCg,pr`*ŧd`î…`ęŧl`äŧb`Ūŧc`Øŧp`Ōŧs`Ė @p ĀCgpr` @pĀCgpr` @0<€ĀCgpw` @pĀCgpw` @pĀCgpw` @p@ĀCg0<ĀCgps`px`0<ĀCgpS` @pĀCg0<ĀCgps`px`0<ĀCgpS` @pĀCg0<ĀCgpt`px`0<ĀCgpT` @ Hx B€0/NšIŽ/Hx B€0/NšI˛/Hy™Ĩp Ћ/N•OīB§ JŅüĮ&/B€0.˙đå€Đŧ‘Š/Nšā.€/ Hy™sAø¤ŅĘHPN•Oī/Aø¤ŅĘHP/ JŅüČ( PNOīB§AųĮŅĘ0(Ā|` XŽ˙Ö n˙ÖJfĻJŽ˙øgb jŒYH-H˙Ō`J/* n˙Ō/ <ĮČЊ/Nšˇ˜J€Oī g(BŽ˙ø g,Hx n˙Ō‘ęŒHPNšI˛å€)ŧ` XŽ˙Ō n˙ŌJfĒJĒdfJŽ˙øg  * S€gS€gS€°ŧcÖ_€gØ`NšŨB JŅüĮ,JPg"B§ JŅüĮ,B€0/N•&POg *p°ƒm¨ JŅüĮ.JPg"B§ JŅüĮ.B€0/N•&POg *p°ƒmz JŅüĮ" ŅŽ˙â JŅüĮ& ŅŽ˙Ū JŅüĮ0Ā|gp ‘Ž˙âRn˙æR„ JŅüĮBB€0¸€mũ˜HxAøŅĘHPNšŧDJ€POf`ũ’a~&`„B§/HyĘNšā.€ JŅÆHPNš”Oī / JŅÆHP/ JŅüČ( PNHn˙Úa€&Oī`R JŅüĮ,JPg"B§ JŅüĮ,B€0/N•&POg *p°ƒm” JŅüĮ.JPg˙B§ JgAųĮŅĘ0( Ā|gpT`pB`AųĮŅĘ0( Ā|gpt`pb/Hy™pAø¤ŅĘHPN•Oī /Aø¤ŅĘHP/ JŅüČ( PN JŅüĮ,JPOīf* JŅüĮ4 Āŧ€g n˙đg n˙đg n ˙đfp`p(B§J„gAųĮŅĘ0(Ā|gpX`px`AųĮŅĘ0(Ā|gpl` /Hy™pAø¤ŅĘHPN•Oī /Aø¤ŅĘHP/ JŅüČ( PNp°Ē fR JŅüĮ"-P˙¸ JŅüĮ0Ā|gp ‘Ž˙¸B§Hx /.˙¸ JŅüĮ&/NšÜŦPOZ€/NšI˛/Hy™j`p°Ē fB€0ę€r?<pĀSĐ@=@˙ôJCgļ| c"B€0/HyŌN’.€Hn˙đN•Aî˙đ*Oī `B€0S€å€Đŧ’1/N’*XOp °šžŠl4B€0.˙ô/B€0/B€0/B€0.˙ú//B€0.˙ūĐŧl/Hyí`pJšžŽg8B€0.˙ô/B€0/B€0/B€0.˙ú/B€0/B€0.˙ūĐŧl/Hy‘`0B€0/B€0/HxdB€0.å€ @Cî˙¸ŅÉ ‘Žú6JŽú6m(R„ .ú6Ѐ-@ú6¸ƒeØ å€ @Cî˙¸ŅÉ ‘Žú6JŽú6lp`˙d å€ @Cî˙¸ŅÉ .ú6Ґx-DúBEî˙ŧAîúF-Hú:` ؀ nú:XŽú: „SƒJƒfėOī Hx€B§Hnú†NšMö$nv(g"å ACîú>ŅÉ Rå€ @Cîú†ŅÉ ƒRƒļŽ eØ .˙Ŧå€ @Cîú>ŅÉ-P v-Cú>Eîú†-|˙˙˙˙˙¨BĢ˙ü~BŽ˙|BŽú2`’ å€ @Cî˙¸ŅÉ-P˙ü`n .˙¨RŽ˙¨å€ 3Ū€ .˙Ŧ‡-@ú2°”c -@ú2 .˙üR€r$”‡(éĄ-A˙°˛€cB .˙üR€‘Ž˙° å€Aî˙¸Đˆ-@ú:` XŽú: nú: .˙°Đ€-@˙°°c nú: ‘Ž˙°R„¸Žú2eØ Є°Ž˙´cžŽ˙´d .˙´‡(pé -@ú2 .˙¨å€'„ .ú2"ЀЁЀ\€/NšWŽ,XOfJŽ˙¨g/.˙aĖp`ũÄ .ú2R€ŅšfrpІ n €pІ-@ p„`| ˙īHx pЄ/NšI˛(pd°„fHy–]N“.€Hn˙åN”PO` /.˙īH€HĀ/Hy–VN“.€Hn˙åN”OīJŽ˙āgBB§p°Ž˙Đf <ŅY` <ŅL//.˙ĐHn˙å/.˙ž/.˙ēHy—ŽN“.€ JŅÅHPN”Oī`8B§p°Ž˙Đf <ŅY` <ŅL//.˙Đ/.˙ēHy˜2N“.€ JŅÅHPN”Oī/ JŅÅHP/ JŅüČ( PNOīHxAøŅĘHPNšŧDJ€POgųœHx <ÆōЊ/AøŅĘHPNšWŒJ€Oī g0HxHy[ŧN“.€ JŅÅHPN”PO/ JŅÅHP/ JŅüČ( PN|JŽ˙Đfp°†m| `ų6NV˙úHį0Gųžj <ĮČЋ/NšX$@J€XOg> JŅËŅüĮĮļ</g( k J¨ f"Hx/ <ĮČЋ/NšU–J€f ļ<\fp`pLî ˙îN^NuNV˙ĖHįŅÉ ƒ .˙¨S€å€spЄ€+Fpī S€Āƒ"$.˙¨S‚å‚’ŗ(â¨( M .˙¨S€å€"@/Aî˙ĶČ"Q "ЀЁЀĶĀ _"Ø2Ø .˙¨å€ 3Їē€nūt ‡@ . å€Aîú†ĐˆĩĀeŧc`H .°’c ’dp`p€ JXJ;h`$ ŽЀ @Ņî¨ ŽЀ @Ņî;Pp"’‡ã -@˙° î¨(` M "ЀЁЀІ"@"Ø2Ø .˙°Ø€¸Žú2eāp"Sã (`šƒâŒ Ā„föšƒ`SŽ˙¨ .˙¨å€ 3ž€ .˙¨å€ @Cîú>ŅÉpī S€Āƒ°fÖ .˙üSŽ˙üJ€f˙R…ēŽ˙Ŧoũj(“JŽú6gü p°Ž˙Ŧfü`ûūNV˙øHį0$n`]J&j/ NšWŪ$KXO fępLî ˙đN^NuNV/././. a r˛€WN^NuNV˙ėHį<$nx nBB•Aî˙Ø%H |` JŅüÆāJg JŅüÆā/NšWŪ JŅüÆāBXOHx JŅüĮ,B€0/NšČb&POg (p°ƒmîJĒdfj jˆYH(Hz`"/* / <ĮČЊ/Nšˇ˜J€Oī gz`XLJ”fØJ…g2 jŒYH&H`"/* / <ĮČЊ/Nšˇ˜J€Oī gz`XKJ“fØJĒdfJ…gBaũœJ€f: JŅüĮB€0/ JŅüĮB€0/Nš&n *.Kųo¨.<ˇļ JRJB€&fJWĀrLî<ø˙ČN^Nup?°ƒfJg^/pЋ/`Đp*°ƒf$Jfp`Đ// / GN&Oī fžRKJfčp`´p[°ƒf&Jg !g ^fp`p,ÕÆ(Jx`J„gx` \fx` ]gRLJfâ ]fØv -WĀr(`ŧJ„f \fx`ĒJ„f -f JSHB€&`’J…g B€*€ UŅųđĀ<gp Е` `B€-@˙ė *-gXJƒg `B€&`@J…g*ƒ UŅųđĀ<gp Е` ` °Ž˙ėfJ†f,/pЋ/pЌ/`œRƒB€ļ€c¸x&RJĩĖe˙BJ†fÔp`ūŠp\°ƒf JRJB€&gčJ…g B€*€ UŅųđĀ<gp Е` `B€?J…g B€*€ UŅųđĀ<gp Е` ÆJ-@˙Ė n °Ž˙Ėl Ž˙ĖR•PO JŅüĮ.JPg*B§ JŅüĮ.B€0/NšČb&POg(p°ƒl `ũäR† JŅüĮBB€0ŧ€eũļHxAøŅĘHPNšŧDJ€POgũ´Hx <ÆōЊ/AøŅĘHPNšWŒJ€Oī g8HxHy[ŧNšā.€ JŅĮHPNš”PO/ JŅĮHP/ JŅüČ( PNxJ•fp°„mx `ũHNV˙üHį (.*. EųJJ„f pLß8N^Nu¸ŧ„€c,Hxč/N’&¸…e/ âˆ"’…Ё/N’`Đ/ âˆ"’„`4&¸…e/Hxč …/NšO"â‰`Î/Hxč „/NšO"â‰Đ/N’D€`†NV˙üHį EųžjAø¤ŅĘHP <ĮČЊ/Nšr&POB§/NšX.€// JŅüČ( PNOīB§HxHyŅX/ JŅüČ( PNLî˙ôN^Nu*NV/ EųžjHy`B€?NšāĐJ€XOgˆ/RK/ / GN`ūNV/ $n` \fJ*g RJRJJfėp` ?g *g [fä $_N^NuNV/ EųžjHx JŅüÆĖ/Nš9 JŅüÆĐ € JŅüÆĐp˙°fPHx JŅüÆĖ/Hy”ĒNšā.€Aø¤ŅĘHPNš”Oī /Aø¤ŅĘHP/ JŅüČ( PNp$n˙üN^Nup`ôwbNV/ Eųžj <ĮČЊ/Nšā^HyēŽ <ĮČЊ/Nšū JŅüĮ° €POfbHxAøF¤ŅĘHP <ĮČЊ/NšrPO/Hy”ÎNšā.€Aø¤ŅĘHPNš”Oī /Aø¤ŅĘHP/ JŅüČ( PNp$n˙üN^Nup`ôNVHį Eųžj&<Æ´J˛8o 28ŅĒ| JŅüČ8Jo6 *| JŅüČ8А%€8 JŅüČ< P‘ę|"JĶüư"ˆ JŅüČ8B` J˛8Č@B§/ NšMö%|˙˙˙˙ JŅüÆČ ŧŨą%|˜Ūˆ%|˜âŒAø ŅĘ%H  JŅüĮ¨ ŧ JŅüČ( ŧĀė JŅüČ, ŧ JŅüČ0 ŧÔ JŅüČ4 ŧÄÄ JŅüČ ŧ˙˙˙˙ $n˙üN^NuNV˙đHį HxNšWŽ$@J€g@x`.&z`pƒg ∠€í¸ƒ ` âˆ&S…J…fâ å€%ƒR„¸ŧmĘ#Ę˜æLî8˙āN^NuNVJš˜æfa 9˜æN^NuNVJš˜æg/9˜æNšWŪBš˜æN^NuNV˙ô yžFAčx-P˙ü .Āŧ˙˙å€ @Ņî˙ü-P˙ø n˙ø-h˙ô .˙ôN^NuPress a key to exitNV˙ö/ Eî˙÷Nš1x-@˙üB§Nš4Ž.€a’-@˙ø .˙ü°Ž˙øfŠ09™tĀ|f|B§Nš=J€XOgnHxNš=J€XOg^Jy™vgVBHyš‚Hyß2Nšę/ ?9lB˛8LßN^NuNVHį Eųžjv|(<Æ´ 2H°˛8o&POfÔ .&.˙øN^NuNV˙ô/ /.NšAÂ$@-J˙ø .f */fTJ-J˙ü`" /fŧ_09™tĀ|f .fŧ_RJJfÚ.Ž˙ü/.NšV/.˙øNšWŪ$n˙đN^NuNV˙üHį. v¸. g ._ f¸<.g¸</fv LßN^NuNV˙ūHn˙˙?<˙˙B§Nš4Ž.€NšPÚJ€lp˙`.˙˙H€HĀN^NuNV˙ŧHį (.&$D`: _f2RJR˙ŊBHn˙ž/NšâJ€POf .˙ÆĀŧđ°ŧ@f& Ž˙ŊRJJf Lî˙°N^Nuwarning: cannot allocate wildcard buffers NV˙ĖHy”čNšā.€NšX.€Hy”čNšā.€/ JŅüČ( PNHxNš5ÂOī JŅüÆØ JŅüÆŦ"JĶüư"aũŦ j (Ā<g6-r8˙ø JŅüư&P`Nš-ÄąB€/Nš-øXORK .˙øSŽ˙øJ€fÜS˛8"JĶüư QR‘B€`ūîNV˙ôHį8Iųžj(. *.,<Į // LŅüƨ/Nšņœ LŅüƨ €JŦ@fJ„f pLîx˙ØN^Nu LŅüĮ˜Jgp2`æ l (æĀ<fNJŦf(// LŅüĮ° P(H€HĀ/NšGĸ¸€Oī fôJŦg B§/// LŅüČ( PNJ€fˆ`†JŽg LŅüĮŧ` LŅüĮ´& LŅüĮœJgB´h LŅüĮœB$E  fJ´hgRJB´h&C`@  f$ü EŅÄSHĩČf )ŧh` * fRJ`  fü `Hį<(.*<f˛Eų™"GųfĒIųVKųfÚ.<fÖJš™&gJBŽ˙Đ|Bš™&/Nššä-@˙Đ/a˙",ŧ„gŧŽ˙Đc2Aî˙Ô&ˆHx'Hn˙ÔNšLžPOHn˙ÔNšX*€ GB#ÄfŽXO`†#ÆfŽ yfŽ‘Ä*ˆpЕ/NšWŽ&€XOfDHxHyáHyĨNš”PO/HyĨHyžj yf’NOī//N” Lî<ø˙¨N^Nu///NšR  UŅĶB G ŧOī /Nšų†$€XOg/Nšø`&XOf/Nš÷čB’XOPO`¤Hx/9fŽp Ѓ/Nšˇ˜J€Oī gÄ GJg@//N”POp Ѓ/ Ѕ/`˙nJ’f.`DB§/9fŽp Ѓ/Nšˇ˜J€Oī g GJfČp Ѓ/`˙:/Nšø`&XOfÆ/Nš÷čB’#ü™& GJg/NšWŪp`˙ NV˙üHį Eųžj(<  JŅü`ú JŅüÆ´SJm"JĶüư QR‘B€`NšŊJ-@ú´p˙°Žú´gū .ú´é †€P„¸”ež .˙đƒ"ЀЁЀГ-@˙ä @B€(,ė̘† n˙äB€0(,p°†c-F˙ô R…å€+†`r°†fx`> JŅüÆ´SJm"JĶüư QR‘B€`NšŊJ-@ú°p˙°Žú°gũt .ú°é †€P„p°„bŧpƒV€,ä‹U„ І°Ž˙ėc`ũJ R…å€+Ž˙ô S†J€fė`öp°†f´`> JŅüÆ´SJm"JĶüư QR‘B€`NšŊJ-@úŦp˙°ŽúŦgüô .úŦ順€P„p°„bŧpƒV€,æ‹W„ І°Ž˙ėc`üĘ R…å€Bĩ S†J€fî`t JŅüÆ´SJm"JĶüư QR‘B€`NšŊJ-@ú¨p˙°Žú¨gü‚ .ú¨é †€P„p°„bŧpƒĐŧ ,î‹_„ І°Ž˙ėc`üT R…å€Bĩ S†J€fîBŽ˙ôēŽ˙ė @Ņü—"/(N“.€ .˙āဠ@Ņü—"/N“.€Hy—2N“.€`2B§ .˙āဠ@Ņü—"/(N“.€ .˙āဠ@Ņü—"/N“.€HyŅS JŅÅHPN”Oī/ JŅÅHP/ JŅüČ( PNOīBŽ˙Ø`:HxAøŅĘHPNšŧDJ€POf p3Lî<ø˙nN^NuHx <ÆíЊ/AøŅĘHPNšWŒJ€Oī glHx/.˙ØHy\N“.€ JŅÅHPN”Oī / JŅÅHP/ JŅüČ( PNOīHxHy\ØN“.€ JŅÅHPN”PO/ JŅÅHP/ JŅüČ( PNp`˙hNš)Đ&f˙\Hx JŅüĮ*B€0/NšČb&POg ,p°ƒmH JŅüÆāJg JŅüÆā/NšWŪ JŅüÆāBXOHx JŅüĮ,B€0/NšČb&POg ,p°ƒmøJĒdf„ jˆYH-H˙–BŽ˙ü`,/* n˙–/ <ĮČЊ/Nšˇ˜J€Oī eū@/a  JŅüČ ƒ JŅüČ$ „(š“ĸ/ / Hy’ėHy’ŽHx// aø*J”fzJ…g2p°…fŦJĒB2ЁĐŧ˙˙ū*p°‡l$HxAø˛ŅÃHPNšIŽJ€fAø˛Ņðü4gR…HyQ€ .˙đЅ/NšO/Hx/.˙ėNšO" Ё".˙č$遒‚åŌŽ˙äЁ$€¸ŧt2e ’pl$ŧ˙˙˙˙J’l$ŧ˙˙˙/ Nš 0 @J¨ g’¸ŧt2e ’pl$ŧ˙˙˙˙J’l$ŧ˙˙˙ Lîø˙ÄN^NuNV˙øHį Eų@WĀrfšHx <ĮČЃ//HyįŅ CŅÄHPNš”Oī/ CŅÄHP/ CŅüČ( PNOī/ FN`Î UR•ŧ_ U`(pĀ…r˛€f// NšVPO/ FNB•B’`"pĀ…r˛€f‚ KRK"Ug R•/NšOVJ€XOg=|˙ú`Bn˙ú U‘Ō0.˙úĀp$°ˆnČS• UBHx/ <ĮČЃ/Hyįw CŅÄHPNš”Oī/ CŅÄHP/ CŅüČ( PNp`ūNpĀ…r˛€fT <ĮČЃ/NšXXOДR€/NšWŽ$€XOgJ”o Jšfîf/9fŪ/NšV В*€`B RB*’`8pĀ…f g(/ NšX(€XOoJ”o” <ĮNЃ// NšâJ€POf CŅüĮV Āŧđ°ŧ@WĀrf\ CJ¨hfB”`ũ†Hx˙/ Nšūlr˙˛€POf:Hx/ HyįD CŅÄHPNšžj&<ĮN JŅÃHP/.NšâJ€POg p˙Lî˙đN^Nu JŅà (rg JŅÃ"JĶà )R€°¨o JŅà (R€` JŅà (-@˙ü JŅüÆūB€0/ JŅüĮB€0/aū-@˙ø .˙ü°Ž˙ø\Ār`ˆ[ %s ] NV˙ēHį<&<žj(.*<¤BŽ˙ôJ„f pLî<ø˙–N^Nu . S€gY€gV€gT€gHW€gN .˙ô`Ō-D˙ü-|€˙ø`Î CŅüĮ´$P CŅüĮ´&P Ž€˙üo <€` .˙ü/ CŅüĮ´/aķJ-@˙øPOg⑮˙ü n˙ø"CĶüĮ´ŅŅB` RJ  gøÚJfôBp°Ž fj C h J¨ g* C h p°¨ g C h p °¨ fB CŅüĮ 2f4 CŅüĮ´(P`$<€ĀgpĀĀŧ˙ @Ņü”*`€RLJfØ CŅüĮ´ PSH$H CŅÅ&H`°BŽ˙â f ”Oī / CŅÄHP/ CŅüČ( PNB”p`ũ: S€ 3/g S€ 3_fS” KŅÔBpД/NšWŽ#ĀfŪXOfB”p `üü/ /9fŪNšV TR”ŅųfŪŧ_ TŅųfŪB`pĀ…r˛€fJ”o /9fŪ FNB”p`ü´pc`üŽwarning: invalid length in QZ fieldQZHDwarning: invalid length in Qdos fieldQDOS02NV˙¨Hį8(.*. Gųžj`LEî˙´Iî˙´pЄ/NšĪėĀŧ˙˙& Y€ļ€XOb,HxL/Hn˙´NšT¤0|JûOī fúHyėÁNšX.€HyėÁpЊ/NšWŒJ€Oī fTpH°ƒgHyš‚Hyė›NšęPOJ*g4?<p Њ/?<˙˙ KŅüĮ°/Nš÷Â.€NšLt k p@¨Oī Hyė–NšX.€Hyė–pЌ/Nšü^ü[`. f&-|˙â * g * f * fRJŌRJŌ K‘ÃAčų\°üũbJŽ˙âgXB§ K‘ÃHhų\ CŅÅHP/ CŅüČ( PN CŅÅ&HJŽ˙âg* CJ¨lg"B§Hy•ĘNšā.€/ CŅüČ0 PNOī OīRJJf˙LB§ K‘ÃHhų\ CŅÅHP/ CŅüČ( PNOīJŽ˙üoJŽ˙ønū(Hx@B§ CŅÅHP/ CŅüČ( PN`ũôBn˙ōp$°„bLHxHy•Nšā.€ CŅÅHPNš”PO/ CŅÅHP/ CŅüČ( PN-|˙ôpŨЄ=@˙ōx#Oī/ <ĮČЃ/aņ&J€POgĀ DŅÃŅüĮČB C h J¨ g* C h p°¨ g C h p °¨ fB CŅüĮ 2f4 <ĮČЃ*@`$<€ĀgpĀĀŧ˙ @Ņü”*`€RMJfØ C h (čĀ<g C‘ü˙˙89-H˙Ú <WŒJ€Oī fTpD°ƒgHyš‚HyėrNšęPOJ, g4?<pЌ/?<˙˙ KŅüĮ°/Nš÷Â.€NšLt k p@¨Oī pĐƒØ€pЃš€p°…cū°Lî8˙N^Nuwarning: cannot set the time for %s chmod (file attributes) errorNV˙ô/ Eųžj JŅüÆāJg JŅüĮB€0/ JŅüÆā/aūPO JŅüĮ°/NšĐ j  (Āŧ˙˙/ <ĮČЊ/Nš˙&J€POgHyîdNšXO JŅüÆūB€0/ JŅüĮB€0/NšÆJ-@˙ø-@˙ôHn˙ô <ĮČЊ/Nšũ^J€POg>Hx <ĮČЊ/Hyî>Aø¤ŅĘHPNš”Oī /Aø¤ŅĘHP/ JŅüČ( PN$n˙đN^NuNV˙ø-n ˙ø-n ˙üHn˙ø/.Nšũ^N^NuDec 23 1997 on SMS/QDOĮČЃ-@˙Ö`bH€0@ŅųđĀ<g: n˙ÚH€HĀ#Āo¨ yo¨ŅųđĀ<g 9o¨Đŧ ` 9o¨` n˙ÚH€HĀ n˙ÖRŽ˙Ö€RŽ˙Ú n˙ÚJf’ n˙ÖB C h (ęĀ<g:p°„d4 CŅüĮĐ .f& <ĮĐЃ-@˙Ō` n˙Ō"n˙ŌP˙˙ n˙ŌRŽ˙ŌJfčJn˙ōgüHxAøF¤ŅÃHP <ĮČЃ/NšrPO/HyČZ CŅÅHPNš”Oī / CŅÅHP/ CŅüČ( PNB€0.˙ō(Oī CŅüư P"CĶüÆŦ‘Ņ"CĶüÆØ "CĶüÆÜ‘ŅĀŅÄ"CĶüÆÜŅŅ-H˙ÎHx /.˙ÎNšIŽ. .˙ΐ‡-@˙ÆJŽ˙Îm| CŅüÆØ °Ž˙ÆgpB§/.˙Æ CŅüÆĐ/NšM< CŅüÆØ €Hx CŅüÆŦ/ CŅüÆĐ/Nš;î CŅüÆ´ €oD CŅüÆŦ PŅĮ"CĶüư"ˆ CŅüS v4.2xc68NV/ EųžjHyßEHyßEHyī¨Hyī´HyīšHyīÂHyīÉHy]nađ.€Aø¤ŅĘHPNš”Oī$B§Aø¤ŅĘHPNšX.€Aø¤ŅĘHP/ JŅüČ( PN$n˙üN^Nu(line too long--try again)  NV˙ôHį0Eųš‚&n *<ßE?<˙˙B§Nš4Ž.€NšJČ/ /Nšę/ /.Nšę/ NšĀvNšüĒ(¸ŧÂfJƒoPSƒ/ HyđnNšę`*ļŽl8 Rƒ„p °„g* jąę e/ Hx* j NPO`RĒŧ*p*Āŧ˙p °„f– jąę e/ Hx j NPO`RĒŧ p Āŧ˙/ NšĀ*<đROī S€ 3 f˙. S€B3\O?<˙˙B§Nš4Ž.€NšJĖ Lî 8˙āN^NuNV˙üHį0&.$n (<˙*. f pLî 8Æ´Ÿ`úæ CŅüÆ´"CĶüư "CĶüÆŦ‘‡Ņ CŅüÆŦ PŅĮ`Ė CŅüÆāJg CŅüÆā/NšWŪXO/NšWŽ CŅüÆā €XOf¤Hx/Hy•.Nšā.€ CŅÅHPNš”Oī / CŅÅHP/ CŅüČ( PN CŅüư P"CĶüÆŦ‘Ņ"CĶüÆØ "CĶüÆÜ‘ŅĀŅÄ"CĶüÆÜŅŅ-H˙ÂHx /.˙ÂNšIŽ, .˙†-@˙ēJŽ˙ÂlVHxHy\ØNšā.€ CŅüÆĖ/Hy\KNšā.€ CŅÅHPNš”Oī/ CŅÅHP/ CŅüČ( PNp`ųn CŅüÆØ °Ž˙ēgnB§/.˙ē CŅüÆĐ/NšM< CŅüÆØ €Hx CŅüÆŦ/ CŅüÆĐ/Nš;î CŅüÆ´ €ot CŅüÆŦ PŅÆ"CĶüư"ˆ CŅüÆ´`ų CŅüÆ´"CĶüư "CĶüÆŦ‘†Ņ CŅüÆŦ P˙čN^NuNšŪž&@ F€&`Ô JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€& JRJB€ˇ€Ā„å€ 3"≺€&Q…p°…c˙(J…g JRJB€ˇ€Ā„å€ 3"≺€&S…J…fā F€`ūāC68 libc_a v4.22fōô*o*m0Ā|˙å@ÚĀGųfō&0V@€ÚĀ#ÍföByo6ByoTByor*SJUgn/ / Nš1`P`Va> ˙˙g )&˙˙faQÉ˙Ü`a.fü `öNuagR`øNuŧg gR`ōRNu g  g ŅÆ"CĶüư"ˆ`øŪ/ CŅüÆā/aėfJ€føČp3`øšNV nB€(á€B€N^NuNV/ $nB€*rã B*HABAЁB*áĐBЁ$_N^NuNV˙úHį0&n $n KRK<€ĀgpĀĀŧ˙ @Ņü“Ē`ĀJfÔ .Lß N^NuNVHį<$n&n &.Iųo¨Kųđx `šH€HĀ(€ TŅÕĀ<g Є` HHÁ(/ TŅÕÂ<g"Ō„`" ˛€gNH€HĀ(€ TŅÕĀ<g Є` HHÁ(/ TŅÕÂ<g"Ō„`" ˛€lp˙`pLß<N^NuJg SƒRJRKJƒf˙dp`äs%03u%s %s NV˙’Hįfü >f CųoT`˙r 2f ->fü Cųor`˙V &f`î =fTa"J€gH°ŧn <°š™kp#Ā™`hü pr-˛|9n’|0mã€.å€Đ‡Đü `ŪNupņ`„ %faČJ€gî°š™øk$#Ā™ø` 'fa˙` "fa˙ `aūú fūĻpNqNA$9™’‚&9™øk f ’šž6`ԃ`"˛ŧn"<Ō‚P./NšZ,XJ€gö&@//NšX"P,œš™/NšZ,X&@/9™NšZ,X"@"QOņCųžJ Q"€pNA// NšX"P 9õđg @N/9föNšúšXHxNšWŽX#ĀfūHy˜ęNšAÂX yfū ĀB#üfú 9š g /9™üHyfúHyfū/9fō @NOīNšr gŌRJ EŅÄĩČe¸ˇÃcūîJŦf8 K‘Ã/"K“ÃHQ/"LĶüĮ°"Q)H€HĀ/NšGĸOī _°ˆga.`ū˛JŦgū¨B§ K‘ÃHP// LŅüČ( PNJ€gūŠ`ū†NV/ EųžjHxĄAøF¤ŅĘHP <ĮČЊ/NšrPO/Hy•aNšā.€Aø¤ŅĘHPNš”Oī /Aø¤ŅĘHP/ JŅüČ( PNHyš*Hx Aø•ŅĘHPNš< *y•f JŅüĮ˜ ŧ` JŅüĮ˜ ŧp2$n˙üN^NuNV˙ėHį<$n&.Iųš‚..(. n ŅÃ*H n SH*p‡g JĒ@f&L`GųšVp@‡g"Jƒf JŅüĮ¨Jg Jƒg - ˙˙gü Rƒp ‡g˛ JŅüĮ¨Jf¤ kąë e/ Hx k NPO`RĢŧ p Āŧ˙/ NšĀp‡gZJĒ@gTHxNš=J€XOfDHxĮ4& rH ( AųäRr°bbĐ@ĐđNĐ B@H@ rH!@pLî˙đN^Nu râ¨r&í€"၀€ƒ rH!@B§Nš÷"XO&/Nš÷" rH F€Á¨`´pƒWĀrĀĐ€&퀀ŧ$`ļ˙č˙¨˙Ž˙Ž˙č˙Ž˙č˙č˙č˙č˙č˙č˙Ž˙Ž˙č˙č˙Žmapname: conversion of %s failed creating: %s NV˙ÄHį|`:09™tĀ|fü_`(ü.`" yđ08Ā<Wfļŧ€e ļŧūbà LRLB€&f˙dBJĢPf*J„g&pЄ$@`RJB€ @ŅųđĀ<fęJf DB KŅÅHPNšX @ŅËŅüĮĮ /XOfz KŅÅHPNšX @ŅËŅüĮĮŧ_.ŧ KŅÅHPN•JšfęgDJĢ %s checkdir error: %s exists but is not directory unable to process %s. checkdir error: cannot create %s unable to process %s. checkdir error: path too long: %s NV˙úHį<&<žjEųfâ&nIų™*(<¤Kųfæ*. ,<WŪpĀ…r˛€fL~`R• KRK"Ufô U‘Ōp"°ˆl~ <ĮNЃ//NšâJ€POg  CJ¨hf/ FNpLî<ø˙ÖN^NuJ‡f>Hx˙/Nšūlr˙˛€POfHx <ĮČЃ//Hyč)`ˆ#üfęJ‡gŦHx/Hyčs CŅÄHPNš”Oī / CŅÄHP/ CŅüČ( PNOī/ FNp`˙t CŅüĮV Āŧđ°ŧWŽ$@J€XOgâB’<.gĐ<.g8/ pЊ/NšK‚xpЊ(@`(+</g<0g VgĐ<\`ĖJ+fČB`ÄRLJfø¸<_gü_B LpЊ‘Ā 5@pЊ/NšV&XOnJƒl˙^#ü˙˙˙˙žZ#Þ^`˙J?<@Hm˙˛?<˙˙/NšLx%m˙æ>%|@:/NšLJ `˙*ENV*NU˙äHį:&- C PJüf AøŅÃ&`vNšOö yžF (Đŧh(@ ,Ќ+@˙č ,Ќ$@ , Ќ+@˙đp•Ā`F f>J*f80*HĀĐ­˙đ+@˙ėHx m˙ėRHHPHyú”NšWŒJ€Oī f jTH&`QJĩí˙čd´NšPHyú™NšS.Jƒg,C`/NšS..ŽNšXR€ŨĀXOJfæ yžFGčŦXO g ` <š/HyœÚa>PO g ` <š/Hyža$PO g ` < Ē`Rƒp°ƒnÖj˙įLí˙ôN]NuNU˙øHį0$m(-&m KRKH€HĀ* bfRKvũ +f4ŧvpr°…fp°ƒg,4ŧv`$p°ƒg4ŧvp†€pa°…g†ŧ€`†ŧJ„lHxļ//-Nš9 ( Lí 8˙äN]NuNU˙čHį:$m(- ,mGųo”p°„eJ„gB Lí\x˙ČN]Nup`ō0*Ā|0°|fJ“g S0(Ā|@g / S h$NXO(Np˜€ j‘Ō&gJļ„c&˜ƒ,/Hx /Nš8ę+@˙øOī g m˙ø‘ÆRH*`*v/// NšT¤ŲÅ FŅÅ$ˆOī BJƒfJJ„gF jąŌb / jNXO` RR’B€+@˙đr˙˛€fšÎg˙D`í˙ķ - ˙ķg p˜€J„f˙`B `˙NU/ $m0*Ā|bg p˙$m˙üN]Nuj/ Nš!&`čNU/ $m 0*Ā|!°|š/Hyœäa Lí\˙ĐN]NuNU˙Î/ Eí˙ÎHx2/ /-NšPøJf" m JPg/- / Nš1`PO/ /-NšQn$m˙ĘN]NuNU˙ôHį0GųžZ$m`RJB€ @ŅųđĀ<fę+S˙üB“/-/- /-NšP& -f"J“fļŧ˙˙˙b,&ŧ" <€Lí ˙čN]Nuļŧ˙˙˙c&ŧ" <˙˙˙`ā&­˙ü `ØNU˙ú/p˙°ššg&9š#ü˙˙˙˙š` Hm˙˙?<˙˙Nšũ2/ yüNB€-˙˙& &-˙öN]NuNU˙ü/aŦ&??<˙˙Nšũ2/NšQø &-˙øN]NuNU#íš -N]NuNUp˙°ššÆfB§Hy›ŠNšLæ#ĀšÆ 9šÆN]NuNU˙ęHį8$m z˙Gųz 0fRJB€&px°ƒgpX°ƒfz&-$m pƒ @Ņíp•č‹fė LßN]NuNU˙čHį0$m&m~`ÖpЊ%@%@ %@|**&gTJ†gPļ†c&œƒžƒp°ƒf D"EJ­˙ôf2؃`.J­˙ôg/ DH€HĀ//NšMö`///NšT¤ØƒOī ڃJ‡f0J­ f%ELí ø˙ĖN]NupĀ“+@˙ô.+(+S­ Gë `˙v0*Ā|g%DJ­˙ôgp°ƒdvžƒ DŅÃ*%E/ j$NXO0*Ā|f˙" * j‘ęˆ,`˙ (null)NU˙:Hį:(mMí˙^JŦfpЌ)@ / B§ l NPO`pJ€g pLí\ø˙N]NuB–BŽ+l˙đB­˙Ė&m +K˙ė0,Ā|g-m˙ėHx%/-˙ėNšU–&@J€POg K‘í˙ė-H`/-˙ėNšX+@˙ĀŅ­˙ĖGų(÷+K˙ė-m˙Ā/Hx/ aū6Oī`Ō“ %RJ`zR‡/Hx˙˙NšJ+@˙đp•Ā`¨p°…fâ 0fÜpÕĀB€&px°ƒgpX°ƒfÄpÕĀ`Ā yđ08Ā<gp0`08Ā<gp7`pW–€Jƒmbļ…l^R‡¸­˙đcR†J†fBp °…f å€Đ„Đ€`"p°…f é€`p°…f į€` //NšO(p˙„ļ€cR†`؃pÕĀB€&f˙vJ†g#ü"žZx˙` J­˙ėg D€( g J‡g&Š`&­ Lß øN]NuNU˙üHį &- $mxp‘­J­np °ƒb/-Hx /NšJ(// aÄ$@ "åŌ„ԁĐŧ0Ā Lí˙đN]NuNU˙ĀHį8$m &-Gí˙đx˙Ií˙øB@*Đ@;@˙ęB€0*rū5@Āŧ˙˙2-˙ęHÁԁ:B€*ЀĐŧ ;@˙ėHy˜ęNšX;@˙čHy˜đNšX;@˙æHy˜öNšX;@˙ä/ ?/Nš:J€nJgĀ %g¸k +%nJ*gœ *%g’k +%nJ*gx *%gpk +%nJ*gX *%gPp×ĀÕĀĩÃeˆÖ€`“ %n JgD %g>RJRKĩÃeæ)J/ l$NXO$l ,ĐŦ&p°Ŧbؖ€`ļp`p`pÕĀ×Ā)J ­˙ėŅ­˙ĖJgŽRKAí˙]*+E˙äx+|›Ū˙ØB­˙Č KRKH€HĀ,Aų0Žr rX°bZĐ@ĐđNĐp` p`p`pˆ€`Č mXH+HYH,l pˆ€ D€,+F˙Č KRKH€HĀ,`<+|›Ú˙Ø`Hx Hm˙ČNšO@ ŧ0Ņ­˙Č KRKH€HĀ,p0°†np9°†lÎp.°†fz KRKH€HĀ,p*°†f mXH+HYH,m ˆŧ+F˙ÄRK`Jp0°†nDp9°†m>ˆŧB­˙Ä`&Hx Hm˙ÄNšO@ ŧ0Ņ­˙Ä KRK/9žb/9fū/9fúNšäOī /Nš5ÂXr˙&pNA`öõū*SIGNAL_RNU˙ÔHį Eí˙čz˙B§HyõôNšLæ&p°ƒPOo`z$ŧ%MSG%|5|5yš %E %| yžJAčČ%H?</ ?/NšL„(p°„Oī o`&?< Hm˙Ü?/NšL€(p °„n#í˙äžBOī p°ƒnp °„o.B§Nš˙ŧ09›–°El:Ry›–09›–HĀ//NšAüPOXO#Þ2Hy›~B§B§Hx/ yžBNLí8˙ÄN]NuNUHx/9ž2 yžBNN]Nu_CCXtNU˙ü+yš˙ü#íš -˙üN]NuHį *o(og./ NšøX.g"°fø MSˆ// /NšWŒOī J@fāS `pLß0ĀNuNU˙č/ Eí˙ô$­ BĒBĒHm˙č/ /-NšøJ€lp˙` -˙č$m˙äN] ŧ ` ĀRLJfÖBEí˙œ`&B€,€ VŅųđĀ<g ŧ ` ĀRKJfÖBHm˙œHm˙ÎNš2DLí\˙ˆN]NuNU/&- Æŧ†ŧ‘//-Nš9 &-˙üN]NuNU˙ôHį (-$m /NšXS€.€Hx_/Nš8Ā"PO ˛€fDHx/NšLæ,POo2/ /Nš#ø&Ē@/NšLJJƒg:#ÞZp˙Líx˙āN]NuB§/Nš9 *POm/ /Nšø&/Nšú0ū|ú,úĻū|újúšúšúšúšúšúšúšúšúšū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ũļū|ũÄū|ū|ū|ū|û<ū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ûvū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ūûšũŧũŽũĘû,ûšū|ū|û4ū|ûJûŽû`ū|ū|ū&ū|ûˆū|ū|ûj"o o2`ØQÉ˙üBNu 9žNNuNU/- /-Nš4˛ -N]NuNU˙ü/NšZÎ&ŧír€&J­g m ƒ &-fv` +fR’Hx/ aūä.€NšNę&€ R :f(R’/ aūĘ"逐å€Ņ“ R :f R’/ aū°Ņ“XOXO// NšO: Lí ˙đN]NuNUHį0Eí&m / aū~'@ R :fR’/ aūj'@ R :f R’/ aūV&€ Lí ˙øN]NuNU˙ÄHį:Eí˙ÜGíIųIŽMų ēAí˙Ø*+yœR˙Ä#üœRxB§Nš1š E € E 9œVҐJšœ^XOg E 9œZҐ/Nš%î @"J"Ø"Ø"Ø"Ø"Ø"Ø"Ø"Ø"Ø%|BĒB’R“ S<MXOg Vg` R“BĒ/ N–S€%@ SR“ .XOfÎ/ N–& SR“ .fŧ/ N–+@˙Ė%| p°ƒf4 *å€ @Ņüœ" ]€%@ Hx/*N”r˛€f p°ĒfRĒ vHxHyQ€/ aü.€NšI˛X€/N”+@˙ÔHx -˙ː­˙Ô˙øN]NuNU˙đHį $m(- ^WĀr.gRJ,Jf pLßøN]NuH€HĀ& *-f *]g*H€HĀ*RJ`*ļ„gļ„b ¸…bJ‡W,pÕĀ ]fŦJ†gŦЊ`ĒNU˙ūHį0$m&m g f`pLí ˙îN]Nu JRJ<[gĐ<g Đ<gļg6`ÔB€// a˙4&@J€PO`žJ`ēSJJg / / a˜J€POgp`¨Jfč`  KRKf¤JWĀr` //Nš9>XJ€k @ (NuNU˙úHįv˙ m8` pƒrã "æ‰Đ&0DŅí(H€HĀąƒp˜@JDlØ LßN]NuNU˙ø//-Nš9>&+C˙ü/Nš9J€XOf -€ŧ€&-˙ôN]Nu m˙üHh2a˙|`ęNU˙ôHį0(-GųoŦJ9o6g(B§Hyo6Nš9 r˙˛€POf Hx˙ųNš5ÂXOpˆ€` S1|zEų^€/N”"$ၒ‚.€pᥠЁ_€ŅĒ S /f/ pŅ“/aū8&€PO/ aû¸ m €#í˙ÄœR Lí\8˙¨N]NuR“x˙Hx/*N”r˛€f p;°Ēlp˜€/ N–Đ„%@ S /XO`šTZNU˙ôHį8EųœbGųœ^IųœZHyJNšUŽ&g<ļššĘg2JššĘg/9œNšWŪXO/NšXXOT€/NšWŽ#Āo#ÚĘBšœR C :f #üœRRƒ/aüŠ( D‘Ãp°ˆnÎ D‘ÃHP/B§aü&HyœV/aüĻ(JšœVfƒJ€g #ųoœ#ųoœB”&/aü0( D‘Ãp°ˆnt D‘ÃHP/Hxaûē/ /aüR(J”f(ŧ D ,fH&ŧ˙˙˙B’/ /aüú( D ,f / /aüč(#üœfJ’g °“l+S˙ô&’$­˙ôBšœfLí˙āN]NuDioTJgD >f &<RJ`&<‘ &fzRJ// Nš9 r˙˛€POf Hx˙ųNš5ÂXOpˆ€` S1|2EųorJg@ >f RJ&<`&<‘ &fRJ// Nš9 r˙˛€POf Hx˙ųNš5ÂXOpˆ€J…g"Hx0p0Г/p`Г/NšT¤ Sh 2pˆ€ Lí 8˙āN]NuNU˙ü/-NšN’+@˙üfp˙N]Nu m˙ü (`ōNU˙đHį8$m &mIų8Ā JRJB€&p\°ƒfÔ JRJB€&/Hy=žN”J€POmDxz` FŅü=ŪB€"įĐ( JRJB€&R…p°…ojp °„od/Hy=žN”,POlÄ`Rpx°ƒfR JRJB€&xz` FŅü=ŪB€"éĐ( JRJB€&R…p°…op°„o/Hy=ĮN”,POlÄSJÄ`/HyœrN”(POm DŅüœjĐ`ÃJf˙B Líx˙ÔN]rectory not emptyFunction not implementedNo locks availableFilename too longResource deadlock avoidedResult too largeMath argumentBroken pipeToo many linksRead-only file systemIllegal seekNo space left on deviceFile too largeText file busyNot a typewriterToo many open filesFile table overflowInvalid argumentIs a directoryNot a directoryNo such deviceCross-device linkFile existsMount device busyBlock device requiredBad addressPermission deniedNot enough coreNo more processesNo chNuNUJšo2g yo2NJšog yoN/-Nš9rN]NuNU˙üHį(-¸ŧ˙˙˙c(<˙˙˙//- /-Nš;î&Oī p˙°ƒfp°šžZgÚp °šžZgĐJƒlp` Lí˙ôN]NuNU/ $m B’BĒBĒ %|7%|›â m ŧ7p$_N]NuNU˙ü/ $yoœ`/ j$N*H€HĀ/Nš.._NU˙ÆHį0&m$m&-?<@/ ?<˙˙/-NšL€*p@°…Oī g&pö°…f pLí 8˙˛N]Nu#Åž^#ü˙˙˙˙žZp˙`âJjg´/-pЊ/Hm˙ĮNš1`PO/NšZJ€POgJƒg0*WgSg<ûgĐ<ūg0pƒf`˙lp?Ā’fđpƒg˙^J­$g/-(/ NšVHm˙Į`^p`ŪBx`HyŽ/ NšSPORDHĸ­,mæ/- NšX.€/- NšXXO" "-,$ԁԂ/pᥠЁAí˙ĮЈ/œė/NšL„?</NšJČHm˙˙?9œė/ yüN -˙˙fHm˙˙?<˙˙/ yüNOī ?</NšJĖOī"/Hx˙˙NšAüLí˙öN]NuNU˙čHį8*-|˙IųžZ/-NšN’$@J€XOf `Œ0*Ā|f(ŧ `č WĀr+@˙čgp`p/Hx /9ž2 yžBN&@UOī g$UgVVgR[gNSgJXgUg(ŧ`ŽJšôg.//- / yôN&n o `pJ€g(ŧ `ęxēŧ˙o <˙` .?/- / NšLTXO?/*NšL€&Oī lNr Ёg r g (†`$ `š0*Ā|€fđ0*Ā|gJ„nâ(ŧ #Þ^`ūâ o `pJ€gĀ`(šƒØƒ×­ ļ‡fJ…gJ­˙čf˙d o `pJ€g˙TJ„n– o `pJ€gˆ(ŧ/ NšSp`˙NU˙NHm˙øHm˙NHm˙SHm˙ėHm˙üHm˙†Hm˙š/- aũĻJ€Oī gp˙N]Nu/-˙øHm˙ė/-˙ü/-˙NHm˙†/-/-/-/- /-aūd`ÎNuNU˙čHį0*- y[f0HĀ.f Lí ø˙ĖN]NuTH&Hv`–Jƒfx` S€ļ€fx`pЃ(pé , †fl å€r˙˛ŗg`/NšH$@J€f Hx˙ũNš5ÂXO å€%s/*Nš2ΰšžNXOfj`j/Nš=J€XOgp`p€Š†XORƒļ‡m˙h`˙NpB`pCHį0 o$o& g"6/NC& g$Lß NupL4/ "o `pN"o Hį0 o6/"NC"Lß Nu.._NU˙˜Hį:&m (mMųo¨`pŲĀ/ HyVNšRČJ€POgč`p×Ā/ HyVNšRČJ€POgčEí˙Î`&B€,€ VŅųđĀ<g `ūŽ(ŧ`ū„#ü˙˙˙öž^*€pLíø˙ČN]NuNU˙ø/-/- /-HxHy:.Hm˙øB§Hx/9ž2 yžBNJ€Oī$l/-/- /-aũøN]Nu -˙ørhg#üžZp˙`ä -˙ü`ŪNU˙äHį8x|~/-NšN’$@J€XOf p˙Líø˙ÄN]Nu0*Ā| gFv`0/NšN’(@J€XOg ,°Ēfļ­g|0,Ā|g~Rƒļšž mČJFfj˙ßJFg2JGg.z`"/NšN’&@J€XOg +°ĒfkR…ēšž mÖJĒgp0*Ā|0ff/*NšWŪBĒ/*NšLJ(XOg#Äž^#ü˙˙˙˙žZx˙0*Ā|gJĒg/*NšB°/*NšWŪPO f /*NšLJBĒBj `ūîNU˙ü/-NšN’+@˙üXOfpN]NuBg m˙ü/(NšAr`ę01Oī g6ŧ7|BkBk`ÜHm˙Ä?<0Hm˙ĀHm˙Â?/Nšč0-˙ÂHĀB2*⁐rū5@0-˙ĀHĀB2*⁐5@ 0*°kl5k0* °kl5k B€0+B2ЁB2*B‚4*Ō‚˛€oB€0+B2ЁB2*5@B€0+B2+ЁB2* B‚4*Ō‚˛€oB€0+B2+ЁB2*5@ OīB€0+B2ЁB2*B2*;@˙ā°|c;|˙āB€0+B2+ЁB2*B2* ;@˙Ū°|c;|˙ŪpЊ/Bg?-˙Ū?-˙ā?/NšpЊ/B@*???/NšJĀ8…0-˙ėBA*A9@BlBl*°g j˙â` *j˙â/ ??/NšKn??/NšKV-˙â??/NšKZ/ ?/NšJ¸Jm˙äg(Hy?H€HĀ,p0°†np9°†lÎSK`ūÜpĀ„r`pĀ„r `pĀ„r@€(`ūž mXH+HYH P ­˙Ė`ũ>pĀ„r €(B-˙ŋ.<›Â`0ˆŧ€B-˙ŋ.<›Ę`B-˙ŋ`B-˙ŋ.<›Ō` |˙ŋ.<›ēp Ā„gHJ-˙ŋf mXH+HYH+P˙ēJ-˙ŋg J­˙ēlp`p@˙žg -˙ēD€+@˙ē G/(//-˙ē`zpĀ„g.J-˙ŋg mXH+HYH0HĀ` mXH+HYHB€0+@˙˛`J-˙ŋf mXH+HYH+P˙˛J-˙ŋg J­˙˛lp`p@˙žg -˙˛D€+@˙˛ G/(//-˙˛ G PN*Oī <Ā„g -˙İ­˙Čc+m˙Ä˙Č+|›Ú˙ØBŽ m˙ä‘Å-H-E BŽ BŽ+|˙ŽJ-˙žgAø ŅÎR¨pš€ Eŧ-`pĀ„gpĀ„f&ŧ`ũœ&ŧ `ũ’Hx`HxHm˙ÁN”&POl#Þ^`Î <Ā„gHxB§/-˙‚NšM<%C†5m˙Œ -˙‚`ũH o /"HJfü° f NuŗČfôpNuNV˙ø/Cî˙øv np NCJ€fp&N^Nu°ŧ˙˙˙˙gđp`î 9AžgNuHį`€pNA#ČAž Lßting -M page output through built-in "more" UnZip special compilation options: %s UnZip and ZipInfo environment options: %16s: %s [none]COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)LZW_CLEAN (PKZIP/Zip 1.x unshrinking method not supported)TIMESTAMP [decryption, version %d.%d%s of %s] 22 April 1997UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by Greg Roelofs. Send bug reports to the authors at Zip-Bugs@lists.wku.edu; see README for details. Latest sources and executablesNuNU˙ü//-NšXXOR€/NšWŽ&g /-/NšV &-˙øN]Nup`pHį00"/&/NALß NuNU˙úHį vEųœ~` 0- Āj°jf0†@0*HĀF€Á­\JJRfÜ0LßN]NuNU˙øHį v$yoŦ`&JjfHxHyœēpЊ/NšT¤ `"RƒEę0/NšH$@J€XOfĘ#üžZp˙Lí˙đN]NuNU˙Č/v˙/-Hm˙ÍNšK‚J€POf &-˙ÄN]NuB§Hm˙ÍNšLæ+@˙ČPOmâ/-˙ČNšLJXOHm˙ÍNšDR#Āž^l#ÞZ`ŧp`ēNU/- /-HyœÚNšPøN]NuNU/- /-HyœäNšPøN]NuNU˙úHį Eųo¨+m˙úp‘­˙úJ­˙úl pLßN]Nu mB€$€ RŅųđĀ<gp В`  m B€$€ RŅųđĀ<gp В` R­ are at ftp://ftp.cdrom.com/pub/infozip/ , as of above date; see http://www.cdrom.com/pub/infozip/UnZip.html for other sites. Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] Default action is to extract files in list, except those in xlist, to exdir; file[.zip] may be a wildcard. %s -Z => ZipInfo mode ("unzip -Z" for usage). -p extract files to pipe, no messages -l list files (short format) -f freshen existing files, create none -t test compressed archive daR­ Jgļg’B€B`”NU˙ūHį Eųo¨ mB€$€ RŅųđĀ<gp В`  m B€$€ RŅųđĀ<gp В` R­R­ Jgļg¨B€BLßN]NuNU˙€Hį /-Hm˙€NšMP @pr˙NBLßN]NuNU˙îHį8$m,- *H€HĀĀŧ€g&*#ü˙˙˙öž^#ü˙˙˙˙žZpLíx˙ŌN]Nu(*/ NšLT:?/NšKv?/NšJČ&F -І(@Oī`r/ ?/ yüN&Oī gˇÆb\#Þ^#ü˙˙˙˙žZv˙`N0*Ā|@f8YgN<ŧgZUgV]g~Ugz]gzĐ<Ægt<Îgn??/NšQøPORKˇĖeŠ K‘Æ&?/NšJĖ `˙:#ü˙˙˙öž^*€`ØˇÆg(?/NšJÜp ??/NšQø?/NšJÜSKOīSK`ĸta -u update files, create if necessary -z display archive comment -x exclude files that follow (in xlist) -d extract files into exdir %s modifiers: -q quiet mode (-qq => quieter) -n never overwrite existing files -a auto-convert any text files -o overwrite files WITHOUT prompting -aa treat ALL files as text -j junk paths (do not make directories) -v be verbose/print version info %c-C%c match filenames case-insensitively %c-L%cp ??/NšQøRKPO`”NU˙âHį8|˙IųžZ/-NšN’$@J€XOf Líø˙ÂN]Nu0*Ā|f(ŧ `â WĀr+@˙âgp`p/Hx /9ž2 yžBN&@ Oī f -`¨0*Ā|gHxB§/-NšMv*XO`˛Uf0Jšøg(/-/- / yøN(Oī g˙4J„lD€&ڃ`r¸ŧ˙o(<˙?/- ?/-˙ôNšL„&Oī lDR€f40*Ā|g ?/-˙ôNšR0*Ā|€gbJ…o `ūÔ(ŧ `ūČ(†#Þ^`ūŧڃļ„f&—­×­ (-oJ­˙âf˙D o `pJ€g˙40*Ā|g ?/-˙ôNšRJ…fž o `pJ€g -˙âF€gˆ(ŧ`ūVNU˙ø/-/- /-HxHyEÔHm˙ø make (some) names lowercase %-42s %c-V%c retain VMS version numbers %sExamples (see unzip.doc for more info): unzip data1 -x joe => extract all files except joe from zipfile data1.zip %s unzip -fo foo %-6s => quietly replace existing %s if archive file newer error: cannot allocate unzip buffers %d archive%s successfully processed. %d archive%s had warnings but no fatal errors. %d archive%s had fatal errors. %d file%s had no zipfile directory. 1 "zipfile" was a directory. %d "zipfiles" were dB§Hx/9ž2 yžBNJ€Oī$l/-/- /-aũęN]Nu -˙ørhg#üžZp˙`ä -˙ü`ŪNU˙øHį *-|0Eųž pЅ&J…l#üžZpLíx˙äN]Nuļ’o`//AųON//9oŦNšV–(POf #ü žZ`Ä#ÄoŦ/ ’/AųON/B§//NšOЄ/NšMö$ƒOī //NšOĐšoŦ`€  NU˙ęHį ,-$m0*Ā|@g Líx˙ÖN]Nu(*/ NšLT6HyH¸/- NšJ’*Oī gē†cĖ`Č m Qg[g\g[g(Vg0p˙`Ŧ?/NšJÜ`đBg`bp2??<ôNšNd`Ü?/NšK:`Đp ??/NšQøHm˙î?/NšJ¸HxB€0-˙ō/NšIŽ+@˙ęOīg˜B€0-˙ō­˙ęP€??/NšJÔ`˙~t`t F"GHBBBp./irectories. No zipfiles found. %s: cannot find any matches for wildcard specification "%s". %s: cannot find zipfile directory in %s, %sand cannot find %s, period. %s: cannot find either %s or %s. unzipnote: %s may be a plain executable, not an archive [%s]: Zipfile is disk %u of a multi-disk archive, and this is not the disk on which the central zipfile directory begins (disk %u). warning [%s]: end-of-central-directory record claims this is disk %u but that the central lD‡FB,/fü`"lD†FBaFHBJBf HBJBgD€` J¯lD€,. _OīNĐt`t F"Gp./,/gļaJBgØ `Ôŧ‡e g`:p~`4žŧd ŽÆ0BGHG`"rž†e J†kã†ã`ōJgž†e€ž†â‰âŽ`îNuCú˙J`Cú˙@` Cú˙’`Cú˙ˆ// o/N‘ o €`˙j o"o/ pg *IJg˛fø*_NuR€`ęp `Pp `Lp `^p "o`Vp`Zp`Vp`@p`@p`Jp`Fp`Bp`>p`:p`$p`$p` p`p`p`p`"o `"/ `4/ 2/ `4/ / Hį0 o6/NCLß Nup `čp!`äp"`āp#`Üp$`Øp&`ļp'`Âp(`žp)`ēp*`Āp+`ŧp,`Žp-`Ļp."o `Ŧp/`Ŧp5"/ `¤NU˙ČHį&- (-/NšXr2˛€XOd#üžZpLí˙ĀN]NuHm˙Č/Nšdirectory starts on disk %u; this is a contradiction. Attempting to process anyway. warning [%s]: zipfile claims to be last disk of a multi-part archive; attempting to process anyway, assuming all parts have been concatenated together in order. Expect "errors" and warnings...true multi-part support doesn't exist yet (coming soon). warning [%s]: %ld extra byte%s at beginning or within zipfile (attempting to process anyway) error [%s]: missing %ld bytes in zipfile (attempting to process anKūJ€POf&Hx2Hm˙ÍNšLžHx2/Hm˙Í/NšP J€l `ŧ//NšV `°NU˙ü//-NšOV m €XOfB§/-NšLæ&POm /NšLJp` r ЁgöS€gōp&-˙øN]Nup oNBNuNU m0(Ā|€gp`09ž N]NupF`pG`p` p`p`pHį00 o6/"o4/NCJ€g°|˙ög°|˙˙fJAgp0Lß NuNU/- /-HyžNšPøN]NuNU/ m`NU˙Ā//-Hm˙ĀNšMP @&- pr˙NBJ€f &N]Nup"oJgR@RI`ö2 oTHĐÁ`!QÉ˙ü1 NuNU˙đHį x˙/-NšN’$@J€XOf Lí8˙āN]Nu g #üžZ`â/-B§/*NšQ°Đ­ */-/- /*NšQ°&Oī l6pö°ƒg0#Þ^#ÄžZ`žp??yway) error [%s]: NULL central directory offset (attempting to process anyway) warning [%s]: zipfile is empty error [%s]: start of central directory not found; zipfile corrupt. %serror [%s]: reported length of central directory is %ld bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1 zipfile?). Compensating... End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central /*NšQø+@˙đPOl #í˙đž^`Ö Rƒē€nÖ `˙r ot /` oo 4/ HB4/ / ŅĀ2â‰dS€kDr0k&Hį>&(*,."B$B&B(B*B,BHā?~jøLß|øĐAr`!AjúĐA`QČ˙ü /NuNUp?p?p?Bgp?p?- ??-NšR,N]NuNU˙üHį &-mļšž m#üžZpLßN]Nu/Hx0NšOĐšoŦ$@0*Ā|f #ü žZ`Ė `ĘBBJ¯lD¯FBJ¯lD¯FBaJBgD€ _OīNĐa`ô2/Âī0/ Āī Ō€HABA0/ ĀīЁNuAú˙Ž`Aú˙Ō"o/ "o/N"€`ļNU˙ōHį:(m gJf pLí\˙ŪN]NuNšOö yžFAčH$P`>&Lp&Њ,@6*$`p €r ‚˛f RKRNSCJCfęJCf 1m 8n +directory and zipfile comment will be found on the last disk(s) of this archive. caution: zipfile comment truncated envargs: cannot get memory for arguments  !"#$%&'()*+,-./0123456789:;<=>?@A  !"#$%&'()*+,-./0123456789:;<=>?@AB2345670123456789abcdefABCDEF  NU˙ôHįz(-¸ŧ˙˙˙c(<˙˙˙//- /-NšGĸ&Oī p˙°ƒfp°šžZgÚp °šžZgĐp˙°ƒgڃ—­J­g×­ `Ļ Lí8˙čN]NuNULLPIPENU˙~Hį:(- *-~˙GųžZIųLæNšBR+@˙‚l Lí\ø˙ZN]Nu/-˙‚Hx0NšOĐšoŦ$@|;|˙Œ/NšAÂ%@Hx/Hy>iNšCLJ€Oīfj EJ(g (_fZ|Hx_/NšAT+@˙~POg,pЅ°­˙~f*pŅ­˙~ m˙~Jg 0fpŅ­˙~ m˙~Jf+D˙üx`pĀ„f +|˙ü`B­˙üpĀ„r˛€f &ŧ`˙0 9œÖĀŧą„/NšBm˙ŒJ…XOg EJgHy>d/NšCÚJ€POf %Gŧ`˜/NšOVJ€XOfļ -s short Unix "ls -l" format (def.) -1 filenames ONLY, one per line -m medium Unix "ls -l" format -2 just filenames but allow -h/-t/-z -l long Unix "ls -l" format -v verbose, multi-page format miscellaneous options: -h print header line -t print totals for listed files or for all -z print zipfile comment %c-T%c print file times in sortable decimal format %c-C%c be case-insensitive %s -x exclude filenames that follow from lisg$SAgSAgpņ` "<˙˙˙NC°ŧ˙˙˙öfJ¯gpC"/NC Lß Nup` p/ `p@`pA`pK` pOr"o `Hį0 o6/NCLß NuNU/ Eųžm m 0-Āŧ˙á€B2-⁀5@0-Āŧ˙á€B2-⁀5@ m m mm/ NšS$m˙üN]Nu o"o / J€gS€ŲföJ€gS€ü`ô /NuHįpĀ$/g,&/g&Sƒ BRƒ"Cggŗßgđ`č ¯LßNup˙`ö o"o JfüSˆŲfüNuHįp&oNApLß NuNU˙āHį0,-&9žfJ†f p˙Lí ø˙ÄN]NuJƒg˜ FJgčHx=/NšU–$@J€POgB/NšUŽ+@˙č gŧ=J­˙čgV m˙čSH(`p˜€¸ƒg DJ(˙˙fđ/NšXЄR€+@˙āa¨R€ C‘íateDCL implodeu†uŒu“u“u“u“ušuĸuĢuŗuÄ%s: bad filename length (%s) %s: bad extra field length (%s) file #%d: bad zipfile offset (%s): %ld %8sing: %-22s %s%s%s %s: %ld bytes required to uncompress to %lu bytes; %s supposed to require %lu bytes%s%s%s %s: bad file comment length local header sigfile #%d: bad local header (attempting to re-compensate) warning: %s appears to use backslashes as path separators skipping: %-22s %svolume label replace %s? [y]˙āЈ*//-˙ā/NšT¤Oī fpū`˙f fō`˙\XO~Jšžbg`pŪ€ å€ @ŅųžbJfėaR*/NšXR€&@ ЋR€//9žfNšV–&POg˙#Þf/ CŅÅHPNšV EŅËB08/NšV$`ūčNU˙ü/ $yžfJšžfg`/ NšXR€ÕĀXOJfî J‘ųžf $m˙øN]Nu o"o`"o o / / ŗČgpcrŅĀĶĀ24 „ABfR°ŧe&"‚ü,iHį>p,` ‘ĀLĐ|üHá?>QÉ˙ôHA0Lß|ø2æˆ`# # QČ˙úŧdđĀŧf` QČ˙üŧdō Nu24 „ABfR°ŧe&"‚ü,iHį>p,` LØ|üHŅ|üĶĀQÉ˙ôHA0Lß|ø2æˆ`"Ø"ØQČ˙úŧdđĀŧgĸ`ØQČ˙üŧdō` o /°f NuJfôpNuNU˙øHį (-/Nšes, [n]o, [A]ll, [N]one, [r]ename: NULL (assuming [N]one) new name: error: invalid response [%c] At least one %serror was detected in %s. Caution: zero files tested in %s. %s: stored in VMS format. Extract anyway? (y/n) skipping: %-22s unable to get password skipping: %-22s incorrect password %d file%s skipped because of incorrect password. (may instead be incorrect password) No errors detected in compressed data of %s. No errors detected in %s for the %d file%s tested. %d filX&JšžbXOg:J„g6$yžb`*///NšWŒJ€Oī f CŅŌ =f RŅÃRH `XJJ’fŌpLí˙ėN]Nu"o o ØfüNuNU˙ôHį0v&m`/ NšXR€×ĀXORƒJfėpЃå€//9žbNšV–$@J€POf p˙Lí ˙čN]Nu#Ęžb&m`$Ë/ NšXR€×ĀXOJfėB’ `ĐJ¯fNųWŪJ¯f /oNųWŽ oYˆ Y€"/’€^øJgPnHį00`hHį00Cųž&Y‰Gđ$I$)gPĶÂŗËfō˛‘bFg*“šž*͐GņĶĒ&‘““'ig“ĢLß /Nu“šž*͐")fBĒ`âĶĒ`Ü//NšWŽXJ€g8"@$)˙ü o"(˙ü´d"Yä‰$HB`"ØQÉ˙üQĘ˙ø&//NšWŪX Lß Nu o"o$/ prS‚k g°gōNuNU˙üJ­gpŅ­/-e%s skipped because of unsupported compression or encoding. error: %s%s %s error: %s%s not enough memory to invalid compressed data to inflateexplodewarning: %s is probably truncated %s: unknown compression method bad CRC %08lx (should be %08lx) compressed EA data missing (%d bytes)%s compressed WinNT security data missing (%d bytes)%sbad extra-field entry: EF block length (%u bytes) exceeds remaining EF data (%u bytes) invalid compressed data for EAs unsupported NTSD EAs vNšZ,+@˙üfpN]Nu m˙üXH `ōNU˙ü/ J­g mYH$HJ’g rf // NšX"$m˙øN]Nu o JfüSˆÁˆˆNuNU˙đHį:&- (-Jƒo rg p˙Lí\˙ØN]NuEųž`(J jŅĘ$H¸ŠcŅŌ¸ˆeJĒfæ`ĐpЃrøĀ&/Hyž&/NšZ˛×šž*pЊ&@ P€°’Oī fzšüžfJĒglGųž"`,K kŅË&HpЊˇĀg JĢfč`˙n ‘šž. ‘šž*JĒg jŅʑĖ)H`BŦJĢg kŅˑÎ-H`BŽ/ NšY p`˙"Hį00p oNALß NuNU˙đHį0Eí˙ø,-Gųž>J†n#üžZpLí x˙ØN]Nu ^€røĀ$€(/ Hyž&NšZî&POo ‘šž* `Ęp؀NšZڐšž6$€ 9ž:šž.*ē’l$…J“o¸’o #üersion %d bad CRC for extended attributes unknown compression method for EAs (%u) out of memory while inflating EAs unknown error on extended attributes error: unsupported extra-field compression type (%u)--skipping error [%s]: bad extra-field CRC %08lx (should be %08lx) Archive: %s %ld bytes %d file%s Archive: %s %ld %d End-of-central-directory record: ------------------------------- Actual offset of end-of-central-dir record: %9ld (%.8lXh) Expected offset of end-of-cen žZ`Ž °“o ¸“l$“`$„Hx˙˙B§/Nš[(&oŌ/Hyž"/NšZ˛ Ņšž.p‘’/Hyž&pЃ/NšZ˛ Ņšž*/a˙ `˙.NU˙ø/-HxHyY2Hm˙øB§Hx/9ž2 yžBNJ€Oīl /-aūÎN]Nu -˙ørhgHxNšZ’#üžZp`Ú -˙ü`ÔNUB§/-Hx/9ž2 yžBNN]NuHį02Î o"o"/ p NALßL Nup` p`p`pHį00"/NA Lß NuHį02 oÎ"o"p NAJ€f "o"LßL Nup8 / "fpņ`(" send contents of foo.zip via pipe into program more -M pipe throuruncated Central directory entry #%d: --------------------------- %d file%s, %lu bytes uncompressed, %lu bytes compressed: %s%d.%d%% MS-DOS, OS/2 or NT FATAmigaVMSUnixVM/CMSAtari STOS/2 or NT HPFSMacintoshZ-SystemCP/MTOPS-20NTFSSMS/QDOSAcorn RISC OSMVSWin32 VFATBeOSTandem NSKnone (stored)shrunkreduced (factor 1)reduced (factor 2)reduced (factor 3)reduced (factor 4)implodedtokenizeddeflateddeflated (enhanced)imploded (PK DCL)normalmaximumfastsuperfast There are an extrgh "more" pager *, ?, [] (e.g., "[a-j]*.zip")ZipInfo %d.%d%d%s of %s, by Greg Roelofs and the fine folks at Info-ZIP. List name, date/time, attribute, size, compression method, etc., about files in list (excluding those in xlist) contained in the specified .zip archive(s). "file[.zip]" may be a wildcard name containing %s. usage: zipinfo [-12smlvChMtTz] file[.zip] [list...] [-x xlist...] or: unzip %s-Z%s [-12smlvChMtTz] file[.zip] [list...] [-x xlist...] main listing-format options: a %ld bytes preceding this file. unknown (%d) offset of local header from start of archive: %lu (%.8lXh) bytes file system or operating system of origin: %s version of encoding software: %d.%d minimum file system compatibility required: %s minimum software version required to extract: %d.%d compression method: %s size of sliding dictionary (implosion): %cK number of Shannon-Fano trees (implosion): _g$R fžNšP g” Ng nf j$fp`˙~p`˙x @ÁN@?/Nu 2FÁ/A fNš÷Nu../.._NU˙đHį,- ~(-/NšXІS€*XO`pĐƒØ€pš€`S… E _gē†dōR‡/HyPNšRČ&POlĐ/HyPNšRČ&POlŧ E‘ÆRH&/NšXЃ°­XOc#üžZp˙Líø˙ÜN]Nu///-NšR / mŅÃHPNšV `ÔHį0p o6/NC oLß NuNU˙øHį&- /-NšUŽ(XOf(<Pö/NšXR€+@˙øJƒf/-NšWŽ&XOf"pLí˙đN]Nu -°­˙ød #üžZ`Ū//NšV `Ō=NU˙Î/Aí˙Î&/-/NšVHyQl/NšS/- /NšS/NšS.&-˙ĘN]NuHį0v˙ opB"/AÁAÁAÁAÁAÁAÁAÁAÁAÁ  A  Á  A  Á  A  Á  A  Á  A  ÁAÁAÁ           skipping: %-22s need %s compat. v%u.%u (can do v%u.%u) skipping: %-22s unsupported compression method %d skipping: %-22s `%s' method not supported storeshrinkreduceimplodetokenizedeflateenhanced defl %c compression sub-type (deflation): %s file security status: %sencrypted extended local header: %s file last modified on (DOS date/time): %s 32-bit CRC value (hex): %.8lx compressed size: %lu bytes uncompressed size: %lu bytes length of filename: %u characters length of extra fextract files to stdout/screen (CRT) -v list files (verbose f`p5b23Jû Utility 1.07  2000 The Turbo Team. ˙˙˙˙˙˙CONaēv˙ppNCJ€fCú˙æ"ˆ`pNBpNACú˙Ō"ˆŲÎ|ŨüøCīūĸBĄ-IŒ-IŒGî€pr4Eî‘,6gļ| ezú`ZEę˙Ø$ŸSCföEîŒ $ŌBQČ˙ú$z˙~$jEęh AÃgzņ`*:dAú˙. Ф€Ę Ā0¤ $N@Aö-HŒI&H c>>gšËoö` Ģ((TZ˙üfęT‹-KŒ"&j×Ę& 8r4j|Ø˙Jk:KôĐ(nŒ`: ..Œ"fb~$zūô$jEęh* $j ÕÅgĒH…GōP @ĩVÍ˙üg$KP‡&CJsxgö`Ü$K&C3xfAúÄ`|åB)ŗx ield: %u bytes length of file comment: %u characters disk number on which file begins: disk %u apparent file type: %s VMS file attributes (%06o octal): %s Amiga file attributes (%06o octal): %s Unix file attributes (%06o octal): %s non-MSDOS external file attributes: %06lX hex MS-DOS file attributes (%02X hex): none 4g‚Rˆ`˙~Hį@"GJQkP&Iv˙6+Gķ06g"$KH… @ĩVÍ˙üg H…fREGķP`ÚƒgT‹`ĐŌŅ`ŧU‹ÖĶåB)‹ Lß`˜Lß`˙>AúX/. &C zū,$@H‚SBv˙pNCJ€gNQĘ˙đ* "_4pNCJ€gN"G E& rų`˙J is redefined.  is not loaded. .Œ"g&@0k2+g Hį˙ūNŗLß˙Gķ`äGî€z Kp?B˜QČ˙ü2<ŧ_D¸Agzņ`H'| ˛0'|˛4 D€'@(PëTGúũl g/ @pNBp˙&€"_NÕ*_` *_*UÛÎ`:UÛÎ0Nö Növr˙Aúũ8pNBJ€f.Nu*_:UÛÎ0NöØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØNŌ8*0(YJ@fJDg S@`JDf RD@ĀBaDĀNu. ]‰f@°| MS-DOS file attributes (%02X hex): read-only MS-DOS file attributes (%02X hex): %s%s%s%s%s%s error: EF data block (type 0x%04x) size %u exceeds remaining extra field space %u; block length has been truncated. The central-directory extra field contains: - A subfield with ID 0x%04x (%s) and %u data bytesPKWARE AVOS/2PKWARE VMSPKWARE UnixInfo-ZIP VMSold Info-ZIP Unix/OS2/NTUnix UID/GIDuniversal timeold Info-ZIP MacintoshZipIt MacintoshVM/CMSe:0DŅÅEé˙öHĀ•ĀĩČe*a I"E3`20(Yg2RAØÁâYSA$$QÉ˙ú3Nu]‰* 8aØ I#3aĐÃH “ΑÎ4xæN’"GBaJjãNuJ€gújTD€ŅĀŲĀJ@g S@ QČ˙üR@J€gāŧ`ęNuEî„^GîƒVr cNĶЁ’€$_ԁGNķļHĀEé˙€•ĀĩĖeJ€o¤r °cÚ"g" g¸ØS€f{9M8X{" fĸ4äˆEî„ĀGî‹Čr bЁ’€Eî„ÖԁNķNĶg8ØgØNuz$MFE`z$_4HF<HF* gRŒ&Lpį€ŲĀAé˙€ąĖdN*L(K°|kf$ güÚr˙(( R„„/$E`füÚ\ŒQ€fô( R„„/$LIí˙ø28ü˙˙AfB,˙ü`0(Š4Ų Ab&g"* E2*˙ūSAkâAØØQÉ˙úAé˙€ąĘd`Ū$ŲIė˙ôšËjļ(EHį Aé˙€ąĘeä v Mî€zMVSOS/2 ACLSecurity DescriptorBeOSSMS/QDOSAOS/VSAcorn SparkFSFred Kantor MD5ASi Unixunknown. The local extra field has %lu bytes of OS/2 extended attributes. (May not match OS/2 "dir" amount due to storage method). The extra field is %s and has %lu bytes of VMS %s information%sstoredrun-length encodeddeflatedcompressed(?)ŒđŒ÷ . The local extra field has %lu bytes of access control list information. The local extra field has %lu bytes of NT security descript“ΛΗΕÎ,Š-I-IX?.6î~rN"nXCņč2˛n6LßP@f‚J€f‚HF:k f _"_HFNĐNu*_FEgđHFJDjDD`"¸|f0. I6g aū<gRˆ"H#3ēDgČē|g,kZ¸|f`D>HĮ™Į Y“ΑÎۈ4xN’J€gNĶÎNu¸|g aD#3Nu>HĮ™Į Y‘Îۈ“Î4xN’J€gNĶÎNu¸|g L‘ΓÎ4xōN’ĶÎ# "ŌŽ’Œ3ŲÁNu/ JŠfü0`XJif$0@m@D@o")āĄJAf X‰XHA2`ĒxJ)l4ü-")Di Āfã‰SQlâBQ`â‰RQgSQr˙â‰#A Qm4n Šw5”m(RDa“Îp4xN’J€gNĶÎ`Ô]‰"ŧPBiNu Qn&m Š_^đnSDaܓÎp4xN’J€gNĶÎ`ÔpY"āŠZŒZŒtpHA0€ü H@or data. The local extra field has UTC/GMT %s time%smodificationaccesscreation. The Mac long filename is %s; its type code is `%c%c%c%c'; and its creator code is `%c%c%c%c'. The local extra field has %lu bytes of %scompressed BeOS file attributes. The QDOS extra field subtype is `%c%c%c%c'. The AOS/VS extra field revision is %d.%d. The 128-bit MD5 signature is %s. The first 20 are: : %02x There %s a local extra field with ID 0x%04x (%s) and %u data byte2HA‚ü 0HAÃ@0QĘ˙Ū Dn D˙˙mz`*xRD L`TˆQĖ˙ú|.˙˙PŒRŒ $0gú .gRŒJEgüE3 L‘ΓÎ4xōN’ĶÎ(HŲÎ]‰" $’‚2#BAé˙€ąĖdNNu nŒ0j @€gD@ @˙c@¸3`&#3x` @˙g># 3aûîgRˆx˙`3x-HŒ`ũ€0"@lr@D@gk¸HAāadRA3NuHAkö`ö2HÁ&gz0<փhJR@Nu€@ €@ 0@l>Bi˙ü#|@˙ø`ĸ0@l&Bi˙ü#|@˙ø`Š0@lBi˙ü#|@˙ø`r @lėAú˙”Đ@ @mr20ā`"0BA0)˙ūŌ™iĖn &փi"S@Nu")Di Āfã‰SQlâBQ`â‰RQgSQr˙â‰#A\‰0i˙øl0D@ @ lŽ"s (%s). GMT modification/access times and Unix UID/GIDGMT modification/access times only There is no file comment. ------------------------- file comment begins ---------------------------- -------------------------- file comment ends ----------------------------- %03d%2u-%s-%02u %02u:%02u%u %s %u %02u:%02u:%02u%04u%02u%02u.%02u%02u%02u‚K‚b‚h‚l‚q‚x‚‚‘‚›‚¤‚Š‚ą‚ļ‚ŋ‚Ņ‚Í‚Ü‚á‚ė‚úƒƒƒ'ƒ:ƒMƒVƒ`ƒiƒ}ƒƒ–ƒžƒŖNXFSfatamivmsunxcmsatrtJ@gāĄdRtS@ngt˙0)˙ôŌŠ˙ö`* @ ll")˙útJ@gāĄdRtS@ngt˙0)˙ūŌ™i&g4&փi–‚hւS@"t&åŖi"Bmâ‚fđNuâ‘R@ f(NuD@āĄB@NuX‰Aé˙ô0"Nu0)˙ū"NuŠlppzų`zî`zņ`zü` zö`zú`pũ*Eî>4Å4†Eî€P$ę˙üJ‚n$ŌEî€\J.€FgŊęfJ‚nJ…kPzų`L*B"oō"A(oė(D"oæ,A"oā.AEî€H"RšÁn&A"P‹ g&@ [ € €`îJ`Ú$`øCî‹~J…g^a4xĐN’Cî€N’CN’24xÎN’4xĐpũē€fC` Cî‹ŧN’ 4xĖN’aHrEîŒ, k °|c @pNBEę(QÉ˙ę":ôĘvpNA **** Task  halted, after line  adjust DATASPACE please. . Reason: hpfmaczzzcpmt20ntfqdsacovftmvsbe nsk???storshrkre:1re:2re:3re:4i#:#tokndef#edefdcliu###JanFebMarAprMayJunJulAugSepOctNovDec      #+3;CScsƒŖÃãcc !1AaÁ  0@` ??'Ÿ".ÅÎ^%So??Y˙­ŊœĪžŨõų¸ĻŽĒđŠîøņũüīæôú÷û§¯ŦĢ퍎ĩļĮŽ’€ÔŌĶŪÖרŅĨãāâ噞ëéęšíčᅠƒÆ„†‘‡Š‚ˆ‰ĄŒ‹Đ¤•ĸ“ä”ö›—Ŗ–ėį˜ĮüéâäāåįęëčīîėÄÅÉæÆôöōûų˙ÖÜøŖØ×ƒáíķúņŅĒēŋŽŦŊŧĄĢģĻĻĻĻĻÁÂĀŠĻĻ++ĸĨ++--+-+ãÃ++--Ļ-+¤đĐĘËČiÍÎĪ++Ļ_Ļ˝ĶßÔŌõÕĩūŪÚÛŲũŨ¯´­ą=žļ§÷¸°¨ˇšŗ˛Ļ error: cannot open zipfile [ %s ] error: cannot create %s error: zipfile read error warning: filename too long--truncating. warning: extra field too long (%d). Ignoring... %s: write error (disk full?). Continue? (y/n/^C) error: zipfile probably corrupt (%s) --MoP˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙re--(%lu)--- Press `Q' to quit, or any other key to continue --- ;Zx—ĩÔķ0N%c%d%%100%% Length Date Time Name ------ ---- ---- ---- Length Method Size Ratio Date Time CRC-32 Name ------ ------ ---- ----- ---- ---- ------ ----–c–ƒ–Ŗ–â%s ("^" ==> case %s conversion) %7lu %-7s%7lu %4s %02u-%02u-%02u %02u:%02u %08lx %c ------ ------ --- P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙P˙˙˙˙PHzú zī>/ gRĐ@Đ@j aņôCúī*"ˆ`ę"zī"ix"qCé QĀm i´lCú$rtv˙p NCrp)NCrp(NCp'NCp NC"_NuĀ´ HzųÚ :îŌg @6<čpNCNu ------- %7lu %7lu %4s %u file%s %7lu %02u-%02u-%02u %02u:%02u %c ------ ------- %7lu %u file%s NXFSStoredShrunkReduce1Reduce2Reduce3Reduce4ImplodeTokenDefl:#EnhDeflImplDCLUnk:###Ũ°UnZip5.32 (c) Info-ZIP Group *ôÜ<>01 Info-UNZIP5.2b &$.0~,8%rHT˙˙˙˙˙ Exit Delay˙˙˙˙ Unpack ModeSMS/QDOSDefault˙˙ Listing ModeDefaultSMS/QDOS˙˙Aų™t9™Œ€9™pNu ļ˙˙˙˙6Unknown error 00000000000g!&""$k("7´"$š8"7´"$~!&"Ŧ"7´˙˙˙˙kaG7ûé×ĮģŠ™‡{eSG5&öâÎŊŽŸ‡zdUI;*ūëŌž(4 $}ļ˙con3p0123456789abcdef0123456789ABCDEF'D>KöpNîƒ*NÕNîƒ*0>Eöp$ŒBœBœB”IôAé˙€ąĖdNNîƒ*Aé˙€ąĖdNEî€X$ÍHŌŌNîƒ*Ba#Nîƒ*JQf>Köp`JQf`T\‰Nîƒ*/ Nîƒ*3Nîƒ*4# 30SBkŨQĘ˙ügRNîƒ*NŽ„čNîƒ*BaNîƒ*NވĖ#3Nîƒ*>$vp4Ų$™Nîƒ*Aé˙€ąĖdNAî€H  Œ" R(A(Ā.ŪŽR(ÍBœ‡*GfNÕNîƒ*>$vp3*#Nîƒ*JŠgB‘`"ŧ@BiNîƒ*2˛| eNÂü('¸›˜'¸›Š'Š0000 (LIBM_A library needed to print Floating Point numbers)8ŧ8ē ntfvrab>n@€@Đ Â˙˙˙ŧ˙˙PROG_USESPL_USE˙˙ ((((( H„„„„„„„„„„‚‚‚‚‚‚  EîŒ(Gō$‹JkęB.Œ&Nîƒ*0# 3 M>NŽ„v*HgRNîƒ*J.Œ&fŽ$nŒ( R. $ R‚‚"Bp v˙NCJ€f "B0)2f 0* HĀ2*""G4(Y. v˙J*g.J@g*ĐBR@˛@ez a`"ÃE(pNCJ€gN "Nuz aæpĐB€ÁH@5@ B*"LpNCJ€gN"GNîƒ*J.Œ&f"$nŒ( RB*Bj . r v˙pNCJ€gN"GNîƒ*DQhNîŠpNîƒ*:NŽ„ęNîƒ*0(Ygp3Nîƒ*2&’Qgk SAf(")â` RAfâƒ")–irļn ԃm"ŧ@`B‘BiNîƒ**UÛÎNîƒ* $M€fNöKöNîƒ*Nî‹tNîƒ*> vp$XvšĘo" gÃ8&H"0ü˙˙4o ˜Bm8VBjNîŠx‚0ÂHÂJg˛‚fx?%BUp&‚Jƒk IJfh".Œ’‰g(Hįā¸IėˆŲÂŗĖdN Ič˙ø™ÂNŽ„„ œīDzHžPÚDATA_USE˙˙ Ē˙˙˙˙P˜–[Pn   ø         `8"$DJ $& 86ŠxāœP6N ,$ * 0 0 0 2 0$  &  &  &  ˜ā ( ,*, , ,, h6œ^fT <*Tb: B B F >"B@ ú X 8 DJ>hŌV@VZVLd>(Š"F>(Š"JL N(†"8>((PH*$FD4:HD<*HdL>6 l †”Vj , *0,$j\ î 02 ¤  &.hĸ˛*4,Tĸ˛*4,TÎÄ*4,TÎÄ*4,T r4LßAđ"H“Â$I'J˙üYŠ ŠQ‰Aé˙€ąĖdN>-Aöp#H-I€\-IŒ“ÁBą`\*’‚gTĶÁAé˙€ąĖdNHįˆ>- vp$P. ž…ÕĶÕÁĶ’ĶŽŒ$P Ё € *˙øg @Ё%@˙ø P PšĐmâ h˙ü (€ @`ė( E(EŲÁ Ђ.mD€~ЇNŽ„. L(DLßJ@gÔD‡-I€\päd0Ā` ĀS‡lúDü`ē*+˙øšĢ˙ü´…oš&–…Hįā $n€HĩËo׎€H`ג$HAę` RąËlđ$HAë˙ø P×Ģ˙øPˆ g0Áˆ(Áˆgרא* @" &X Y€°…fד˛nא&AXˆ`ĖĩËl´ Iô8Aé˙€ąĖdLßN/ k˙ø(H‘ЈNŽ„6(_LßJ€g”k .`˙6$k˙ü:ßJDk4„TNîƒ*2&Lg 0R@€$IŌĀS@âHÚÚQČ˙úgSŒ# 3Nîƒ*6HÙÃ&Y> vp0( U@jNîŠl P°Cd60Ã4f2>b  ^6\,.2"(4b*H&˛"FJ$T,x$Xt R(Œ> $<06$,j,<::4Œ4d,df$,~  N::&*T~B<&@*H  t P@*@  D<„>8f  >2ČV0,\XJ6@$H*Ž$ J\0:.:PFxT 046*:P@0L@22,0*"< .0d.$Z(D$N¸, F.*.Ô :„$˜ @(8@(8@(NF2 >>N666:::<>žŪĒH*v*0Î Œ 8(( ""$ äJ d060<,H>0PF 8 6$ˆN p"@~ļ|o0HĀ. (H KNŽ„„(G` SCkÛQË˙üNîƒ*>$vp R0# 3gNŽ„vNîƒ*vNރ˜fBĄ`#<@Nîƒ*NރäNîƒ*Aî€H fNîŠl(@R€€&@ ›( gÁ‹ [ € €`î„*DgNîƒ*NÕNîƒ*\Œ LIė˙ö(ČÉH>Eöp(Ę(Ō$ˆBPB¨BœNîƒ*$LPŠ4ü˙˙2mVAjNîŠx4ÁHÁ& Gô YŒ(˗Á(Ë(ÁŲÁPŒPŒAé˙€ąĖdNBRÕÁ>Aöp$Č$RšB’ ƒNîƒ*vNރ˜gBĄ`#<@Nîƒ*")Di Āfã‰SQlâBQ`â‰RQgSQr˙â‰#ANîƒ*2˛if"˛Šf "ŧ@`X‰B‘BiNîƒ*$LPŠ4ü˙˙2mVAjNîŠx4ÁHÁ& Gô YŒ(Ë* —Á(Ë(ÁIô04€R@â@4ŲQČ˙ü>Aöp$E$Č$RšB’ ƒNîƒ*0"&)Bi(ˇ„jJk؄`4JjÁB´@fļ& x¨j B$D,"Zd$48 "‚"FDP`ZFD˜d”H`Rj."Z8Ž€rz 66pĸ :2 ^ J2> :* > N ~$ & &|: $B6N  x(<*d"ŧ@`B‘BiNîƒ*Nމ˛#3Nîƒ*04"BjtBDBäĄ A"Œ3NŽ„vNîƒ*>$vp fNîŠl @3Nîƒ*2˛QY‰gB‘`"ŧ@BiNîƒ*0"@jp@D@āĄ AB!Nîƒ*2)ŌYhNîŠp2Nîƒ*3Nîƒ*4n4)2nr6o (QļBj 4˛|fU‰`Aô˙”Ad BaRBgNîŠx8RD3ØQĘ˙üNîƒ*vNރ˜gBĄ`#<@Nîƒ*0"@jp@D@āĄgNîŠt A3Nîƒ*Nމ4#3Nîƒ*NވĸNîƒ* <@°Šf0\‰ĐY"f3`4°Šf0"ĐY"gė@3°|˙cNîŠp“Îp4xN’J€gNĶÎNîƒ*Nމ‚#3Nîƒ*0"&)Bi(ˇ„jJk؄`4JjÁB´@fļe"ŧ@`B‘BiNîƒ*0"&)Bi(ˇ„jJk؄`4JjÁB´@fŒ,D2 (      &    <8 "     &\4Z & V * ,& ( "  *&   `Ž<(,40",  4 8 (  "0^:h,^ˆ  86D   ( , V  ((*HP$"HH`R  ,p4€4"B2$  L ,~XŒ2,,   .$D$0 4,.8$ (n&ŽFd& hJB2V ŪDr>f4" 2 h,nô X€rôˆÂ<ŠŒ^ö6b8 ., &,$,(,$ . 8 ė2ļcB‘`"ŧ@BiNîƒ*\‰JŠgJŠ˙üg"ŧ@`B‘BiNîƒ*0.4"BjtBDBäĄ(A GHĀNŽ„„(GNîƒ*0"@jp@D@āĄ0"@jp@D@āĄ A…Nîƒ*0"@jp@D@āĄ:0"@jp@D@āĄgNîŠt A0…Nîƒ*>- vp$XvšĘo" gÃ&H"60Ã4o&VBk"‚p˙´Pgp0Â?tx:k R…ÄÅ8¸‚gNîŠxēPgJCgp0ÅQË˙ā8Ä×&‚Jƒk IJfh".Œ’‰g(Hįā¸IėˆŲÂŗĖdN Ič˙ø™ÂNŽ„„LßAđ"H“Â$I'J˙üYŠ ŠQ‰Aé˙€ąĖdN>-Aöp#H-I€\-IŒ“ÁBą`\*’‚gTĶÁAé˙€ąĖdNHįˆ>- vp$P. ž…ÕĶÕÁĶ’ĶŽŒ$P Ё € *˙øg @Ё%@˙ø P PšĐmâ h˙ü (€>8> <    B8DBl,2"*.   d H &j(.,.Jh 4@ " .$<$JB   D  H.$8"&F>2  : 6 "ō>`$V$´ ˜PD$.8 &  `¨(4&  4V, *:F@H0&8.   * ļ ~XøŒ˛4Î.   ,H\xFXTccČFshort format) -c @`ė( E(EŲÁ Ђ.mD€~ЇNŽ„. L(DLßJ@gÔD‡-I€\päd0Ā` ĀS‡lúDü`ē*+˙øšĢ˙ü´…oš&–…Hįā $n€HĩËo׎€H`ג$HAę` RąËlđ$HAë˙ø P×Ģ˙øPˆ g0Áˆ(Áˆgרא* @" &X Y€°…fד˛nא&AXˆ`ĖĩËl´ Iô8Aé˙€ąĖdLßN/ k˙ø(H‘ЈNŽ„6(_LßJ€g”k .`˙6$k˙ü0_f S„BRÕČQĖ˙úXNîƒ*>- vp$XvšĘo" gÃ&H"60Ãtxp˙:k REÄÅ8¸‚gNîŠxēPgJCgp0ÅQË˙ā8ԂԄԂ&‚Jƒk IJfh".Œ’‰g(Hįā¸IėˆŲÂŗĖdN Ič˙ø™ÂNŽ„„LßAđ"H“Â$I'J˙üYŠ ŠQ‰Aé˙€ąĖdN>-Aöp#H-I€\-IŒ“ÁBą`\*’‚gTĶÁAé˙€ąĖdNHįˆ>- vp$Pöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö. ž…ÕĶÕÁĶ’ĶŽŒ$P Ё € *˙øg @Ё%@˙ø P PšĐmâ h˙ü (€ @`ė( E(EŲÁ Ђ.mD€~ЇNŽ„. L(DLßJ@gÔD‡-I€\päd0Ā` ĀS‡lúDü`ē*+˙øšĢ˙ü´…oš&–…Hįā $n€HĩËo׎€H`ג$HAę` RąËlđ$HAë˙ø P×Ģ˙øPˆ g0Áˆ(Áˆgרא* @" &X Y€°…fד˛nא&AXˆ`ĖĩËl´ Iô8Aé˙€ąĖdLßN/ k˙ø(H‘ЈNŽ„6(_LßJ€g”k .`˙6$k˙üfBZBšS„føXNîƒ*.Eöx-JŒNîƒ*$]ÕÎNîƒ*>&vp Ў'M'@7Y'Y26Á$&ÂAú&Č ŽT@0€`#+3P‹Nމ4#A˙ü$2\‹+ą)˙üjJ‚kpS`˛@f` 0J‚kô°Af +°‚d*k ` 7A˙đ'B˙ō*kNîƒ**JNîƒ*zNވRNîƒ*8HÄoolkit file of the right vintage•ú–’•8•>š$•“f”äH›Ü•J“f•• •8•0‘Ū• •¸•Ū% Default device: •ú•• •0’ •• •0‘Æ•“f• ›č• –Ę’˛™¤“N•• •0‘Æœ “N• œ"”ė´˜—$˙˙´œ”–´• •¸–’•Ū% Beep on error in EDIT$: •ú•• •0’ •• •0‘Æ•ny•“f”äP›Üœ<• œZœlœr• –Ę’˛•yœ¸•J“n•“n”ä›&”ėĩR•• • %•0‘Ū• •¸•n •ú–’•• •0‘Æ• •¸•Ū% Default length of EDIT$ buffer: •ú•• •0’ •• •0‘Æ•“f”ä@›ÜœÎ• –Ę’ļ•>•Jodes are •ú•“Ĩ†•ú• to •ú•“ Ĩ†•ú•)? •ú”–Ø—$˙˙Ø”–×r•“• ”먕• •0’fƒ•”š$š$•X˙˙Ņ™•• • €•0‘•• •0‘Ō•• • •0‘Ū• •¸•Ū*Quantum Leap User Defined Graphics Editor.•ú–’••8•0‘Ō• •¸–’•Ū. This program allows you to re-define the dot•ú–’• •¸•Ū-patterns which the QL uses to represent text.•ú–’• •¸–’•Ū. Use the cursor keys or joystick to move over•ú–’• •¸•Ū-the character - press SPACE or FIRE to change•ú–’• •¸•Ū+the colour of a dot. Press ESC (cancel) or•ú™Ä&Y>$vp$XŠp2:JAk60°RkNîŠxĀÃÆÚԀQÉ˙î BUEjNîŠlēDd80ĸ|o0HĀ. (H KNŽ„„(G` SDkÛQĖ˙üNîƒ*zNވRNîƒ*8*>$vp ZXŠtpv20°RkNîŠxĀÃÆÚԀQÉ˙îԂ"ŌÔŅÂ0Ä …Nîƒ*0$M&v*kNîƒ*\Œ(ü˙˙ŠfIė LIė˙Ū(ČÉH>Eöp(Ę(Ō$ˆBœNîƒ*:mT8mP>$vp ZXŠp2>JAk60°RkNîŠxĀÃÆÚŅĀQÉ˙îUG$L4ÔEf:g6x`JDfxJEf:f:žEdNîŠxšDREmöGđ@IôPAé˙€ąĖdN# 3ē|o0HĀ. (J KNŽ„„(G` SEkÛQÍ˙üNîƒ*>$vp ZXŠtpv20°RkNîŠxĀÃÆÚԀQÉ˙îԂ"ŌÔŅÂ#(3Nîƒ*NކŌNîƒ*?/Nîƒ*#3Nîƒ*TŒ L]Œ(ČÉH>Eöp(Ę(Ō$ˆBPBœNîƒ*>$vp4™Nîƒ*“ĒĨL“–•“ĒĨL“†Z•“ĒĨL“ŽĨÔĨŽ•>Ĩ–ĨŽ•>Ĩ–›Ü•J“Ε•“Ē•“•0‘Æ’••“Ē• •“ĒĨL“š• •“ĒĨL“š•0‘æ’R••“Ē• í•0‘Æ’••“Ē• •“ĒĨL“š•0‘â’•“Ē•“Τ8“𕕐“Ē• •0‘Æ’••“Ē• •“Ε •“Ε0‘æ’R•X˙˙Åoš$šb“Úšb“Fšb“Ūšb“═“Ē”ä`› ”ėČŪ• •>•J“Ē”–Čø•“Ē”äPĻ|”ėČø• •>•J“Ē•X˙˙ŋ]•“”ėÉ0–Ę’R• ”ä`ĨL“–”ä›&Ϗ”ėÉ0•X˙˙Í?• • –Ę’F“–Ô•>•J“Ú•“Ú•“Ļ›&•“Ē”äp› Ū”ėʒ•“Ļ• Е>–ä”ėÉܕ“ĒĨL“–•“ĒĨL“Š•“ĒĨL“’”äPZ› ”ėÉØ•“Ē•“ĒĨL“–•“ĒĨL“’”äP›Ü>$vp3Nîƒ* )gdGú"°›f*")g˛›f, S g&0#S`6\‰`z €@g")°f*#|@`JŠgÎ0<Q\‰ĐQ2€°|˙c:NîŠpU‰`2Gú˙ļ. :&ؚY&Ņgė"G6ŧ “Îp4xN’J€gNĶÎÚQ6Å&ŠNîƒ*0"&)Bi(ˇ„jJk؄`4JjÁB´@fļc"ŧ@`B‘BiNîƒ*\‰JŠ˙üfJŠg "ŧ@BiNîƒ*JQg>Köp`JQg`T\‰Nîƒ*2˛if "˛ŠfB‘`X‰"ŧ@BiNîƒ*J.Œ&fŠ$nŒ( R. $ R‚‚"Bp v˙NCJ€f "B0)2f 0* HĀ2*""G4PBBøQAB*. "L’Bj ŧ tBj `$”@ntÕj 6SCü QË˙úEöxāĩÉdN"Lv˙pNCJ€gN"GNîƒ*2˛| eNÂü(EîŒ(Gō$‹Jkęv˙. ¤8“–•X˙˙Įŋ—,˙˙Č˙”–Ęˆ•“Ļ• ؕ>–ä”ėĘR•“ĒĨL“–•“ĒĨL“†•“ĒĨL“’”äP›ÜĻ|”ėĘN•“Ē•“ĒĨL“–•“ĒĨL“’”äPZ¤8“–•X˙˙Įŋ—,˙˙Č˙”–Ęˆ•“Ļ• Ā•>–äĻÔĘr•“Ļ• ȕ>–ä”ėʂ•X˙˙Îá—,˙˙ČÁ”–Ęˆ—,˙˙É1—,˙˙É1”–Ęš•“Ú•J“Ļ•“Ú• Е>–ä”ėĘô•“ĒĨL“–•“ĒĨL“Š› ”ėĘđ•“Ē•“ĒĨL“–•“ĒĨL“’›Ü¤8“–•X˙˙Įŋ—$˙˙Í4”–Í0•“Ú• ؕ>–ä”ėËN•“ĒĨL“–•“ĒĨL“†Ļ|”ėËJ•“Ē•“ĒĨL“–•“ĒĨL“’Z¤8“–•X˙˙Įŋ—$˙˙Í4”–Í0•“Ú• Ā•>–äĻÔËn•“Ú• ȕ>–ä”ėË~•X˙˙Îá—,˙˙ČÁ”–Í0•“Ú• •>–ä”ė˰–Ę’R”ėËĻ••0’"”–ËŦ•X˙˙Í?”–Í0•“Ú• •>–ä”ėĖ”ä@•"L Sp NCrņ°WîŒ&"GNîƒ*Aé˙€ąĖdN‘Ė$<˙ąÂdąü€dN4v˙. $nŒ( R( R„„"Dp NCJ€f "D8):f8* :*"J*gB*r pNCJ€gN"LpNCJ€gN"GSA# 3HÁŲÁØAHĈÅHD5D pNCpNCNîƒ* <@°‘f&Jif P‰"4!#3“Îp4xN’J€gNĶÎ`R°Šf6Ji f00")@m$@D@oJAfHAāai\‰Ō|2#|@`~“Îp04xN’J€gNĶÎNîƒ*0ÁQNîƒ*0fNîŠp2HÁƒĀiô2HAJAgŗ@lSQNîƒ*0fNîŠp2HÁƒĀiôHAJAgŗ@lŗ@Ō@2Nîƒ*2)ÃŲ ˙n ˙˙€lNîŠp2Nîƒ*Nމ#3Nîƒ*0# 3<ĀNîƒ*2)˛QnB‘Ba` "ŧ@3<Nîƒ*2)˛QmB‘Ba` "ŧ@3<Nîƒ*0\‰ŅQ“Z•J“•• ’•8•0‘Ú•“”ėËū• •¸• ON•ú–’”–Ė• •¸•OFF•ú–’••0’"”–Í0•“Ú•r–Ô•>–äĻÔĖD•“Ú•R–Ô•>–ä”ėĖb•“Ē•8•>¤8“–•X˙˙Įŋ—$˙˙Í4”–Í0•“Ú•q–Ô•>–äĻÔˊ•“Ú•Q–Ô•>–ä”ėĖŧ• •>• •>Ŗ ˙˙ĖļŖ(“ž˙˙ĖĻŖ´••“ž•0‘ō‚¤t“žš$”–Í0•“Ú• č•>–ä”ėĖ֕X˙˙ŋ™”–Í0•“Ú•j–Ô•>–äĻÔĖū•“Ú•J–Ô•>–ä”ėÍ•X˙˙͑—$˙˙Í8”–Í0•“Ú• ę•>–ä”ėÍ0•X˙˙ģĢ•X˙˙Å•X˙˙ŋ]”–É0”–Čū”–Čš$•• ĨL“–• ĨL“–• ĨL“–• ĨL“–• ĨL“–• ĨL“–• ĨL“–• ĨL“–•0’"š$šb“ō••0’"•“Ē•J“ō• •X˙˙Æ[• •>•J“• •>•J“Ē•“ĒjNîŠpNîƒ*>HĮ™Į Y‘Îۈ“Î4xN’J€gNĶÎNîƒ*>&vp Ў'M'@7Y "<Č'Y lD0Ō™Nފ7@'A26Á$&ÂAú&Č ŽT@0€`#+3P‹#+3Nމ˛#A˙ü$2\‹+ą)˙üjJ‚kpS`˛@f` 0J‚kô°Af +°‚eg+˙üg*k `+˙ügō7A˙đ'B˙ō*kNîƒ*Nމ#3Nîƒ*0"@jp@D@āĄgNîŠt A"NވĐ#3Nîƒ*>-ŒpB\BœNîƒ*>-Œp\Œ(ü˙˙ŠfIėNîƒ*>-ŒpB\Nîƒ*-LŒPî€DNîƒ*Nރ”–Ģ蔠DurationäH˙ŧ˙ŧãäPitch 1 äHãIãIäGPitch 2 äHãIãIäGSpeed äHÔNÔNä>Step äPäAä9äGWrap äHä9ä9äGFuzz äHä9ä9äGNoise äHä9ä9äGäH•“ĒĨL“†•“ĒĨL“Š–Ę’.R”ädĨԖĘ’2”äd¤8“–• •X˙˙Æ[•X˙˙Įŋ• •X˙˙Æ[• •>• •>Ŗ ˙˙ÎdŖ(“Ē˙˙Î8Ŗ´•“Ē•“ĒĨL“†•“ĒĨL“Š–Ę’.R¤8“–¤t“Ē• • ĨL“–”äPĨԖĘ’2”äP¤8“–•X˙˙Í?• •>• •>Ŗ ˙˙ÎĖŖ(“Ē˙˙ÎŽŖ´• •X˙˙Æ[•X˙˙Įŋ• •X˙˙Æ[¤t“Ē• •>•J“•“ō•J“Ēš$• •X˙˙Æ[•“Ú”ä`›&”ėĪ•“Ē”ä@Z•J“Ē”–Ī•“Ēœô•J“Ēš$šb“F• *—J“ö• *—J“ú•“• ”ėĪD•• •0’jƒ•X˙˙Ņ™•• •0’•• •0’•• • •0‘Ū• •¸•Ū'Please enter font device and file name:•ú–’•• • •0‘Ū• •¸•Ū.(?äH˙ppÄ˙v˙–ĸNäVÃČ˙p•Ķ€Nރ”Ļ’”Ļ“6”Ļ“N”Ļ“R”Ļ“V”Ļ“‚”Ļ“†”ϓДϓޔϓ’”Ļ“–”Ļ“š”Ļ“Æ”Ļ“ö”Ļ“ú”Ļ”:”Ļ”B”Ļ”n”Ļ”r”Ļ”‚”–ėf”Ę”ä@”ėŦš•• •con•0‘î“••8•con•0‘î“• •>•J“• •>•J“ •8•>•J“• •>•J“•• Ā• ȕ • •0‘ž•8•X˙˙ëy•J“•• •con_12x10a32x16•0‘î“•• •8•0‘Ę“•• •8•0‘Æ“•“• ”ė­@•• •0’fƒ••8•0‘Ę•• •0‘Æ•• •0’*•• • •8• •0‘••8•8•0‘Ε•0’ •• • •0‘Ū•• • •0‘Ε •¸•ŪTURBO TO lists the directory of flp1 - blank aborts)•ú–’•• • •0‘Ū•• *–Ę’˛™¤“ö™î“ö•?šÜ”ėЎ• –ž•flp1_–Ę’ē”äpšōĻî”ėЈ• •¸–’•• •flp1_•0‘úƒ•X˙˙é[—,˙˙ĪE”–ĐŽ—,˙˙ĪE™î“ö•šÜ”ėĐĸ—$˙˙Đ╠™î“ö–Ę’ē”ä@šōĻî”ėĐØ•• ¸• •0’"”–ĐŪ—$˙˙Đ┖ĪD•“• ”ėĐø•• •0’fƒ™î“ö•šÜ”ėŅš$™î“öš•X˙˙ë'–Ę’Ž•J” •™î“ö•” •0‘ū•• •scr_•0‘î“•• • •0‘Æ“•• •” •0’r“•” œ<•>•J“•” œôœ<•“ĨŽ•>Ĩ–›Ü•J“ •X˙˙Ō9š$•• •0’*••0’ •• • • • •0‘ÂOLKIT UTILITIES V1.07•ú–’•• • •0‘Ū•• •0‘Æ• •¸•ŪF1: Character Graphics editor•ú–’•• •8•0‘Ε• • •0‘Ū•• • •0‘Ε •¸•ŪF2: Sound Effect editor•ú–’•• • •0‘Ū• •¸•ŪF3: Toolkit default editor•ú–’•• •8•0‘Ε• • •0‘Ū•• • •0‘Ε •¸•F4: Quit•ú–’•• •8•0‘Ε• • •0‘Ū• •¸•Ū2Copyright 1986 Simon N Goodwin & 2002 George Gwilt•ú–’•• • •0‘Ū•• •0‘Æ• •¸•ŪPlease press F1, F2, F3 or F4•ú–’• • –ž–Ę’F“•• • •0‘Ε•8•0‘Ę•• •0‘Æ••8• •0‘Ū• •¸• Q.L.U.D.G.E.•ú–’•• •0‘Æ•• •8•0‘Κ$šb“F•X˙˙Ņ™•• • •0‘Ū• •¸•Ū ESC: Main Menu F1-F5: Options:•ú–’•• • •0‘Ū• •¸•ŪF1: Design/loading HELP•ú–’•• • •0‘Ū• •¸•ŪF2: Modify a character•ú–’•• • •0‘Ū• •¸•ŪF3: Save current font•ú–’•• • •0‘Ū• •¸•ŪF4: Duplicate character•ú–’•• • •0‘Ū• •¸•ŪF5: Display entire font•ú–’• • –ž–Ę’F“–Ô•>•J“&•“&• ø•>–ä”ėĶŌ•X˙˙æĄ–Ô•>•J“&•“&• č•>–ä”ė¯ė•X˙˙Ī”–°P•“&• ė•>–ä”ė°•X˙˙šå”–°P•“&• đ•>–ä”ė° •X˙˙°y”–°P•“&• ô•>–ä”ė°:—$˙˙°T”–°P•“&• ę•>–ä”ė°P—,˙˙­A”–­@”ä@”ė°t••8•0‘ōƒ•• •0‘ōƒ—B—B• —J“6•“• ”ė°–•• •0’jƒ•X˙˙°å™v™¤“6™î“6•š”ė°Ė™î“6š•X˙˙˛ã”ė°Ė™î“6š•X˙˙š•“• ”ė°â•• •0’fƒš$šb“Fšb“J• š†“6••0’ •• •0‘Æ• •¸•Ū+ Turbo Toolkit configuration v 1.2•ú–’• •¸•Ū"..... Only to be used for Turbo v•ú•• •0‘Æ• •¸•2.04•ú•• •0‘Æ• •¸• or later•ú–’•• • •0‘Ū• •¸—$˙˙×$”–× •“&• ė•>–ä”ėÔ"• •¸–’§§•ŪWhich character?•ú•X˙˙×M•J”•”•X˙˙āW—$˙˙×$”–× •“&• ô•>–ä”ėÔö• •¸–’§§•ŪCopy character?•ú•X˙˙×M•J”• •¸§§• To character?•ú•X˙˙×M•J”*• •>• •>Ŗ ˙˙ÔōŖ(“ž˙˙ÔĸŖ´•” •”*•“Z”äH›Ü•“ž›Ü•” •”•“Z”äH›Ü•“ž›Üœ<•>ž&¤t“ž—$˙˙×$¤t“ž”–× •“&• đ•>–ä”ėÖЕ“• ”ėÕ•• •0’jƒ• §Ļ–’•Ū Device and filename ? •ú§Ū™¤“ú–’•“• ”ėÕ`•• •0’fƒ™î“ú•šÜ”ėÕx—,˙˙Ō=”–Õęî“ú•?šÜ”ėÕĕX˙˙Ņ™•• • €•0‘•• •flp1_•0‘úƒ•X˙˙é[—,˙˙Ō=• •Ū2Enter device & name of toolkit file (blank aborts)•ú•• • •0‘Ū•• •0‘Æ• flp1_tk_code• #–Ę’˛™¤“6•• •0‘Æ™î“6•šÜ”ė˛`—$˙˙˛Ø• ™î“6–Ę’ē•J“J•“J”ä@šō›&”ė˛š•• •0’ —$˙˙˛Ø• •¸–’–’•Ū( File not available, or write-protected•ú–’”–ą°™î“6šš$š$›J“6šb“F• —J“N• —J“R• —J“V™î“6š•X˙˙ë'•J“Z•“Z–Ę’Ž•J“b•“b”ä› ”ėŗl• •¸–’–’•Ū! Insufficient memory to load file•ú–’•8•>š$•™î“6•“b•0‘ū•“b•“Z• INTER-COM–Ę’Ē•J“f•“f”ä›&”ėŗō• •¸–’–’•Ū( Not a T™î“ú–Ę’ē•J”.•”.”äX•“ •“Z”äH›ÜĻ|”ėÖ2•™î“ú•” • •“ •“Z”äHĨŽ•>Ĩ–›Ü•0’”–ÖD•• ¸• •0’"•”.”ä@šō›&”ėÖ¤• •¸™î“ú•ú•Ū already exists. Delete •ú•X˙˙ꡔė֚•™î“ú•0‘ö”–Ö —$˙˙Ö´”–ÖĒ—$˙˙Ö´—$˙˙Ö´”–Õĕ”.”ä@šōĻî”ėÖĖ—$˙˙×$”–× •“&• č•>–ä”ėÖđ•X˙˙Ø%—$˙˙×$”–× •“&• ę•>–ä”ė× —,˙˙Ō=”–× •“&• •>–ä”ė× —$˙˙×$”–Ķ–•“&”äl›&”ė×:—$˙˙×>”–Ō<••” •0’^š$šb”• š†”:šb“F•“• ”ė×r•• •0’jƒ• §Ļ§Ū™¤”:–’™î”:š•X˙˙éķ•>•J”•”•“› •”•“ Ļ|Ϗ”ė×ü• •¸•ŪTry again (valid c“”–ÅŪ••8•8•0‘Ę“•8•¸•“žĨL“–Ĩ†•ú•,•ú¤t“ž••8• •“Ē”äP›&ĨŽ•>Ĩ–•0‘Ę“•8•¸• ĨL“–Ĩ†•ú••8•8•0‘Ę“•8•¸•Ū •ú–’š$Ĩž“ĘĨŧ“Ęšb“Ε•“Ē•scr•0‘î“••“Ē• • Ē•“Ē”äP”äPZ• (•0‘ž’••“Ē• ɕ0‘Ę’••“Ē•0’ ‚••“ĒĨȓʕ0‘Ę’••“Ē• • Ē•“Ē”äP”äJZ• ,•0‘ž’••“Ē•0’ ‚••“Ē• í•0‘Æ’••“Ē• • • • _•0‘æ’S• • Z•“ĒĨL“–•“ĒĨL“†Z•“ĒĨL“ŽĨÔĨŽ•>Ĩ–ĨŽ•>Ĩ–›Ü•J“Ε•“Ē• •0‘Æ’••“Ē• •“Ε •“Ε0‘æ’Rš$• • Z••• • •0‘Ū•• •0’ —$˙˙éđ”–騚$›J“Æšb”z¤„“Ēœ “Æ•>•J”z•”z•8•>–ä”ėę•8š$”–ęž•”z• •>–ä”ėę:™î“Æ–Ôš$”–ęž• •>•”zŖ ˙˙ęŽŖ(“Ē˙˙ęTŖ´•“Ēœl¤Ŧ“Æ–Ô• 9Њ•“Ēœl¤Ŧ“Æ–Ô• 0ŠĻϏ”ėꊕ –žš$¤t“Ē•0™î“ÆŠÂŠŌš$š$• š†’• •¸• (Y/N) ? •ú••0’f• • –ž–Ę’F“™¤’™î’•yœ¸™î’•nœ¸Ļ¸”ėë • •¸™î’•ú–’••0’j™î’•yœ¸š$”–ęƚ$›J”‚šb”†•• ™î”‚•0’“•• ”äa¨•0’b“• –Ę’žƒ•J”†•• •0‘ōƒ•”†š$š$Ĩž”ŠĨŧ”Ф„“žšb”Žšb“b• –Ę’Ž•J“b•“b”ä› ”ėëȕ8•¸• Out of memory•ú–’—B“r•• •0‘Æ•• •8•0‘Ū• •¸•Ū Abort key combination:•ú–’• •¸•Ū% In combination with ALT: •ú•• •0’ •“f”äp›Üœ<• ˙œ"•J“v•• •0‘Æ•ny•“vœôœlœr• –Ę’˛•yœ¸”䀝•J“z•“z”ä›&”ėļԕ• • %•0‘Ū• •¸•n •ú–’•• •0‘Æ• •¸•Ū% ASCII value of abort character: •ú•• •0’ •• •0‘Æ•“f”äp›Ü•“vZœ<• –Ę’ļ•>•J“~•• •0‘Æ•“~”ä@f•“~”äĸŪ”뎂—$˙˙ˇ†”–ĩ֕• •8•0‘Ū• •¸•Ū% Default "pipe" definition: •ú–’• •¸•Ū%ENTER (confirm) when you've finished.•ú–’• •¸–’•Ū+ Characters to be altered or copied may be•ú–’• •¸•Ū*specified in two ways. Type the character•ú–’• •¸•Ū,itself (e.g *) or its numeric code (e.g 42).•ú–’•X˙˙é[•X˙˙Ņ™•• • €•0‘•• • •0‘Ū• •¸•Ū(You can use the re-defined characters in•ú–’• •¸•Ū,your own programs by saving them, re-loading•ú–’• •¸•Ū+them, and making the QL associate them with•ú–’• •¸•Ūa specific 'window'.•ú–’• •¸•Ū* To associate the fil•• •0’ •• •0‘Æ•“f”ä`›Ü•“f”äP›ÜœÎ›č• –Ę’˛™¤“R•• •0‘Æœ “R• œ"”ė¸.—$˙˙¸2”–ˇ†• •¸–’•Ū% Are these values OK: •ú•• •0’ •• •0‘Æ•y• –Ę’˛™¤“V™î“V•yœ¸”ė¸ŧ•• •0‘Æ—$˙˙¸î”–¸ę•• • %•0‘Ū• •¸•n •ú–’•• •0‘Æ”–´•“f™î“Nū•“f”äP›Ü•“nž&•“f”ä@›Ü•“ržX•“f”ä`›Ü•“z”䀛&›Ü•“zž&•“f”äp›Ü•“z”䀛&Z•“~ž&•“f”äP›Üœ “R•>žX•“f”ä`›Ü™î“Rū• •>š$š$›J“6•™î“6•0‘ö•™î“6•“b•“Z•0’• •¸–’–’•ŪEnd of te FONT, created with•ú–’• •¸•Ū*QLUDGE, with window #X in your program you•ú–’• •¸•Ūmight use these instructions:•ú–’• •¸–’•Ū(base=RESPR(2+9*96):LBYTES MDV1_FONT,base•ú–’•ŪOPEN #X,scr:SET_FONT #X,base•ú–’• •¸–’•Ū. Then use PRINT #X, AT #X and so on to output•ú–’• •¸•Ū.the new characters. If you get stuck, read the•ú–’•ŪTOOLKIT manual.•ú–’•X˙˙é[•X˙˙Ņ™•• • €•0‘•• • •0‘Ū• •¸•Ū(Due to an idiosyncracy in early QL ROMs,•ú–’• •¸•Ū-characters may be displayed wrongly ifask - patch completed•ú–’š$• • ž”“‚•  Ū“†•  Ū“Š•  Ū“Ž•  Ū“’•  Ū“–•  Ū“š”ä@”ėēL••8•con•0‘î“••8• Ā• (• • ؕ0‘ž“••8•8•0‘“•• •0’*•• •8• •0‘Ę••8•8•0‘••0’ ••0’"Ŗ˙˙Ģ2• •>• •>Ŗ ˙˙ģ6Ŗ(“ž˙˙稪´•“žŖēŖÄ“‚•“ž¤.¤8“†•“ž¤.¤8“Š•“ž¤.¤8“Ž•“ž¤.¤8“’•“ž•8•>¤8“–•“ž• •>¤8“š¤t“ž• • 5•>¤8“š•X˙˙ģĢ• •>•J“Ļ• •>•J“Ē•X˙˙Å•X˙˙Čą••8•0’ ƒ•• •0’*”ä@”ė썕•8•0‘ōƒ••8•con•0‘$¤„“Ē• •>• •>Ŗ ˙˙쨪(“Ē˙˙ģĘ CSIZEs•ú–’• •¸•Ū,2 or 3 are used, and the leftmost dot in any•ú–’• •¸•Ū+row of the character is turned on. To warn•ú–’• •¸•Ū*you of this, option F5 displays the entire•ú–’• •¸•Ūfont in CSIZEs 0 AND 2.•ú–’• •¸•Ū, The QL uses a character grid 10 or 20 dots•ú–’• •¸•Ū(high, but the PRINT routine only handles•ú–’• •¸•Ū,characters up to 9 (or 18) dots high, with a•ú–’• •¸•Ū-gap between each line of text or user-defined•ú–’• •¸•Ū.graphics. If you want to design large shapes,•ú–’Ŗ´• •X˙˙Æ[¤t“Ē•• •0‘Ę••8•0‘Æ•• • •0‘Ε•8• •0‘Ū• •¸•Ū QL SOUND EFFECT EDITOR •ú–’•• •8•0‘Ε• •0‘Æ•• •0‘Ę•• P•8•0‘Ú• •¸• •ú–’•• P• •0‘Ú• •¸• •ú–’•• V•8•0‘Ú• •¸•AUTO•ú–’•• V• •0‘Ú• •¸•ECHO•ú–’•• • •0‘Ε• P• •0‘Ú• •¸• •ú–’•• ’•8•0‘Ú• •¸•OFF•ú–’•• •8•0‘Ε• •0‘Æ•• •0‘Ę•• P• 8•0‘Ú• •¸• ž Adjust •ú–’•• P• B•0‘Ú• •¸• ŋ sl• •¸•Ū+made up of a number of lines of characters,•ú–’•Ū+you must use the CURSOR command to abut the•ú–’•Ūlines together.•ú–’•X˙˙é[š$šb”•J”• •  Ū”B•X˙˙Ņ™• •>• •>Ŗ ˙˙áŖ(”F˙˙āŽŖ´•” œô•”F›Ü”äH•”•“Z›Üœ<•>•J”J• •>• •>Ŗ ˙˙á Ŗ(“Ē˙˙āŌŖ´•”F•“Ē•”J”ä@”ä@•“ĒZ¨|ĨŽĨ–Š•>¤8”B¤t“Ǥt”F•X˙˙â•• • •0‘Ū• •¸•Ū&Press ENTER to store, or ESC to abort.•ú–’•X˙˙ãĩ”äl›&”ėánš$• •>• •>Ŗ ˙˙âŖ(”F˙˙áŠŖ´•8•>•J”J• •>• •>Ŗ ˙˙áäŖ(“Ē˙˙áŽŖ´•”F•“ĒĨL”B”ėá═”J”äider •ú–’•• P• R•0‘Ú• •¸• ŧ Select •ú–’•• P• [•0‘Ú• •¸• Ŋ slider •ú–’•• P• z•0‘Ú• •¸• ENT Echo •ú–’•• P• k•0‘Ú• •¸• SPC Beep •ú–’•• P• Š•0‘Ú• •¸• F1 Help •ú–’•• P• Ē•0‘Ú• •¸• R Reset •ú–’•• P• š•0‘Ú• •¸• J Juggle •ú–’•• P• ē•0‘Ú• •¸• Q Quit •ú–’••8•8•0‘Ū•• • •0‘Ε• •0‘Æ•• •0‘Ęš$• •X˙˙Æ[•X˙˙Åo•• V• •0‘Ú• •¸•“Ē•8•8¤Ŧ“‚•ú–’š$• š†“Æ••8•0’ ƒ••8• •0‘Æ“•“Ē• •>–ä”ė@”ä@•“ĒZ¨|›Ü•J”J¤t“Ē•” œô•”F›Ü”äH•”•“Z›Ü•”Jž&¤t”Fš$¤„“Ǥ„”F• •>• •>Ŗ ˙˙ã4Ŗ(“Ē˙˙â4Ŗ´• •>• •>Ŗ ˙˙ã0Ŗ(”F˙˙âPŖ´•”äP•”F›Ü• •“Ē”ä@ĨŽ•>Ĩ–›Ü•0‘Ū•”F•“ĒĨL”B”ėã•• •0‘Ę• •¸• •ú–’••8•0‘Ę•• B•“Ē”ä@ĨŽ•>Ĩ–›Ü• X•”F”ä@ĨŽ•>Ĩ–›Ü•0‘Ú•• •0‘Ö• •¸•.•ú–’••8•0‘Ö”–ã,• •¸•--•ú–’¤t”F¤t“Ē•• Q• -• •0‘ę•• Q• -• !•0‘ę•• •0‘Æ•• • &• "• &• "• 4• • 4• • &•0‘æ SSSS•• •0‘Æš$¤„“Ǥ„”Fšb“&• •>•JĀR•8•¸•ŪxDURATION: This controls the length ofthe sound, in arbitrary units. If youset a duration of 0 the sound goes onfor ever.•ú–’”–ÄĻ•“Ē• •>–ä”ėĀō•8•¸•Ū€PITCH 1: This is the main pitch ofnote generated. The further up thescreen the slider is positioned, thedeeper the pitch.•ú–’”–ÄĻ•“Ē• •>–ä”ėÁ˜•8•¸•Ū…PITCH 2: This is the secondary pitch;the machine alternates between thispitch and pitch 1, in response to thevalues of SPD STP WRP.•ú–’”–ÄĻ•“Ē• •>–ä”ėÂ4•8•¸•Ū|SPEED: This controls th“Ē• •>•J”F•8•>•J“&•”äP•”F›Ü• •“Ē”ä@ĨŽ•>Ĩ–›Ü•0‘Ū•• –ž•0‘Ö• •¸•??•ú–’•• •0’n•”äP•”F›Ü• •“Ē”ä@ĨŽ•>Ĩ–›Ü•0‘Ū• •¸•??•ú–’••8•0‘Ö•”äP•”F›Ü• •“Ē”ä@ĨŽ•>Ĩ–›Ü•0‘Ū•”F•“ĒĨL”B”ėäč•• •0‘Ę• •¸• •ú–’••8•0‘Ę”–äø• •¸•--•ú–’• • –Ę’F“–Ô•>•J“&•“&• •>–äĻÔå2•“&• •>–ä”ėå<—$˙˙昔–攕“&• •>–ä”ėåԕ”F•“Ē•”F•“ĒĨL”B• ¤8”B•• B•“Ē”ä@ĨŽ•>Ĩ–›Ü• X•”F”ä@ĨŽ•>Ĩ–›Ü•0‘Ú•• –ž•0‘Ö• •¸•.•ú–’•e speed withwhich the machine alternates betweenPITCH 1 and PITCH 2. Low values givea high speed.•ú–’”–ÄĻ•“Ē• •>–ä”ėÂڕ8•¸•Ū…STEP: This control selects the 'step'in pitch from PITCH 1 to PITCH 2. Anegative step gives a falling note(WRAP may alter this).•ú–’”–ÄĻ•“Ē• •>–ä”ėÃr•8•¸•ŪwWRAP: This slider reverses STEP everyso often, so that the sound 'wraps'back and forth between PITCH 1 andPITCH 2.•ú–’”–ÄĻ•“Ē• •>–ä”ėÄ •8•¸•ŪzFUZZ: This adds random deviation tothe pitch at any time, gi•8•0‘Ö”–攕“&• Е>–ä”ėæ•”F”ä@Ļ|”ėæ•”F”ä@Z•J”F”–攕“&• ؕ>–ä”ėæ6•”F”äH› ”ėæ2•”Fœô•J”F”–攕“&• Ā•>–ä”ėæj•“Ē”ä@Ļ|”ėæf•“Ē”ä@Z•J“Ē”–攕“&• ȕ>–ä”ė攕“Ē”ä`› ”ė攕“Ēœô•J“Ē”–ãܕ“&š$š$¤„“žšb”Z¤„“Ǥ„”F•“ •“Z”ä@›Ü•J“ž•“ž”äcĨŽĨ–Š •>•J”Z•“ž”äcĨŽĨ–Š,•>•J“ž•”Z”ėįD•8•>•”Z”ä@ZŖ ˙˙įDŖ(“Ē˙˙į"Ŗ´•“Ē”äc•“›Ü• c•>•X˙˙įk¤t“Ē•“ž”ėįh•”Z”äc•“›Ü•“ž•X˙˙įkš$šb”f•J”fšb”b•J”b¤„“ž•• • •8•0‘Γ•• • • €•0‘“•• •0’ ƒ•8•>•”f”ä@ZŖ ˙˙ving a fuzzysound. Move the slider down for apurer note.•ú–’”–ÄĻ•“Ē• •>–ä”ėÄĻ•8•¸•Ū~NOISE: This control alters the amountof random deviation in SPEED as thenote varies. Move the slider down forsmoother STEPs.•ú–’••8• •0‘Æ“••8• • •0‘Ū“•8•¸•ŪPress any key.•ú• • –ž–Ę’F“™¤“Æ•X˙˙Åš$••8•0’ ƒ••8• •0‘Æ“••8• •8•0‘Γ•8•¸•ŪDUR P1 P2 SPD STP WRP FZ NSE•ú–’••8• •0‘Æ“•X˙˙Åoš$••8• • •0‘Ū“•8•¸•BEEP •ú• •>• •>Ŗ ˙˙ÅüŖ(“ž˙˙ÅŽŖ´•“ž•“Ē›&”ėÅЕ•8• •0‘ĘčŖ(“ž˙˙įÔŖ´•• •“ž”äHĨŽĨ–Š • •“ž”äHĨŽĨ–Š,ŠP•0‘Ū“•X˙˙襤t“ž•• •8•8•0‘Γ•8•>•”f”ä@ZŖ ˙˙蘪(“ž˙˙čLŖ´•• •“ž”äHĨŽĨ–Š • • •“ž”äHĨŽĨ–Š,ŠPœZ•0‘Ū“•X˙˙襤t“ž•X˙˙é[š$• š†”n• š†”r•”b•“ž›Ü”äP›&”ėé@•” Šp”äH•“ž•”b›Ü•“Z›Ü• ›č™¤”n•” Šp• ›č™¤”r•” Šp™î”nū• •¸•“Š|•ú–’• •¸•“Š|•ú–’•” Šp™î”rū”–éX• •¸•“ž•”b›ÜŠ|•ú–’š$•• • •0‘Ū•• •0‘Ę• •¸•ŪPress ENTER to continue.•ú–’••8•0‘Ę• • –ž–Ę’F“• Š|šÜ”ėéė"TJé0P‰pqt0v˙NCQ‰J€fJ)A k"*,$|a@f6p'2,.Nēø°p 2,,4,*Nēøĸ` p'2,.Nēø–J,(kp NCCėp}NCJ€Lß~Nup,)tÄĀHBĀü4p0,*8ØDHD8Cė ЄЄ"€Ú„/Hį @Q"Otv˙plNCLßք„„˙ü˙ūJ€g&<xLßa6a4(˙ü˙ū#Apz"$v˙NCJ€f p{"tv˙NCpCė$Ų‘Ø„™ĄJ€NuH@HAHBHCHDHE’E˛Do ĐAĐBCo’@Nu2Nucon_512x256a0x0Hįxp˙"T3@0#@ l.,$vNē˛f v"TaŧfaLßūNu ,pg"$@&R gaf&Z"k gė/ EúøZN‘$_gāNu"TCé"Û"›ß™T‹42+Nē%ö“ĄÕĄHį@2+p'v˙Nē÷&Lß42p a2p(aJ+˙økp apNu/v˙Nēöū&J€gXNuHįx l.,$aLß A3@aū2Š 3|BiB‚4) SB3BaāHB3BažHB‚˙˙TiYQUAfÜ2)4)`‚a(f˙~23i 3DBia„0ĐDA3@aŽ2…3|3DB‚4) SB3BarHB3BaPHB‚˙˙RiUQSAfÜ2)4)`,aēf˙4ÔB20) B3@3D3AaĶia0ĐDB3@aø3i ĶiBiaū0A2€3A3D0) B3@aĘĶiaÚBiaē•Q3AŲi3AaĀ2)4)`”*) šAHEšAHE4)Bf$x`t8HD82Š 3ABi3Ba”23EHB3B3Da€23E#DaBHE0ĐDA3@aJ2…HE3|3D4HB4ÔDSB3Ba*HB3BaHB‚˙˙RiUQSAfÜ2)ūNu&ld gŪâ‹eĖNē˙|fĐ$[ gĀXŠ"RŠn„FH…(4"HApNē˙ž2p)Nē˙–<f|˙2āIp-Nē˙„HAËÁ g>"@4pNē˙rJEk$p4"HAŌERBNē˙^p,rNē˙Vpr_Nē˙Np,rp4"HANē˙>JFo0p-rtNē˙0`$ÔüYlXŠpv"Z` "Z(JnɉpsɊNē˙ $DJRl˙J`ÖüJSl˙(pNupq") P‰NCQ‰#A Nua6*<€ BF`(Hįx~āŸ>|˙BF` Hįx~FG|"TB) lz0v˙6`v˙6Ji0mBF`JÆfz J)fĻ$4a €˙˙˙˙m˜nBJ†jJƒkŒHįĀ€pNAJgŊčmŊčn"â‰e ŽSBAS˙üfJ.[ÁJLßgT)g˙L )gJ…mˆzJFm.)a eDga\ ,jgä&@JSm6+´+ gÖü`ė g4)`øxz˙`x8) ˜A˜AHDz23i #DaÆĶiaÖŌAHABA$…pNuxz˙` x8) ˜A˜Az2Š 3A#DaŽĶiažŌA˙˙$…pNu4)gZf,3A3A20) AA3@a”0) AA3@a„`.BŠ23i ar3i “iaf8:) šAšApNufėx:) pNuHį@`p.2)NēŅæLßJ€f.NuHį@`p.2)NēŅÎLßJ€fNuHį@`p.rNCLßJ€fNuXNuHį@`p EúBNCp NC"op EúBNCLßNuHįđ`p v˙Eú NCLßNu4( gBh (€Gf2(0āH @gra “¨Õ¨pNu/NēŅîLßf(0āH @f0@0;Nû(&<Xdpz2ŌA0HA24ÔBHB4pNuÔBĀfâ0HB4"ԂpNu0Ŗ˙˙ĢÆ•8•>• •>• •>Ŗ ˙˙ėŠô“ž˙˙ëîŖ´¤.•J”Ž•“b•“ž›Ü•”ŽžX¤t“ž••“bǞĨȔŠ–Ę’Ļƒ•0’•“bĒž•J”Ž••“b•0’^•”Ž”ėėL•8•>š$”–ėT• •>š$š$—B”–ėf” ˙˙NރĒė’ÆĒė“Ēė“ Ēė“Ēė“Ēė“Ēė“Ēė“&Ēė“FĒė“JĒė“ZĒė“bĒė“fĒė“nĒė“rĒė“vĒė“zĒė“~Ēú“žĒė“ĻĒú“ĒĢ“ĘĒė“ÎĒė“ŌĒė“ÚĒė“ŪĒė“âĒė“ōĒė”Ēė” Ēė”Ēė”Ēė”*Ēė”.Ēú”FĒė”JĒė”ZĒė”bĒė”fĒė”zĒ딆Ģ”ŠĒė”ŽĢŖ˙˙Ģ2”–Ŧd” WINDOWBORDERINKPAPERCSIZE UNDER OVER CURSOR AT POINTLINECIRCLEOPENCLOSEDELETEDIRLBYTESSBYTESOPEN_INCLSP‰J†lJŠgX‰ `JŠg )€ĶĀaFapv`/,`/ "la $_psaëœpNu")$)˜‚Ō…aNqHAHDH€nmâLŌDŌ@NuHį`pNA&hÄ kPN¨Lß NuHįxŸü"O,HFJFmR +(gL$@JRgF~z(+Bg+ :ÚE(+BgFHD04+r6+ÖkÖGHŠHŠ <o :+~a‚`"Š#i a.fp aZ +FgT$@>+ :ÚE(+`gDHD2+6+p4+ÔSÔEHŠHŠ <CALLPAUSEBEEPMODE RND!INT&INKEY$)BEEPING, DEALLOCATE- SET_POSITION. CURSOR_ON/ CURSOR_OFF0 SUSPEND_TASK1SET_FONT> CHANNEL_ID? SEARCH_MEMORY@ ALLOCATIONAEDIT$BEDIT%C DEVICE_STATUSDPOSITION˙˙˙˙í ˙˙ė^z€ž†â‰âŽ`˙ęHBJBfHBJBgD€,. Nu `˙öNV/. n/NšĐF n €N^NuNV/. n/NšĐ< n €N^NuBBJ¯lD¯FBJ¯lD¯FB2/Âī 0/ĀīŌ€HABA0/Āī ЁJBgD€Nu _"_/NšŅ$"€NĐ o JfüSˆÁˆˆNuNTHį02Î l"l ",p NALßL N\NuNVHį00p".&.o :+’~a&`"Š#i aÔfp apßüLßūNuva føvJFnöNuÖZ2403pSFg0S@CHįá@"Š#i 3€p×qp>+ a~fp'2a¨p aĸL߇f¨šBēAl:?8ØBÄĀgSB„ÄRB8BÂĀg‚ÅŌC"Š#i Ķqp3‚p/",$ĶŠ"HAtp aP2+˛Dg p'aBp a+h +(gV$@<oP0åHP@°k”nD:ŪGÚGCúĐaNPEÚGÚG\Š8Sn8QD˜G˜G˜EâOHį a~Lß@ŪGÚDÚGCúĒaâOJFnž`ŪG:8˜G˜GâOaXLßūJ€NuHį HDHE +Fg($@<o"XG:ÚGSFo \J8˜G˜EN‘`ė8+˜G˜EYG` :8+˜G˜GN‘HDHELßöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö@NupNu +Fg¨$@<ođ0Đ@X@°k–näHDHE:ÚG8<aĖSFg\J:YEšGaÆXEÚGÚG`ä:+šGYENē˛HDHENuHį@˛lhdÂü&lj×Á'I pLßNupü`öHį@ H@°l`d$Āü&ld&sJSkÖüQÉ˙ö'I˙üpLßNupü`öHį~`,+Fg$F<g<+hÜFXFŨkÜFk*+:CĶa”ŨkâNkJ€Lß~NuHį|˛lhdrÂü&lj×ÁH‚gnt `tô*4 DCĶaXrt++ paŠp`4Hį|˛l`d4Âü&ld×Á`Hį|˛lndåI&lp&s*+:CĶa"KJ€Lß>Nupü`ō(,$ŲĢ lp ta0™ĢJ€f0/f&p)2ap(HE2ap'2a p,rap-rtv˙NēŨ(J€NuHįp@ +ĐŦ$//"Op tv˙NCJ€Pfp'2+NēÜúp-rtNCJ€LßNuHį`Hz NA#Ā„ âŒBDڄHF2+^`4Hį`Hzē`Hį`…Hzîžü`[Dm0HÄ| ˆÆ>HDZDâLÚD2+@$O"Taps"tv˙"o`NCچQĪ˙îŪüdLßđNuJi0kPé0 ),g BŠ,/Nup`p˙Hįx@Cé242Ōü 8Č@0!D?ØD0!D?0!ĐD?ØDØa?"Oaf "oCétaPLßNup v˙NēÛæJ€NuYt +FgJ$@?ZoB:+hÚZ|˙x6N‘fDÚk–RB>šga@f6:Son:+|xškhYEN‘fRBJonĀ`:+–Úkhv>Ģ’gaXONup`ø/ | +œm$@p0åˆÕĀ8N‘f&RBRCÚZSonî`8+œDDN‘fRBRCškžSonč$_Nu/ YHBHCHDHEHFBB +(gV$@?ZoN:+hÚEÚZ<<˙˙8<6N‘fLÚk”RB>šgaVf>:Son:6`Š`d`!´`` ` ¸`:`Đ`>`"„`Ü` *` J`Ö` ö` ´`!` l`&Ē`&Ž`2`&(`°`:ö`;N`ūz`<Đ`$`;öNu<>02WMAN2.05WMMVV˙â˙˙Move window operationSSpriteOOutlineWWindow˙˙Hįp†pNA,hÄpNēCāf-H$*HAú˙€PNē;Öf*ˆLßaJ€NuHįJf"Öü0* aHA2—Å$ „ü Lß Nu4HA0€˛@m 0+€´@l Öü JSnâ–ü 0€g°Ao20+€g°Bo4NuHį8ø&n g", `"$KGë0a HŦ ’[A˙”[B˙ĮJHį`€pNA0<Ā(4æ3@$Lß"Œ(ÉX‰"Ë(Ë(Č(ÉBœBœBœBœš‹Jƒlš‹`af(Û(Ûa6a$a.&JEėBœa"<<8<škhškhQEN‘fRBJon´`&:+hÚEÚk”BC>̐gaHBHCHDHEHFJ€XO$_Nup`ę/ BF +˜m$@p0åˆÕĀ8N‘f&RBRCÚZSonî`8+˜DDN‘fRBRCškšSonč$_NuHįp vaÚúgrÕü 4<v €Pg4<@v4ÂB)&R@@&Ā$üBšp $ĀЃY€$ĀBš ƒg$Á$Á$Á$Ár˙$Á$Á$Á$Á` ÁÁÁÁr˙$Áv "$o 4é$B)&R@@&Ā$üBšp $Ā$Ā$ÃAŌAJ)%gA0;4Ā4Āp˙$ĀLßpNu˙˙˙˙˙˙˙˙UĒ˙ĒĒUĒĒĒ˙    ??˙˙ĀĀ     ˙˙ĀĀ?? gr K&I) BƒÉJ`RCa2(Û(ÛaJSlî5C˙ü8ü˙˙v( $R&j g*%L`RCaJn8Û(Û`8ÛaĐT‹aĘJSlā8ü˙˙ÔüJRlÆ$L(D&H9C˙ūXŒB\a¨g, K&I) BƒÉJ`RCa¸(ÛaŽ8ÛaˆJSlęÅL&H9C˙ūXŒ4ü˙˙B\apg`&I) )J˙Ŧv˙ÉJRCa\fø5C˙ū$R&R g@$Ėal(Û(Ûa@a< da6a2a."o&(Ã8ÛB\aa gÆ/ EúüÖN$_`ēLß", pNuHCJCgaa(Û/ aæ"_8Û(Û`pB\QČ˙üNuHįāEėHaæaŧ&(Ã(ÛaTaRaˆa„a´g  eâ ŋbôpūĐF°TeŌ0CôG`aQČ˙ú‚RT4”GRGpavaŽ`Ē6| †0r˛FLßüNuJGg’SG` žTgŠRG`BG(Ûa8ÛaQÍ˙öÅL&HNu(ÛaaNq(ÛaNq"K0g€ŌĀgĶŅ(ÉNuBœNu0gøHĀ(‰ŅœNuaNqÃBaÅAp0éˆčH8€H@ĀÂäHŅ\NuxHįH l"Ta p*) Šf")g:t‚a<’EHEHA’EHA.|J€` Nē9gtaf.,$šŦ$|aŽg)G$LßūNuJ,ghHį žü / Cī B‘BŠBŠ BŠEú= gEú<ú#JEúDv˙p NC A"_P‰Q‰ta$$f )ŋ bîCīEú`p NCŪü Lß NupqP‰v˙NCJ€NuHį  h˙ø2(HA$nx2<ąŌgRAXŠ`öĐü0#h ˙ü#P˙ø!I B#hLßpNu!i˙ü Š˙øpNuHį~H l“Ép}v˙NCJ,g¸t“Év˙pNCp{",tNCJ€`žHį~H lCė p tv˙NC`jHį~Hpr˙vAú>NBJ€fr)HPė`Hį~H la‚`˙~JGg˙x"L0$IŌĮG8€`ŲQČ˙üBGa^"L4pap$`œ>`Č8‡p$a `˙BBTBGp#`„žTg˙4RGJGg˙,0SGCôpGHį€@`éQČ˙úLßŧ ˙STa`˙L62ÂÄHEŌEHE4pa¨4NuĀg˙JSg˙TSg¤Sg˙TWg˙NUg˙6Sg˙nSg€Sg˙hWg˙bUgūūWg˙b[gūō$fū”a:akūŒé a.a kū€†B`ū|0e  c_e ‚ ct˙JNupa papaNuagP`ūĸagX`ū˜/v˙NC&J€NuHį|ōžü"O3B3Av˙0<14<0gÁB3@3Bp Eú¸NCJ€f82)4)aū") ´n.´An*0)2)@0; Nģf p EúŽNCJ€ŪüLßO>Nupü`ōväz,2flŌA23i BŠaô0)0*x8Øj¸k’l– g SD0B„8a¤5@:’@5A|–B>`R@5@a†:’@5A~–B<,˙ūDF(o ÔkÔl&/?UOJFgŸoopaĸ?Go×oŸop aŽ.“ +ĐŦ$/@"OaPNēäNēŽpvxPLßāJ€Nup t/v˙NC&J€NuHį ,+œm(F~>åŲĮ‘Č`IīHFDFHFDF(Æ(†0|˙ü$L2<>`ÜRļFmRA>œZÜZÕȲEmėLß@NuHበ.+(g$G>g8+”2ŌD0SGo\J0DA`0rCī2€Ōl$Ōk3Aa˙`2 a˙\JGnÆLß‘NuHįhaâaJfaļJ€LßūNuHį?hv`Hį?hx˙z˙Hįa$f (OCúa ZŪü LßüNuJFfļlmļl dCúa ęCú˙æNupNuJFføļlmōļldėHį`"k¨HDHE B@H@įˆĶĀ$YÆüaĐüĐÃĐÃĐĐLßNuHį pNA hÄ h$ PLßJ€NuHįđ@aāv"H$HBŌŅįIŌÁ´Qf) ˙f )g @` ĐüĐÃĐÃĐĐLßNuHįh€pņ C˙˙mV ClP(pNA „˙˙˙˙f(¸hbb@ hhåL p@2($HB˛Bf*a˙jĐĐãLĐÄ´Pg0‚B¨Cj g!IpLßNupū`öHįp@pNA (l¨h㈀ŌNēÜf61|1|x1|č1|X0ŧŌ/Ņü Cúņ0<ã0ŲQČ˙ü _pLßNuCONSCR@ÄgU@g `aFfBp `Aú˙Ū`Aú˙Ūa4f0p 24XIaf$p)r2!a p'2!ap(ap HįP@v˙NēÁ\Lß J€NuvNú\ m0Nēl MNēfFßLßūJ€fBNupņ`îHįū@ÆN@?pNA,H hÄ h$(gŪ ,°nrbÔåH&nxÖĀJkČ*SH@°mfžÛü0pnNēŪÕÃĩŅl&aœ`pLß8NuHįpp&lj g$Cė p tv˙NC&/"Taf ×üJSlđpLßNuHįhQ2+ą@fpJmvIė8|˛i0f|˙1@n Øü gØü (*+Eë`JHįhQ )()8*)<š€v`HįhQ2*"kd1‚fpJmIël|n Øü gØü a PJ€LßūNup„…rp,aėėprtaėâ2Cī ##p.aėŌ *g2*nĒFH‡r˙t˙p-aė´$HB B@H@BClDCo€Â"j6ļ@n0BCļ@g  gRC`ōS‰’ÃļGc 1 pcÎÂ`~˙ÄÃHB4raÎ($I2p)aėPJGk4RB"HAŌGpaė>02WMAN system colours2.05WMS ū †”WMS ũūŠœWMS ũđ’¤WMS ũ⚎WMS ũÔ¤´WMS ũÆĒĀWMS ũ¸ļÆWMS ũĒŧĐWMS ũœÆæWMS ũŽÜüWMS ũ€ōWMS ũr$WMS ũd?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ ĄĸŖ¤Ĩϧ¨ŠĒ̌Ž‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįęëėîīđōķôö÷(WMS üĘDRWMS" ü0H^WMS# ü"ThWMS$ ü^nWMS% üdrWMS& ûøhzWMS' ûęp‚WMS( ûÜx„WMS) ûÎzŠWMS* ûĀ€WMS+ û˛†˜WMS, û¤ŽĻWMS- û–œ´WMS. ûˆĒÄWMS/ ûzēÆWMS0 ûlŧĐWMS1 û^ÆÜWMS2 ûPŌäWMS3 ûBÚîWMS4 û4äüWMS5 û&ōWMS6 ûøųúûüũū˙v +FgÁŠJRÁŠf +(g ÁŠJRÁŠfpNuHįl`t"T’Š0)0k @pd.NēāgVÚŠ3@0Hé08#kh2EúJ#J,N’3k40)0v gHCÂ)g e@g:)  g0  g.)g8 ˙g2rã Áf(Nē6g"/NēŌ gĀ x  gx /D`pJ‚jv˙Lß6J€NupĀä0;( f"+F` HCHC"+(gÊJRÊnpNurspqHį v$(z +Fg$@ <p>+hŪGXGžk–naHf< +(g6$@p>+håOPGžk”n$ <rHAHBHCHDHEaHAHBHCHDHEJ@gBE8˜…LßĀJ@Nu<Sm<8:ØG˛Dm,:ŧCg\J8˜G˛Dm$:ØG˛DmRC`Ü8˜G˛Dm:ØGĀJ@Nu8pNu ,pgJf )gpNuHįGā"@ güWMS7 û WMS8 úü,˙˙ Window border˙˙Window background˙˙Window foreground˙˙Window middleground˙˙Title background˙˙Title text background˙˙Title foreground˙˙Loose item highlight˙˙Loose item available background˙˙Loose item available foreground˙˙Loose item selected background˙˙Loose item selected foreground˙˙!Loose item unavailable background˙˙!Loose item unavailable foreground˙˙Information window border˙˙Information wind&@JĢgō +(gT$@<oNJĢBgH.žkžko< Gn6HGžkm.:žEl("T") HA2,$Ōk$ÔSSBHAHBaŽp $<z`\ +Fg’$@<oŒJĢ`g†.HGžkžSo˙z Gn˙rHGžkm˙h:+žEl˙^"T") 2,&Ōk$ÔkSBaNp $<xvJg RÖR\Š8´g8SDžDlžCl gS˜C6HC6( `v´fĖpLßâNupy lv˙NCNu jm:°jl4H@jm,°Rl(pNu Em°DlH@HDHEEm °DlHDHEpNuHDHEpüNu  g  gpNuHįxQaN$k(>SGrÂBpĀÁÔĀ2(*+HE4<+hÜFÜk”ÔF6*žf6–F gđ gÆJ„l6”RÔj˙ú R˛n4ę4ę4ę`ė$@]Š0*aâ’@5A$k(SR`rRGžk lĒHAow background˙˙Information window foreground˙˙Information window middleground˙˙$Subsidiary information window border˙˙(Subsidiary information window background˙˙(Subsidiary information window foreground˙˙*Subsidiary information window middleground˙˙Application window border˙˙Application window background˙˙Application window foreground˙˙Application window middleground˙˙!Application window item highlight˙˙,Application window item available background˙˙,ApplHDØBĮD–F0*a¸˛@o’HB4ÔFÔF6H@0a ˛@ozHA$k(>RZvÆĮEō8` 5*˙ø5*˙ø5*˙øSžnîHA’@55”F5j˙ü5p aPv(o NēNēô`,0Đ@HDĀÄHD€ÄjR@â@lp°jg `z jn fJ0*gî g8RDS@m aü˛DgJm`đR@`BS@5@x8aâ’@5A:REžCDG–B<,`V0*x8Øj¸kl˜ g SD0B„8aĻ5@:’@5A|–B>`R@5@aˆ:’@5A~–B<,˙ūDF(o UÔkÔl$?U?JFgŸWopa¤>‡o×oŸop a’.“ +ĐŦ$/@"OaPHDHENēæNē°pvxPLßāJ€Nup t/v˙NC&J€NuHį ,+˜m(F~>åŲĮ‘Č`IīHFDFHFDF(Æ(†0|˙ü$L2<>`ÜRļFication window item available foreground˙˙+Application window item selected background˙˙+Application window item selected foreground˙˙.Application window item unavailable background˙˙.Application window item unavailable foreground˙˙Pan/scroll bar˙˙Pan/scroll bar section˙˙Pan/scroll bar arrow˙˙Button highlight˙˙ Button border˙˙Button background˙˙Button foreground˙˙ Hint border˙˙Hint background˙˙Hint foreground˙˙Hint middleground˙˙Error messagmRA>œZÜZÕȲEmėLß@NuHበ.+Fg $G>g8+–2ŌD0+SGo\J0DA`0+rCī3@Ōl&Ōk3Aa˙Z2 a˙VJGnĀLß‘NuHįxQNē H$kF>SGrÂBpĀÁÔĀ2(*+4<+–ÜkhÔF6*žf6+–F gđ gÆJ„l6”RÔj˙ú R˛n4ę4ę4ę`ė$@]Š0*aā’@5A$kFSR`rRGžk"l¨HAHDØBĮD–F0*aļ˛@oHB4ÔFÔF6H@0až˛@oxHA$kF>RZvÆĮEō8` 5*˙ø5*˙ø5*˙øSžnîHA’@55”F5j˙ü5p aNv(o NēNēđ`*0Đ@HDĀÄHD€ÄjR@â@lp°jg`z jn fJ0*gė g8RDS@m aú˛DgJm`đR@`BS@5@x8aā’@5A:REžCDG–B<,`Ve background˙˙Error message foreground˙˙Error message middleground˙˙ Shaded area˙˙Dark 3D border shade˙˙Light 3D border shade˙˙Vertical area fill˙˙Subtitle background˙˙Subtitle text background˙˙Subtitle foreground˙˙Menu index background˙˙Menu index foreground˙˙Generic seperator colour˙˙Hį`Āa6f& fCúķ>ŌÃŌÃŌŅŌÁŌÁaŠfĐÁĐÁ`0ŲQĘ˙üpLßNup˙LßNu Cb A8b0ĐBe @9bpNupņNu B˙˙f4<9pNuHį`ĀaĖfa2fŧĐÁĐÁ`2ØQĘ˙üpLßNu A8bÃâ/Aúōŧa<ĐÁĐÁ2 _NuHįĀNšŪ^’ æˆLîø˙ÜN^NuNV˙ôHį0&.EųĪ€&n RR’Ņü?€€Jƒf `&JûC_PROGpNA,HN@aÄa|/Cú˙Ä" ĶúžJ‘g YpͰĐĀ @bōkĐüũ`î af|ß˙#ĪQFpt˙"9SNAJ€fj#Č^žŅųS#ĪQF.HAų^ÂąųQFgBX`ôpNA#Á^Â#Č^ēHyRūHz˙HNšBôPHy^ē/9Q>/9Q: yÍâN/Nš(ēr˙&pNA`öHį<*OJ.ĄfĒHįŋßfJEø*Aú$ˆąŌfBĀ~.M$…J‡g‚a`@NzH0xĀrAí‰NIč2<˙ D"L"ØQÉ˙üN{ČNu šGold gFaĖAúaôø<@`&)H,)H4 _.MNĐAúaėđ$Aúaâņ'`0.MN{HAė˙đ2xÂN‘GĄLß<Nup . ĄcNzHyë G/NšBJ€POf\Hyø` xp°šQļg p°šQļf /.˙ÔNš§*` /.˙ÔNšČ|XO&g p˙°ƒf/.˙ÔHyåaæŽ`/.˙Ô/N“POHyZ†Hya0Nš‡Â-@˙ÔPOf”`8BšRÎ`0 n˙ØH€HĀ/HyŌHya0Nš\Oī Hya0HxN“PORŽ˙Ø n˙ØJfû`Đ gS€g.S€g2S€g6S€g2`¸aīxJŽ˙ČgĒHyøHxN“`˜HyÅ`îHy¸`æBŽ˙¤p°šQļg p°šQļf å€ @Ņî /Nš§*` å€ @Ņî /NšČ|XO&gäp˙°ƒfĘ å€ @Ņî /Hyåaå’`ĀJšRŌf å€ @Ņî #ĐRŌ`p°„gp°„fjp°šQļg p°šQļfHyļNš§*` HyļNšČ|XO&gĖp˙°ƒf å€ @Ņî /Hyåa"<N{NuJ€g .@ĄmôØN{Nu^ēRESULTING FROM THE USE OF THIS SOFTWARE.IMPLIED. IN NO EVENT WILL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGESPROVIDED AS IS AND COME WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED ORLIKE ANYTHING ELSE THAT'S FREE, ZIP AND ITS ASSOCIATED UTILITIES AREnot sold for profit.redistribute this executable so long as it is not modified and that it isPermission is granted to any individual or institution to use, copy, orabove date; see http://www.cdrom.com/pub/infozip/Ziå` å€ @Ņî //N“PO`˜ g"S€gæS€g,S€gžS€g¸W€g`h å€ @Ņî /Nš=œ G €XOfHy~HxN“PONšO &g G//N“POxJŽ˙Čgr`Rxp°šQļg p°šQļf /.˙ÔNš§*` /.˙ÔNšČ|XO&g p˙°ƒf/.˙ÔHyåaäH`/.˙Ô/N“POHyZ†Hya0Nš‡Â-@˙ÔPOf”BŽ˙Čp°šR’fĻx`  å€ @Ņî /NšMđXOR€/NšMŽ#ĀRÚXOfHy~HxN“PO å€ @Ņî //9RÚ`JHn˙ Hn˙˜Hn˙œHyŦ å€ @Ņî /NšÜ&r˛€Oīf p°Ž˙œnp °Ž˙œmp°Ž˙˜np°Ž˙˜l" ŽQĘ˙Đf <ˆ` <e/HxN“POB§B§B§/.˙˜/.˙œ/.˙ NšH n˙Đ €xOī`ŧp°šQļg p°šQļfp.html for other sitesLatest sources and executables are at ftp://ftp.cdrom.com/pub/infozip, as ofthe authors at Zip-Bugs@lists.wku.edu; see README for details.Currently maintained by Onno van der Linden. Please send bug reports toThis is %s %s (%s), by Info-ZIP.Type '%s -L' for the software License.Onno van der Linden and Jonathan Hudson.Copyright (C) 1990-1997 Mark Adler, Richard B. Wales, Jean-loup Gailly,NV˙øHį0EųRŪGųMž&9Ræ` /NšˆR&XOJƒfđ`¤ R-hZ˙ø RJ¨Jg"R )J°¨6g/(JN“XO RJ¨6g å€ @Ņî /Nš§*` å€ @Ņî /NšČ|XO&gp˙°ƒgũ: å€ @Ņî //N“POp°„fZ-E˙Āx`R å€ @Ņî /NšMđXOR€/NšMŽ#ĀRÖXOfHy~HxN“PO å€ @Ņî //9RÖNšKôxPOR…ēŽmöôp°„gp°„fHyGHxN“POp°„oTaë(BŽ˙¤HyëNšČ|&XOg$p˙°ƒfHyëHyåaâ` Hyë/N“POxJŽ˙ČgHyøHxN“POp°„gFJŽ˙Āf@p°šQļg p°šQļf,$yRŪ` JšRōg/*JNš‹LXO`p%@N$jZ fÜNš‰ä&gp°ƒfHy'`Hy /N“POJše’g/9ešNšMžXOJšRŌfHyöHxN“POp °šR˛g0Hyô/9RŌNšBJ€POgHyō/9RŌNšBJ€POfBšRŌHįü m<$m($LŅ Ö¨(h&mT*h2 nÄ hPN¨Lß?øNuHįüaËLĮJÅC`āHįüa`Ø"-@B‚&-D m<$m,&mT(m0*h2Nu"HAB‚4-ZŌm\äiRAĀÁå€Nuz"nÄ)¯°-Xf .§f(-D")8’­H`"-D(ŌiBHAŌi@HABŠ@˙ü˙ū¸gļ¸AgŧAo2Å` žAl2ÅHAHDHFHG¸AgŧAo2Å` žAl2ÅHFHGHAHD…gtp{/Ō­HNC"¸g˙ZNuX-YSf "afrp,NC)m 0 lz"-DŌ­LNēÅ m<+h˙ôDaūØ l"-$Ō­Ltp{NCp`ür˙p,NC"-Da"-DaūėÉAa "+ADHz˙đ’­4Cí^2­@3|#Aa$0-BŅia0-B2ŧ3@‘ia0-@Ņirp.NCCí^Nu Cú4xNŌ ˜pLîø˙ČN^Nu į€/NšMŽ(€fHyrHxađŒPO/ /.aũš`Ęstderr is not a ttyEnter password: Verify password: NV˙üp°Žf <` < -@˙ü/./. /.˙üNšž^J€Oī fHyøHxađpN^Nuwas replacing the original zip filenew zip file left as: total bytes=%lu, compressed=%lu -> %d%% savings zip file empty . enter new zip file comment (end with .): was setting comments to nullcurrent zip file comment is: Enter comment for %s: was reading comment lineszip warning adding: %swas adding files to WM_PAPER´WM_INKŽWM_STRIPÂWM_BLOCKō WM_BORDER WM_MOVEMODESP_RESETNSP_GETrSP_SET– SP_JOBPALš SP_JOBOWNPAL SP_GETCOUNTa†Nē˛f@Nēf:p'"6˜.v˙NĒ„f*p("Nę„~)`~(aXNē„fNēØf "6˜v˙NĒ„Nua:NēffôQģËo–NēĀ CfŠGë PNē fÔp."6˜v˙Cö˜NĒ„NuaūNē*f¸Nēzf˛p "6˜$6˜v˙NĒ„NuaōNēŒf–06˜m8 @n2@B€NuažxNēP CbJCg86˜&rt˙“ÉNĒ€NĒ|NupņNuaģËfôt˙NĒ€2Núta|xNē Cg CfÔ(6˜X‰&"6˜$6˜"v˜NĒ€NuaNxNēØ Cg CfĻ(6˜X‰&"6˜$6˜"v˜NĒ|Nua aJzip filedeleting: %s was copying %swill just copy entry over: file and directory with the same name: could not open for reading: was zipping %supdating: %sfreshening: %sallocating temp filenamer+w . -i try: zipzip diagnostic: new file=%s zip diagnostic: fcount=%d missing or earlyup to datezip diagnostic: %s %s zip diagnostic: marked file=%s not found or emptycan't use -d,-f,-u or -g on stdout can't use -T on stdout, -T ignoredcan't use -F with -A, -F ignoredcan't use -y with -k, -yf„&“ÉNǐNuaa:f˙t"Bv˙NǐNuHįp€pNA$hÄ$j(LßNuHįp€pNA$hÄ$j$LßNuzģËg`J6¸gpĀ6¸Sg Jv¸k4Jv¸j.,ačfVP‹a fNQˆ"tģËgDY†g&af:XŽX"Y‰`*af*HÃåK׎X–EmgYCfūÖ"6˜26˜X‰`"6˜$6˜J€NuHįppt`Hįpp$`Hįppt˙"pNAJ€LßNuHį@@r˙pNBJ€g0|˙˙LßNuHįđđpNALßJ€Nur/ a"_fö XJûfa€g"fčpūNu(ptNA*\ˆJ€Nu|˙`|`|ģËo6¸g/ arfpP‹|˙<6˜TŽX"_8mŒ/ Čü(ØŽ0¸Ž4l vH0jBJ†k.|(.0¸Ž4l vH0j*NēVCú/ 4xÆN’&_f-ˆH`pú`˙>€`p"_Nuv(|xxØŽ0¸Ž4lJvHmJRF؃`îa˙Pg:rú°fR ignoredinvalid option(s) used with -d; ignored.:;missing suffix listwas processing list of filescannot repeat names in zip filemissing argument for -b or -Pinvalid date entered for -t optioninvalid date entered for -tt option%2d%2d%4d.invalid timeinvalid pathno such option: %cname not matched: can't use - and -@ togethernothing to select fromcan only have one -tcan only have one -ttdo not specify both -r and -Rcan only have one -Puse -P before zip file namepassword verification faile"’Ž4m0˜Ž0v(ԃ4xNĒ,ØŽ0$n4p˙-€¨Ôü(ĩÄoô-J4`pNBv(؃Y„BļHYƒnöFļH=ŧPH"pNuaĒģËn aüU‰Bv˜`8pĀ6¸gėJv¸kSf aDf$a`r26¸mĐį‰ŌŽv66ÖŽ aˆpNup`paZv`:aJ`aJv`0aDv`*v`v`a6v`v`v`vģËo&/ Këa*_NuHį  4C4jN’LßPNup`p`pЋgpņXNuNēFU‰=˜x`2& a`"rŌ68a0ցSƒS‰ļ8˙˜SAnōB6˜Nux`a a*x-IXpNuHįpr`Hįp2xN‘Lß"nXNu"nX]‰Bv˜Jg4< SBãhúâ‘=‚˜-˜NurŌv˜ĶŽXNu@ĀN@?ĶÎa “ÎVĀFßJNuHįĀpRˆR‰°`aa ´VČ˙øLßNuÃH ae zc €e ‹bAdwas verifying encryption passwordzero length password not allowedwas getting encryption passwordspecify just one actionuse -b before zip file name-vNV˙€Hįp°Žfaņ˛`&p°Žf(HyY n /(NšBJ€POfaķB§Nš(ēXOHyÕHyÎHn HnNš—ŪBš^â GBBš^æBŽ˙ôHy nHxNšŌHy nHxNšŌxBŽ˙Č/. /.aö6&z`  å€ @Ņî P -fŌ å€ @Ņî PJ(g å€ @Ņî PRH-H˙Ø`ėAų T"T )°¨ e/Hx T h NPO` iRŠŧ p Āŧ˙/NšđXOp°ƒf Hy“NšŨB/*JHy*aÔTOī `/*JHyaÔ@PO/*6NšMž/*FNšMž/*JNšMž/ NšMžOī` n˙¸ ŠpZЊ-@˙¸Rše’/ NšˆR*@XO fūJšRÖg/9RÖNšMžBšRÖXOJšQēgJŽ˙¤fHyŒ9ZøH€HĀ/Nšßv-@˙¤POHxNšMŽ,XOfHyyHxN“PO$yRŪ`¨JĒNgœJšRĘg/*JHyb/Nš ĖOī /.˙¤Hx/NšāRJ€Oī gd/NšMđXO(R€/NšMŽ-@˙ØXOf/NšMž.ŧZŪe‚HxNš3pJ€XOgHy—HxaôPOHxNšMŽ#Āe†XOfHy~HxaôlPOHyë/9e†NšKôNšO -@˙üg/9e†/.˙üaô>N^Nutest of %s OK original files unmodifiedtest of %s FAILED zip filename too long-qq -Q4 unzip -t NVûđ/Aîûđ&Hy˜/NšKôPOHy“/NšHâJšRĻfHyŽ/NšHâPO/.NšMđ°ŧXOo HyxaõPXOPO/./NšHâ/NšÛ8J€XOg*/9e†Hye/9e‚Nš ĖHyKHxaķ0OīJšRĘg/9e†Hyg"R )>°¨:g/(>N“XO RJ¨gJ¨:g/(:N“XO RJ¨$gJ¨Bg/(BN“XO/N“$Ž˙øSše’XOJ’f˙ZLî ˙ėN^Nuwas deleting moved files and directorieszip file has only directories, can't make it as old as latest entryzip file is empty, can't make it as old as latest entry-NV˙äHį0Gųe†JšQÂgĻJ“g Hyë/NšBJ€POgŠJšRŪfHycHyŗ`lv$yRŪ`B jŅęJ (/˙˙g.Hn˙č/ NšzÄrPOgHn˙ėNšŦXO` *(ļ„d&$jZ fēJƒg //NšĘV`HycHyoa,POJšRÚg/9RÚNšMžBšJšQļf„p˙°šRžf(JšR–f JšR’fJšRÖfJšQēfJšQžgPHycHyÉaāČ#ü˙˙˙˙RžBšR–BšR’JšRÖg/9RÖNšMžXOBšRÖBšQēBšQžPOJšRÆg JšRĸgHycHy¨aāhBšRÆPOJšRĒgJšRŽgHycHy‡aā@POJšQÎg.Hyë G/NšBJ€POfBšQÎHycHydaā POp°šQļfJŽ˙ôg$Hyë G/NšBJ€POfHy@HxN“POJše’f p°šQļfJŽ˙ôgHy, G/aߎPOJšRÚfb G/NšŖŽ-@˙ØXOgP n˙Ø"G‘ŅRHHPNšMŽ#ĀRÚXOfHy~HxN“PO n˙ØH€HĀ&B G//9RÚNšKô n˙؃POx$yRŪ` JĒNg/*JHy Hya0Nš\JšRÚXOJ“g /NšMžB“XOJšRâg/9RâNšMžBšRâXOJšR–gNš{¤-@˙üg HyF/.˙üabaũP .Lî ˙ÔN^Nuattempting to restore %s to its previous state zip error: %s (%s) zip errorNV˙ôHį<&.Gų^æIųMžKųe†,<Râ.<^â 9QŪRšQŪJ€o B§Nš(ēXOJŽ gbp °ƒgp°ƒgp°ƒg p °ƒgp°ƒfHyiNšŨBXO/9e‚Nšđ/. S€å€ @ŅüRJ/HyTHyZŪNš ĖOī GJgČ PąÕg&J“g /NšXO G/Nš‘XO G/N”XO`œx*9eŽ/Hy$HyZŪNš ĖB§/9eŽ/Nšā„#ųeŽež$yRŪ`*// Nšh *ĐĒ ĐĒ$Đŧ.ŅšežR„PO$jZ fŌQļgîHn˙ŒB§B§/*6NšĘŒ-@˙ÄOīg\°šQÆeTJšQĘg°šQĘdDp°šQļg p°šQļf¤Hn˙€/ NšzÄrPOg .˙°Ž˙„_Ā` *°Ž˙ÄTgtJšQēgp`p%@NJŽ˙Äg .˙İšQÆeJšQĘg°šQĘdp`p%@RJšRĻg0JĒRg <ę` <Ų//*JHyõ/Nš ĖOī`R„Oī $jZ fūŪ/9eĸHyžHya0Nš\*yRæ`š/-HyĄHya0Nš\JšQļgdp°šQļgZB§B§B§/NšĘŒ-@˙ÄOīgB°šQÆe:JšQĘg°šQĘd* G//-Nš—bJ€POf$Hyë G/NšBJ€POg/ NšˆR*@XO`*mOī f˙dJ„f”JšRæfŠJšRŪg T"T )°¨ e/Hx T h NPO` iRŠŧ p Āŧ˙/NšđXO/*6HyGHya0Nš\Oī Hya0/N“POp°ƒgp˙°ƒf¸-|˙ÜJšRĘg> T"T )°¨ e/Hx T h NPO` iRŠŧ p Āŧ˙/NšđXOp°ƒf/*JNšŨB/*JHy*a×`Oī `/*JHya×LPO/*JHyæa׹ę:g /*>NšMžXOJĒ$g /*BNšMžXO/ NšMž n˙¸ Ž˙ŧSše’Oī `LJŽ˙ôf>/.˙°/.˙´/ Nšvö&Oī g&/*JHy×Hya0Nš\Oī Hya0/N“POpZЊ-@˙¸ n˙¸$P fũN/9eĸHyžHya0Nš\*yRæ`đHx^NšMŽ$@J€XOfHyŦHxN“POBĒZ%U6B•%mFB­%mJB­BĒ$BĒ BĒBĒ>BĒ:%|N%m VJšRĘg/*JHyŸ/Nš Ė/NšđOī/.˙°/ Nš€&POgxp°ƒgrp˙°ƒglJšRĘg> T"T )°¨ e/Hx T h NPO`%@B@+ Āŧ˙˙á€BA+ Âŧ˙˙€H@B@BA+ Âŧ˙˙áBB+ Äŧ˙˙‚‚€%@ B@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBB+Äŧ˙˙‚‚€%@B@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBB+Äŧ˙˙‚‚€%@B@+Āŧ˙˙á€BA+Âŧ˙˙€%@*B@+Āŧ˙˙á€BA+Âŧ˙˙€%@%@ BĒ$Bj(Bj*JšRĸg .˙üĀŧ˙` .˙ü%@.BĒNBĒRp°šRĒlp` **€BĒBBĒ>BĒ:BĒFBĒ6B˛x F ŠBĒZpZЊ,J…f, 9e’R€/HyCHHya0Nš\Hya0HyC+`°pЅ/NšMŽ%@FXOgũLJĒg/*NšMŽ%@:XOgũ2/ Hx//*FNšī”r˛€OīfüčJĒg / NPO`0+ĀDRĒ€Āŧ˙ jąę e/ B€0+ā€H€HĀ/ r8NPO`B€0+ā€RĒ€Āŧ˙ jąę e/ 0+ĀDH€HĀ/ r8NPO`0+ĀDRĒ€Āŧ˙ jąę e/ B€0+ā€H€HĀ/ r8NPO`B€0+ā€RĒ€Āŧ˙ jąę e/ +Ā…Ā„H€HĀ/ r8NPO` +Ā…Ā„RĒ€Āŧ˙ jąę e/ +Ā…āˆH€HĀ/ r8NPO` +Ā…āˆRĒ€Āŧ˙ jąę e/ +B@H@Ā„H€HĀ/ r8NPO` +B@H@Ā„RĒ€Āŧ˙ jąę e/ +B@H@āˆH€HĀ/ r8NPO` +B@H@āˆRĒ€Āŧ˙ jąę e/ + Ā…Ā„H€HĀ/ r8NPO` + Ā…Ā„RĒ€Āŧ˙ jąę e/ + Ā…āˆH€HĀ/ r8NPO`Hx/*/*:Nšī”r˛€OīfüÂJ•gHx// Nšā„J€Oī füĻ jFB0X/*FNšĘ%€xXOgüļ%rx6%j:>JšRĘg/2xHyC/9e‚Nš ĖOī %C2 *ЅЕĐŧրRše’0.˙ĖĀ|gjJ•f( ląÔb / lNXO` TR”B€(p˙°„gpP°„fÖ„/ HxHxpЋ/Nšī”r˛€OīfpB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPg,HxHx˙ņ/ Nšā„J€Oī g˙X0,Ā|@fû†p`ûĸB@+ Āŧ˙˙á€BA+ Âŧ˙˙€H@B@BA+ Âŧ˙˙áBB+Äŧ˙˙‚‚€*€Ö€pЃ// Nšˆ"XO ˛€gž/2xHyBû`„B§// Nšā„J€Oī fúô/ HxHx/ Nšī”r + Ā…āˆRĒ€Āŧ˙ jąę e/ + B@H@Ā„H€HĀ/ r8NPO` + B@H@Ā„RĒ€Āŧ˙ jąę e/ + B@H@āˆH€HĀ/ r8NPO` + B@H@āˆRĒ€Āŧ˙ jąę e/ +Ā…Ā„H€HĀ/ r8NPO` +Ā…Ā„RĒ€Āŧ˙ jąę e/ +Ā…āˆH€HĀ/ r8NPO` +Ā…āˆRĒ€Āŧ˙ jąę e/ +B@H@Ā„H€HĀ/ r8NPO` +B@H@Ā„RĒ€Āŧ˙ jąę e/ +B@H@āˆH€HĀ/ r8NPO` +B@H@āˆRĒ€Āŧ˙ jąę e/ +Ā…Ā„H€HĀ/ r8NPO` +Ā…Ā„RĒ€Āŧ˙ jąę e/ +Ā…āˆH€HĀ/ r8NPO` +Ā…āˆRĒ€Āŧ˙ jąę e/ +B@H@Ā„H€HĀ/˛€OīfúÖB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPg/2xHyBÖNš Ōp`úĒB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBB+Äŧ˙˙‚‚€%@ %UB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+ Âŧ˙˙áBB+ Äŧ˙˙‚‚€%@pր/ HxHx/ Nšī”r˛€Oīg`Pp°šRĒlÔ`Rƒ ląÔb / lNXO` TR”B€(p˙°„gpP°„fÔ„/ HxHxpЋ/Nšī”r˛€OīflB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€*€°ŧKPg& •KPgHxHx˙ũ/ Nšā„J€Oī g˙L`ų "*2Ō…ŌǐĐŧ˙˙˙â*€ *°•g$/2x//* r8NPO` +B@H@Ā„RĒ€Āŧ˙ jąę e/ +B@H@āˆH€HĀ/ r8NPO` +B@H@āˆRĒ€Āŧ˙ jąę e/ +Ā„H€HĀ/ r8NPO` +Ā„RĒ€Āŧ˙ jąę e/ +āˆH€HĀ/ r8NPO` +āˆRĒ€Āŧ˙ jąę e/ 38Ā„H€HĀ/ r8NPO` 38Ā„RĒ€Āŧ˙ jąę e/ 38āˆH€HĀ/ r8NPO` 38āˆRĒ€Āŧ˙ jąę e/ +$Ā„H€HĀ/ r8NPO` +$Ā„RĒ€Āŧ˙ jąę e/ +$āˆH€HĀ/ r8NPO` +$āˆRĒ€Āŧ˙ jąę e/ 0+(ĀDH€HĀ/ r8NPO`0+(ĀDRĒ€Āŧ˙ jąę e/ B€0+(ā€H€HĀ/ r8NPO`B€0+(ā€RĒ€Āŧ˙HyB¨/9e‚Nš Ė%UOīB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPgøš*ƒB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPgjJšRĘgbp°šRĒl <B€` <Bw//9e†HyB‰/9e‚Nš Ėp°šRĒf"HyB1/9e‚Nš ĖB§HxNštOīOī#ÕeŽBše–JšeŠg*JšRĘg"/9eŠ/9e†HyAū/9e‚Nš ĖOī/ NšJše’gP 9e’å€/NšMŽ#Āeš,XOg÷$yRŪ` FX† Š$jZ fōHy<üHx/9e’/9ešNšnp`÷Zfoundadjusting offsets for%s: %s a preamble of %lu bytes local header not jąę e/ 0+*ĀDH€HĀ/ r8NPO`0+*ĀDRĒ€Āŧ˙ jąę e/ B€0+*ā€H€HĀ/ r8NPO`B€0+*ā€RĒ€Āŧ˙ jąę e/ 3xĀ…Ā„H€HĀ/ r8NPO` 3xĀ…Ā„RĒ€Āŧ˙ jąę e/ 3xĀ…āˆH€HĀ/ r8NPO` 3xĀ…āˆRĒ€Āŧ˙ jąę e/ 3xB@H@Ā„H€HĀ/ r8NPO` 3xB@H@Ā„RĒ€Āŧ˙ jąę e/ 3xB@H@āˆH€HĀ/ r8NPO` 3xB@H@āˆRĒ€Āŧ˙ jąę e/ 3hĀ…Ā„H€HĀ/ r8NPO` 3hĀ…Ā„RĒ€Āŧ˙ jąę e/ 3hĀ…āˆH€HĀ/ r8NPO` 3hĀ…āˆRĒ€Āŧ˙ jąę e/ 3hB@H@Ā„H€HĀ/ r8NPO` 3hB@H@Ā„RĒ€Āŧ˙fV/9^â G/Nš‘6&POg2/9^âHy aÎė/9^âNšMžBš^âOī Hy|/N“PO/9^âNšMžXOBš^âJŽ˙üg&Hyë G/NšBJ€POg/.˙ü G/Nš’nPO/.˙¨NšMžJŽ˙Ügp`p/`ņšãXãhãhãhãhãhãhãhãhãhįđįđįđįđįđå$įDã‚įđįđãŪįđäčįđå$įđå6įđå\įđįđįđåŠå¸æ*įđæĸįđįđįđįčįđįđįđįđįđįđįđįđįđããŽãŧãčäōåå$æęå,åDåRådårå|č åęæįđæPæ°æÖįđæęįđį6NV n P/(F n P/(FNš—bN^NuNV n P/(F n P/(FNš—bN^NuNV n /(J/.Nš—bN^NuNV˙üJše’g*Hy=@/9e’/9eš/.Nš–’-@˙üg n˙ü `pN^Nu_zipNV˙øHį/.NšMđXOZ€/NšMŽ&XOf ˙ jąę e/ +Ā…Ā„H€HĀ/ r8NPO` +Ā…Ā„RĒ€Āŧ˙ jąę e/ +Ā…āˆH€HĀ/ r8NPO` +Ā…āˆRĒ€Āŧ˙ jąę e/ +B@H@Ā„H€HĀ/ r8NPO` +B@H@Ā„RĒ€Āŧ˙ jąę e/ +B@H@āˆH€HĀ/ r8NPO` +B@H@āˆRĒ€Āŧ˙ jąę e/ + Ā…Ā„H€HĀ/ r8NPO` + Ā…Ā„RĒ€Āŧ˙ jąę e/ + Ā…āˆH€HĀ/ r8NPO` + Ā…āˆRĒ€Āŧ˙ jąę e/ + B@H@Ā„H€HĀ/ r8NPO` + B@H@Ā„RĒ€Āŧ˙ jąę e/ + B@H@āˆH€HĀ/ r8NPO` + B@H@āˆRĒ€Āŧ˙ jąę e/ +Ā…Ā„H€HĀ/ r8NPO` +Ā…Ā„pLî˙đN^Nu/./NšKôJšRŽf<˙B€0ā€rRĒ€Āŧ˙ jąę e/ +Ā…āˆH€HĀ/ r8NPO` +Ā…āˆRĒ€Āŧ˙ jąę e/ +B@H@Ā„H€HĀ/ r8NPO` +B@H@Ā„RĒ€Āŧ˙ jąę e/ +B@H@āˆH€HĀ/ r8NPO` +B@H@āˆRĒ€Āŧ˙ jąę e/ +Ā…Ā„H€HĀ/ r8NPO` +Ā…Ā„RĒ€Āŧ˙ jąę e/ +Ā…āˆH€HĀ/ r8NPO` +Ā…āˆRĒ€Āŧ˙ jąę e/ +B@H@Ā„H€HĀ/ r8NPO` +B@H@Ā„RĒ€Āŧ˙ jąę e/ +B@H@āˆH€HĀ/ r8NPO` +B@H@āˆRĒ€Āŧ˙ jąę e/ +Ā„H€HĀ/ r8NPO` +Ā„RĒ€Āŧ˙ jąę e/ +āˆH€HĀ/ r8NPO` +∞€nPB€0ā€/Hx 0ĀGĀŧ˙˙/Nš?Ž/Hx 0ĀGĀŧ˙˙/Nš?’/Hy?e/N”Oī/2H/N“PO j gf j g^ jgVB€0*ā€/Hx 0*ĀGĀŧ˙˙/Nš?Ž/Hx 0*ĀGĀŧ˙˙/Nš?’/Hy??/N”Oī/2H/N“PO0*°j,g Āŧ˙˙/B€0*,/Hy?/N”Oī`"Āŧ˙˙rđg B€0*/Hy>î/N”Oī /2H/N“PO jc B€0*/Hy>Î/N”Oī /2H/N“POJj(g B€0*(/Hy>ē/N”Oī /2H/N“PO rhg.Jrhg( rhg B€02h/Hy>“/N”Oī /2H/N“POJĒfJ˛XgŒJĒg0J˛Xg* j:ąę>g /2X/*Hy>\/N”Oī/2H/N“`TJšRĘgLJĒgJ˛Xg <=š` <RĒ€Āŧ˙ jąę e/ +Ā„H€HĀ/ r8NPO` +Ā„RĒ€Āŧ˙ jąę e/ +āˆH€HĀ/ r8NPO` +āˆRĒ€Āŧ˙/ /+Hx/+FNšíD°ĢOīf JĢg&/ /+Hx/+:NšíD°Ģg p Lî x˙čN^Nup`ōNVHį0$n &nv (<˙˙*<˙ jąę e/ HxP r8NPO`RĒŧPpPĀŧ˙ jąę e/ HxK r8NPO`RĒŧKpKĀŧ˙ jąę e/ Hx r8NPO`RĒŧpĀŧ˙ jąę e/ Hx r8NPO`RĒŧpĀŧ˙ jąę e/ + „…H€HĀ/ r8NPO` + „…RĒ€Āŧ˙ jąę e/ + Ā„āˆH€HĀ/ r8NPO` + Ā„āˆRĒ€Āŧ˙ jąę >)` <> /JĒg *` 2X//2HHy>0HyZŪNš ĖLîø˙āN^Nu%s: adjusting offsets for a preamble of %lu bytes Retry with option -qF to truncate, with -FF to attempt full recovery would behas beenzip warning: %s %s truncated. compressed size %ld, actual size %ld for %s extended local header not found for bad extended local header for zip: reading %s zero-length name for entry #%ldr-NV˙´Hį/*:Nš(šJ€Oī f/*:NšMž%j>:XO0*,Ā|gZB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBB+Äŧ˙˙‚‚€-@˙”fZAøŅĘB@(Āŧ˙˙á€AøŅĘBA(Âŧ˙˙€H@B@Aø°ĒNgJĒRgŦ%|N jŅōh 0/xgJšRĻg/2XHy{‚/9e‚Nš ĖOī /2XNš‘J€XOg/2XHy{rNš ŌPOJšRÂfD/2XaūÜ/2haūÔ rhJgHy{p/2hNšHâPOPO/2hNšMđ%@gRƒXO`Rƒ$jZ f˙>JƒgH å€/NšMŽ&@J€XOf pLîø˙ĖN^Nuv$yRŪ`LJĒNgBJĒg< jŅōh 0/xf,Jƒg S€å€ s/0X/2XNšBJ€POg Rƒå€'Š$jZ f°Hy=Hx// Nšnx`Ļ å€ s(pXJg’/ NšMđ @ŅĖ 0/xXOf/ NšMđ @ŅĖB0xXOJ„g& S€å€ s/0X å€ s/0XNšBJ€POg>JšRĻg" å€ s/0XHy{>/9e‚Nš ĖOī å€ s/0XNšËčXOR„ŅĘBA(Âŧ˙˙áAøŅĘBB(Äŧ˙˙‚‚€-@˙”B§ *2ĐĒĐĒĐŽ˙”Đŧ//Nšā„J€Oī fũÄ/HxHxHn˙˜ GNr˛€OīfũĻB@.˙›Āŧ˙˙á€BA.˙šÂŧ˙˙€H@B@BA.˙™Âŧ˙˙áBB.˙˜Äŧ˙˙‚‚€°ŧKPg/*FHyBÖ`Vx`Aî˙˜ŅÄ"DĶËh R„p °„bčpЊ*@B@-Āŧ˙˙á€BA-Âŧ˙˙€=@˙Đ-+BŽ˙Ėx`n3H°5HgbJŽ˙Ėf/*JHyMõNš Ō-|˙ĖPOJšRĘg:B€5H/B€3H//HyMĖHya0Nš\Hy=šHya0Nš ŌOīR„p°„bŒJŽ˙Ėg JšRŽg‚B@-Āŧ˙˙á€BA-Âŧ˙˙€H@B@BA-Âŧ˙˙áBB-Äŧ˙˙‚‚€%@B@-Āŧ˙˙á€BA-Âŧ˙˙¸ƒe˙X/ NšMžp`ūĖNVHį&.(. ļŧ˙˙˙cÖŧ€ā‹Øŧ€āŒļ„c*Hx/HxČ „/NšDô/Nš?æR€/Nš?’`pLßN^NuNV˙ōHį0&.*. /Nšĸ =@˙ōHĀЃ&x.ƒNšMđЃS€&@/NšMđЅS€$@XO`r :g ;f$J„g pLî 8˙ŪN^Nux/NšMđЃS€&@XO`@J„g6ˇÃe2H€HĀĀŧ˙ @Ņü_0H€HĀĀŧ˙"@Ķü_0°fp`p(SKSJĩÅdŠ `˜ (stored 0%%) (deflated %d%%) (in=%lu) (out=%lu)incorrect compressed size s=%ld, actual=%ld zip -0 not supported for I/O on pipes or devicescan't rewrite method file size changed while zipping cou€H@B@BA-Âŧ˙˙áBB-Äŧ˙˙‚‚€%@B@- Āŧ˙˙á€BA- Âŧ˙˙€H@B@BA- Âŧ˙˙áBB- Äŧ˙˙‚‚€%@ B@- Āŧ˙˙á€BA-Âŧ˙˙€H@B@BA-Âŧ˙˙áBB-Äŧ˙˙‚‚€%@B@-Āŧ˙˙á€BA-Âŧ˙˙€5@5n˙ĐB@-Āŧ˙˙á€BAÂŧ˙˙€5@BĒNBĒR/*FNšĘ%@JgŽ%jJ6PO`/*FHyM°Nš Ōp`ōNJšRĻg/ aâšXO$jZ fúH FJg>JšRĘg6/JšRŽg <Mz` <Mt//9e†HyM/9e‚Nš ĖOī/NšJše’gZ 9e’å€/NšMŽ#Āeš-@˙ÄXOfp`ņŧ$yRŪ` n˙ÄXŽ˙Ä Š$jZ fîHy<üHx/9e’/9ešNšnp`ņ€NVHį0ld not read input file: zip warningunexpected error on zip file-NV˙ĀHį<$n&. Gî˙ÜIî˙ĐKų^ōBŽ˙ėxBŽ˙ā(ŧ˙˙˙ũzBŽ˙Ā/*FNšMđ%@ jŅęF (/˙˙WĀr-@˙ÄHn˙ô/ Hn˙ė/*6NšĘŒ-@˙đOīgpū°”o pLî<ø˙œN^Nu°”f -|˙ÄB”` .˙ėrVĀr°Ž˙Ägp˙`Î5|˙˙*BĒ.JĒg /*:NšMžXOJĒ g j:ąę>g /*>NšMžXOBĒ>BĒ:BĒ BĒBšf^JšRŌg/9RŌ/*6aũJ€POgp` 9Rž&€Hy€/*6NšBJ€POfBš^î%n˙đ`lJšRÎgHn˙ô/ NšŠ†PO/.˙ėNšü-@˙āg #ü˙˙˙˙^î`2JŽ˙Äg#ü˙˙˙˙^îB“B”`B§/*6Nš-8#Ā^îr˙˛€POgūĐ%n˙đXOJŽ$n &nv (<˙*<˙˙|, jąę e/ HxP r8NPO`RĒŧPpPĀŧ˙ jąę e/ HxK r8NPO`RĒŧKpKĀŧ˙ jąę e/ Hx r8NPO`RĒŧpĀŧ˙ jąę e/ Hx r8NPO`RĒŧpĀŧ˙ jąę e/ 0+ĀDH€HĀ/ r8NPO`0+ĀDRĒ€Āŧ˙ jąę e/ B€0+ā€H€HĀ/ r8NPO`B€0+ā€RĒ€Āŧ˙ jąę e/ 03hĀDH€HĀ/ r8NPO`03hĀDRĒ€Āŧ˙ jąę e/ B€03hā€H€HĀ/ r8NPO`B€03hā€RĒ€Āŧ˙ jąę e/ 0+ĀDH€HĀ/ r8NPO`0+ĀDRĒ€Āŧ˙ jąę e/ B€0+ā€H€HĀ/ r8NPO`B€0+ā€RĒ€Āŧ˙āfJ”fB“p˙°“f&ŧJšRĸgp` < 4€J“fp `p5@BĒ 5|JšRÖgj *H@B@%@ 5j,5kJ“fJ”m `p%@J”m `p%@Bj( j˙˙*f Bj*-|˙ĀJšRĸg .˙ėĀŧ˙` *.Āŧ˙€Ž˙ė%@.%yež2// Nš]¸.POfũč *ĐĒĐŧŅšežJšRÖg$//* /9RÖNšœTp ŅĒp ŅšežOī C0(Ā|@gHyæHxNštPO/Nšˆ-@˙Ø C0(Ā|@gh˙ŸB•Bš^ęp°“fD/NšÂÎJŽ˙Āg5|˙˙*/ p*Њ/NšąüpЊ//9R˛NšĢNš¯ŧ*Oī`æJŽ˙ÄfŪHx@NšMŽ,XOfp`üüJŽ˙āgžx///9^ęNšĖD#Ā^ę//Hx/NšĘ¸€Oī found for offset %u--local = %02x, central = %02xlocal and central headers differ for names in local and central differ for name lengths in local and central differ for %lufseekmultiple disk information ignoredremember to use binary mode when you transferred it?)missing end signature--probably not a zip file (did youNV˙”HįNšíD°ŗ8Oīf JĢ$g&/ /+$Hx/+BNšíD°Ģ$g p Lî ø˙äN^Nup`ōNVHį $nv (.*. ,..<˙ jąę e/ HxP r8NPO`RĒŧPpPĀŧ˙ jąę e/ HxK r8NPO`RĒŧKpKĀŧ˙ jąę e/ Hx r8NPO`RĒŧpĀŧ˙ jąę e/ Hx r8NPO`RĒŧpĀŧ˙ jąę e/ B§ r8NPO`RĒBpĀŧ˙ jąę e/ B§ r8NPO`RĒBpĀŧ˙ jąę e/ B§ r8NPO`RĒBpĀŧ˙ jąę e/ B§ r8NPO`HxHxđ/Nšā„J€Oī fė/NšˆĐŧ F €` El El El/HxHx/ GNHxHxā/Nšā„Aø˙ŅÅ(H`nB@,Āŧ˙˙á€BA,Âŧ˙˙€H@B@BA,Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPf(-|˙´ F …ҐB§ F X€//Nšā„Oī `SLšÅdŽOīJŽ˙´f F d˙2XO` F ŧJŽ˙´fĘ FJgÂ/NšŌN.ƒ F/Hx/ GN-@˙¨ n˙¨ŦX n˙¨ŅÅl n˙¨ŅÅl .˙¨Đ…S€(@`nB@,Āŧ˙˙á€BA,Âŧ˙˙€H@B@BA,Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPf(-|˙´ L‘Å"F"ˆB§ F X€//Nšā„Oī `SLšÅdŽOī/NšMžJŽ˙´f"Hy=šHyNŌNš ŌHyRĒBpĀŧ˙ jąę e/ ‡H€HĀ/ r8NPO` ‡RĒ€Āŧ˙ jąę e/ ā€H€HĀ/ r8NPO` ā€RĒ€Āŧ˙ jąę e/ ‡H€HĀ/ r8NPO` ‡RĒ€Āŧ˙ jąę e/ ā€H€HĀ/ r8NPO` ā€RĒ€Āŧ˙ jąę e/ <˙˙…‡H€HĀ/ r8NPO` <˙˙…‡RĒ€Āŧ˙ jąę e/ <˙˙Ā…āˆH€HĀ/ r8NPO` <˙˙Ā…āˆRĒ€Āŧ˙ jąę e/ B@H@‡H€HĀ/ r8NPO` B@H@‡RĒ€Āŧ˙ jąę e/ B@H@āˆH€HĀ/ r8NPO` B@H@āˆRĒ€Āŧ˙ jąę e/ <˙˙„‡H€HĀ/ r8NPO` <˙˙„‡RĒ€Āŧ˙ jąę e/ <=šHyNœ` /HxHx/ GNr˛€OīfōB@+Āŧ˙˙á€BAÂŧ˙˙€fZB@+Āŧ˙˙á€BA+Âŧ˙˙€fBĒ:BĒFBĒ6BĒJ n˙ÄNu%”H *ր0*,Ā|gpրה//./ Nš“J`ĖNV˙ėHį0$n&n.. x|J‡g fzpLß øN^NuB@*Āŧ˙˙á€BAÂŧ˙˙€-@˙øB@*Āŧ˙˙á€BA*Âŧ˙˙€* Y€ē€b2 .˙øŧTUg,ŧ$gŦĐŧ g´pЅÕĀpЅž€p°‡cŠ `˙~Čŧ˙˙˙|p°…bÚ gÖv*H€HĀĀŧ˙ˆ€pĀ„glpЃē€e`AøŅÃŅĘB@(Āŧ˙˙á€AøŅÃŅĘBA(Âŧ˙˙€H@B@AøŅÃŅĘBA(Âŧ˙˙átԃ2(Äŧ˙‚‚€'@Xƒ`pūȀJŽf˙LpĀ„gjpЃē€e^AøŅÃŅĘB@(Āŧ˙˙á€AøŅÃŅĘBA(Âŧ˙˙€H@B@AøŅÃŅĘBA(Âŧ˙˙átԃ2(Äŧ˙‚‚€&€Xƒ`pũȀpĀ„gūÔpЃē€ebAøŅÃŅĘB@(Āŧ ŠBĒZpZЊ-@˙ÄJĒf: 9e’R€/HyNpHya0Nš\Hya0HyC+Nš Ō/ NšMž`Ø *R€/NšMŽ%@FXOgRJĒ g/* NšMŽ%@>XOg8JĒ$g/*$NšMŽ%@BXOg/Hx/*/*F GNr˛€OīfdJĒ g/Hx/* /*> GNr˛€Oīf@JĒ$g/Hx/*$/*B GNr˛€Oīf jŅęFB F *2°d Ē2Rše’/HxHx/ GNr˛€OīfâB@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPgüÆ$yRŪ`ļB§/*2/Nšā„J€Oī fz/HxHx/ GNr˛€Oīf`B@+Āŧ˙˙á€BA+Âŧ˙˙€H@B@BA+Âŧ˙˙áBBÄŧ˙˙‚‚€°ŧKPf˙˙á€AøŅÃŅĘBA(Âŧ˙˙€H@B@AøŅÃŅĘBA(Âŧ˙˙átԃ2(Äŧ˙‚‚€'@Xƒ`ūjpûȀ`ūbJ†fū\Čŧ˙˙˙|`ūPp°…būHJ†fūBB@*Āŧ˙˙á€BA*Âŧ˙˙€H@B@BA*Âŧ˙˙áBB*Äŧ˙˙‚‚€&€B@* Āŧ˙˙á€BA* Âŧ˙˙€H@B@BA* Âŧ˙˙áBB*Äŧ˙˙‚‚€'@pˆ€`ũ¸NV˙üHį $n/. B§/*/*:aũ &f&JĒ g j>ąę:g/. Hx/* /*>aüä&Lî˙ôN^NuNV˙üHx//.Nš74-@˙üg n˙ü` nBN^Nudeleting directory %s (if empty) /error deleting zip diagnostic: deleting file %s NV˙ėHį8z6|F~˙v$yRŪ`ĀpNšKv&POfę/NšMđЅ&XO` C (/˙˙f S†J€f*`Sƒļ…bä/ ဠ@ŅŌ/Nš–vJ€POg ဠ@ŅŌpx°¨fp`˙P~R„¸šRōm˙R `˙ RSHB€0h/B§NšžōJ€POg&B§ “/J“m І`p/NšŊZ&’Oī `zR’ GS G daúĐ GJfūH)@6XOf¸ƒg/N“XO/N“.…N“`ūâ//,6NšKô)n˙čVPO/N“.…N“XOŧšRBf¤#ė6RB`˜JšRōg/aũ.J€XOg‚p˙°šRFf8HyŒ]/9e†NšBJ€POg//9e†NšJ€POfp`p#ĀRFp°šRFfŦ G"Mp "ØQČ˙ü2Ø/ /NšJ€POfR G (°­fF (°­f< °•f60(°mf,0(°mf" (°­f (°­f ("°­"fp`pJ€g4JšRĻgHyŒ:/9e‚Nš ĖPO¸ƒg/N“XO/N“.…N“p`ũĸHxNšMŽ$@J€XOg/NšMđXOR€/NšMŽ$€XOf gūx/ N“XO`ūn//NšKô%C%E%n˙č yRę Š%yRęBĒpЊ#ĀRęRšeĸŧšRBf#ŌRBPO¸ƒg˙n/`˙fNV˙øHį &.J…g RSHB€0h/B§NšžōPOHx “/J“m І`p/NšŊZ`ūNV˙ėHį0EųpzGųv#îr#î vBšnBšjJytüfļ~x`8 å€ @Ņü„h ‡v` GR‡Ņüg„Rƒp"å AŅüSŽ"ã ļ€mÜR„p°„n GSHŅüg„zx`8 å€ @Ņü„Ü …v` ER…Ņü‚g„Rƒp"å AŅüT""ã ļ€mÜR„p°„nÂî…`B ī€"å AŅü„Ü €v` ER…AčŅü‚g„Rƒp"å AŅüT""_ã ļ€mÖR„p°„n¸|` ЀBsR†p°†lđv` Rƒå€ @ŅĘ1|Rkļŧoä` Rƒå€ @ŅĘ1| Rkļŧ˙oä` Rƒå€ @ŅĘ1|Rkļŧoä` Rƒå€ @ŅĘ1|RkļŧoäHx/ aØv`0 å€ @Ņütú1|B§Nš$r-@˙øHn˙øNšö˜$@%|˙˙˙˙ Ѐr>$€ ę€r?%@ r â r%@ B@H@r%@ râ¨rS€%@ râ¨rĐŧP%@/ Nš÷Lî˙đN^NuNV ŽŧlB§B§B§HxHxHxŧaŪ`< .ŧŧrã ". tåĄ€".HABA€".t åĄ€".끀".≀N^NuNV˙ø/ n R€rū-@˙üHn˙üNšö˜$@//*/*/* *R€/ *Đŧl/a˙V$n˙ôN^NuNVpN^NuNV/.Nš8N^Nuw replace: can't open %s rNV˙˛Hį(... zHn˙Æ/NšJ€WĀr-@˙žg& n˙Ōoz`/Nš8J€XOg pLîø˙žN^NuJ…f//NšŌúJ€POgzJ…g¤Hy‘3/Nšß8,POf/Hy‘Hx/NšÃÂ"å AŅütú0€PORƒp°ƒnĘa Lî ø˙ĐN^NuNV˙ü/v` å€ @Ņüf’BPRƒļŧmčv` å€ @Ņüo†BPRƒp°ƒnęv` å€ @ŅüurBPRƒp°ƒnę3üj’BšfBšbBš\BšXBšTB9`üa&N^NuNV˙ôHį8$nGųv.,. Ių* å€*3 Ѐ&`Ēļš"l^ å€ 3å€rԃå"3å22˛re< å€ 3å€rԃå"3å22˛rf å€ LŅķpЃå€"LĶķ°bRƒ å€(3 å€"å22˛re2 å€"å22˛rf 4X°4Hc å€'„,փļš"o˙P å€'…LßxN^NuNV˙ÎHį<&nIųv$S-k˙ø-k ˙ô-k˙đ,+*kBŽ˙Îv` ЀBtRƒp°ƒlđ 9&HyZŪNš Ėp `ŽHy‘/Nšß8-@˙ļPOf /Nš`ŒHx˙˙/.˙ļ/aN&/Nš/.˙ļNšJ€XOfJƒg/Nš8Jƒg p °ƒg `˙Lp`˙FOī/Nš8p`˙4NV˙ÆHn˙Æ/.NšJ€f .˙Î`pN^NuNV/. /.Nš×lN^NuziXXXXXX_NV˙ü/ $nJšRÚgf/9RÚNšMđXOĐŧ /NšMŽ$@J€XOf p$n˙øN^Nu/9RÚ/ NšKô/ NšMđ @ŅĘ (_˙˙XOgHy’/ NšHâPOPO`Hx NšMŽ$@J€XOgŦBHy’„/ NšHâ/ NšØ¨`” fcopy: write error NV˙ôHį(..<@/NšMŽ&XOf pLîø˙āN^Nuz`ˆ/.p˙°„g …ž€c …` /Hx/Nšī”,Oīf n0(Ā|@gV/Nšå€ @Ņüv. å€ @ŅĘBh 9&R€.`Ä å€ @Ņüv.( å€ @ŅĘB€0(å€ @ŅĘB€0(R€&ļ†o&RŽ˙Î å€ @ŅĘ1C¸Ž˙đo`v ЀRtBŽ˙Ô¸Ž˙ôm Ž˙ôå€ @Ņî˙ø-P˙Ô å€=r˙Ō .˙ÔЃ/B€0.˙Ō/NšDôŅšb g( å€ @ŅÍB€0(ĐŽ˙Ô/B€0.˙Ō/NšDôŅšfR‡žŧ=m˙6JŽ˙ÎgÆ S€&`Sƒ ЀJtgô ЀStpЃЀTt ЀStUŽ˙ÎJŽ˙ÎnČ&`‚ Ѐ04Āŧ˙˙(`hS‡ å€ @Ņüv.*ēŽ˙đo`P å€ @ŅĘB€0(ļ€g< å€02Āŧ˙˙/ "å AŅĘB2(/NšDĘŅšb å€ @ŅĘ1CS„J„f”SƒJƒf˙|Lß<øN^NuNV˙ŌHį|x`, S€Đ€ @ŅüvB€0B2ЁЀ< Ѐ @Cî˙āŅÉ0†R„pMžp `Ļ/. /Hx/NšíDŧ€Oīg /NšMžHy“4HyZŪNš Ėp `˙nچp˙°„g˙tē„e˙n/NšMžp`˙PNV˙ü/&.gZHxHx˙˙/Nšā„J€Oī fF/Nšˆ-@˙üXOm6HxHx/Nšā„J€Oī f .˙üR€//Nšˆ"XO ˛€fp`p&.˙øN^NuNV/ $n` \fJ*g RJRJJfėp` ?g *g [fä $_N^NuNV˙îHį<$n&n Kų”Đ,<˙.<_0 JRJB€&fJWĀrLî<ø˙ĘN^Nup?°ƒfJgpЋ/`Jp*°ƒfJfp`Ō/ / N•&POfÆRKJfîp`ŧp[°ƒfėJgā !g ^fp`p*ÕÅ(Jx`J„gx` \fx` ]gRLJfâ ]fžv -WĀr(`‚J„f \fx`pJ„f °„lÎv`D å€ @ŅîB€0(*g./"ԁ ACî˙āŅÉ0RPĀŧ˙˙/NšÃÂ"å AŅî0€PORƒļŽ oļLîx˙ÂN^NuNV˙āHįNšLv,PO`pЅ/NšMŽ,XOJ†fp`Đ+L: -ŲĀpĐƒŅ­J„gŠŧU|TCB,DpЌ$@pĀ„g ë +ā€Ā +H@H€Ā +râ ĀpĀ„gë ā€Ā H@H€Ā râ ĀpĀ„g ë +ā€Ā +H@H€Ā +râ Ā+F> 5x܀pЅŅĩxJ„gpЅ// /NšJ„ FEpLî<ø˙ČN^NuNV˙ėHį<`ū` !zip%s: warning: cannot stat %s, no file header added %d %cQDOS02`p&n|L.<ZŪvxB.˙÷09YšĀ|°|gHx/Nš.$@J€]¸.POfúžB§/.˙Ô/Nšā„J€Oī gp `úĸ0*Ā|g// Nšd‚.POfú†pŅšežJĒg j:ąę>g/*:NšMžBĒ:XOBĒJšRĘglJšRĻg//Hy/9e‚Nš ĖOīp°“f$//a÷pPO/Hy/9e‚Nš ĖOī `Hy~ō/9e‚Nš ĖPO/9e‚Nšđp`ųāNV˙øHį<$n(. Ių^îKų1ÎJšRļf"// /N•&p˙°ƒgJƒfž Lî<˙āN^Nup°šRļfB⌠JŅÄ&H// /N•&(p˙°ƒgĐJƒgĖ KRKĐ  f JSHŧ ü RƒS„J„fā•Ã`d&J S€// /N•&(p˙°ƒgJƒgŒŧ 8 KRKĐ  f  fSJSƒS„J„fäJƒfHx/ /N•vOī `•à S€ 2fSƒOī // /9^ęNšĖD#Ā^ęך^ō`POfp`&Hx/Nš.*POfp`Hn˙÷p Њ//+6aũT&gp°ƒf09YšĀ|g‚4ŧJû|HB*HyŠ~pЊ/NšKôPO// /NšJ„'F'F 'J:'E>Oī Aø ŅĘJ¨gp*`p#/HyŠz/Nš ĖOī /*HyŠv/Nš ĖOī `"p˙°ƒf/+6HyŠ?HyŠC/Nš ĖOīJ.˙÷g/HyŠļŽl8 Rƒ„p °„g* jąę e/ Hx* j NPO`RĒŧ*p*Āŧ˙p °„f” jąę e/ Hx j NPO`RĒŧ p Āŧ˙.ŠNšđ*<žĩÃg8 _f2RJR˙ŊBHn˙ž/NšJ€POf .ˆa˙.KųH€z˙JGfByf2B9f6/NšE6J€XOg&Hx/HySVN•Oī `nHx(Hn˙ˆNšBžPOHn˙ˆNšMđ3Āf4HĀAî˙ˆĐˆS€$@ _gü_B.ŧHn˙ˆHySVN•&<f6Oī Hn˙ˆ/aúr$@PO// NšKôPO/Nš”’(g0pЃ/HyS.NšKôJ„g`S„¸ƒg D _fōR„ DBPO`2Hn˙J/NšJ€POf .˙RĀŧ@f /NšČ|`|`p˙`tXO`&Hx/NšBÆ-@˙üPOo6BŽĀ„€ ā€Ā„@ Ā„@ āˆĀ„@ B@H@Ā„@ râ¨Ā„@ 9Lî ˙äN^NuNV˙üHį EųŒ 9”°’c*’&ļŽ c&. / y„ŅŌHP/.NšJ„×’ `pLî˙ôN^Nuexinzip diagnostic: %scluding %s -NV˙ļHį (.HyČz/NšBJ€POfB§/NšŒŠLî8˙ĻN^NuHn˙ē/NšJ€POgšB§B§/a˛*v$yRŪ`l/*F/Nš–vJ€POgVJšRōg/*JNš‹LXO`p%@NJšRĻg0/*6JĒNg <ČY` <ČV/HyČ\/9e‚Nš ĖOīv$jZ f/NšMžJƒg"p˙`˙L .˙ÂĀŧ@fB§/NšŒŠ&f˙0p`˙*NV˙ôHį/.Nšĸz&-yRĸ˙ôJšRšfHx//Nšˆô&PO CJf Lî˙ė˙F`JkgūB@+°yYžf^p?Ā“fXJn gJHySVHnūDaų (@POB€0+/pЋ// N•B€0+B4Oī pĐG??. HnūDaūN*PO``–`’HySVHnūNšKôPOB€0+/pЋ/HnūN•B€0+ @CîūŅÉB(HnūHyS.Nš–vr˛€POfN^NuNV`æ`D$n / /.NšØ&f$J*fv`B@*°yYžf p?Ā’f&<˙ Lî˙ôN^NuNV˙üHį `˛`˜&n *n(.~ vzJ„g*pĀ„gz&pĀ„gN^Nu/NšMđXOR€/NšMŽ(XOfp`Ø.ƒ/NšKôJšRĸg/Nš‰JŽg n Ž˙ô `ŦNV˙ü//.NšMđXOR€/NšMŽ&XOf p&.˙øN^NuB§/.NšĄZPO//NšKô `ÜNV˙ø/. Nš´-@˙ü-@˙øHn˙ø/.NšÖ^N^Nufstat(stdin)NVûÂHį<$nGî˙Æ(n *n&.AîûÆ*/NšMđ(ļšUVf> g(šU^ g*ŧ˙˙˙ū g%yUb%yUb$šUb 9UZLî<8ûĻN^Nu.ƒ/NšKô DSH 0/Xf DSHB0XHyČz/NšBJ€POf*/ 9Z H€HĀ/Nš°J€POg$HyĘ~Nš PXO`/ /NšJ€POgp`† g2 +Āŧ€WĀr"+HABA€(€ +Āŧđ°ŧ@fp” g +Āŧđ°ŧ€f +`-f JSHB€&`ZĀĀŧ˙ @px˙ī *-gJ’f:NšÆČJ€g0J†fHyŊJNš PXOB§//NšÅŦ į€$€ yvB`˛pЃ¸€e2J†g.Hx/NšÃp ВrøĀ$€pЃį€Ņ’Hx//NšÅŦ`vž„f(HxpЅ/NšÃHytúHypzađ 9f`FHxpЅ/NšÃ .˙ôR€/ 9UR€/ 9TūR€/aũōHyo†Hyf’a¨ 9bV€Ņ’aõJ…gNšÅ^’ æˆLîø˙ÜN^NuNV˙ôHį &.EųT,. RR’Ņü…T†Jƒf å€ @Ņüf’RP`rSƒ FŅügB€ĐŧR€å€ @Ņüf’RPļŧl C` î€ @AčŅü‚gB€å€ @Ņüo†RP 9XRšXЀ @ŅüT0ƒ9a9`9aĐĀapĀ’f& y\Rš\ŅüTHy„/*NšDôR€%@râ¨& *ˇ€Āŧ˙å€ @Ņų^Ū "*≺€%@ .LßN^NuNV/ $n#ü4VxeĻ#ü#Eg‰eĒ#ü4VxeŽ`H€HĀ/a˙DRJXOJfė$n˙üN^NuNV˙æHį8$n,. Gų›RIų›†RšRúp°šRúf B§Nš$r.€Nš"¨" ŗ€/Nšō8XO/.a˙hx`(NšōHî€Āŧ˙.N“*/N” ŋ€Aî˙æ€HXOR„p °„nŌ/.a˙.x`FN“*Aî˙æB€0H/N”Aî˙æB€0Hģ€& jąę e/ / j NPO` RĒƒB€XOR„p °„n´PON“* B@H@Āŧ˙/N” B@H@Āŧ˙ģ€& jąę e/ / j NPO` RĒƒB€XON“* râ¨Āŧ˙/N” râ¨Āŧ˙ģ€& jąę e / / j N` RĒƒB€š`B9`üap°šR˛lz <˙Ā’fp į€* 9fršfb-@˙øx`. å€ @ŅüT" Z€/ å€ @Ņüo†B€0/NšDôڀR„p°„nĖæ ∰šXc .˙øâˆē€d pLßxN^Nu ’˙gî š€Xgâp`āNV˙âHį0$nGųÃ~BŽ˙đBŽ˙ėB.˙ëJšTgXp‡f n˙ėRŽ˙ėŅüTP˙ë GR‡Ņü…TB€,.˙ëĀ<f& å€ @ŅĘB€0(/ å€02Āŧ˙˙/N“`ę FŅügB€& <Đƒå€ @ŅĘB€0(/ <Ѓå€02Āŧ˙˙/N“ å€ @ŅüSŽ*g å€ @Ņü„h œ€//N“PO .˙đRŽ˙đЀ @ŅüTB€0(¸ŧd D`îˆ @AčŅü‚gB€&POå€ @Ņî B€0(/ å€ @Ņî B€0/N“ å€ @ŅüT"*/Nš7ÜPOXO#Ã^ĻHy[ŪB§B§Hx/ y^ļNLí8˙ÄN]NuNUHx/9^Ļ y^ļNN]Nu_CCXtNU˙č/ Eí˙ô$­ BĒBĒHm˙č/ /-NšŌ°J€lp˙` -˙č$m˙äN]NuNUB§B§/-Nšā„ mh˙ŸN]NuNU˙ÆHm˙Æ/-NšJ€POgp˙N]Nu -˙΀ŧ@f #ü^Î`â/-Nš8`ØNU/-/- /-Hx/9^Ļ y^ļN#Ā^ŌfpN]Nupü°š^Ōfp"`p˙#Ā^Îp˙`âNU˙š/-Hm˙ÍNšAbJ€POg/- Hm˙šNšAbJ€POfp˙N]NuHm˙šHm˙ÍNšÕdJ€g #ü˙˙˙˙^Î`Üp`Ú*ENV*NU˙äHį:&- C PJüf AøŅÃ&`vNšEÖ y^ē (Đŧh(@ ,Ќ+@˙č ,Ќ$@ , Ќ+@˙đp•Ā`F f>J*f80*/NšDĘ/Nš?’/Nš?’<?<??/Nš@Ė?-˙čHyRū?/NšBdOī8…B€0*2-˙ėHÁB*9@B€0*2-˙ęHÁЁ9@B€0* 2-˙ėHÁЁ9@/ Bgp??/Nš@ *??/NšA2*??/NšA6*??/NšA:?/NšALíø˙ N]NuNU˙ôHį8Eí˙øIų\Îa m$Jš\Æf 9\ĘŅ’vJš\Úf Ņ’v 9\Ō°’n" Д°š\ÖlJš\Úg Ņ’` ‘’pąƒ/ Nš&@'C Lí˙äN]NuNU˙ôHį8$mGí˙üIųDĘ*<Q€a~ *ŧF(/HxpЄ/Nš?’/N”/Hyá3€/N”" Ё&€v`/ å€ @Ņü\–/N”Ņ“RƒļĒmäHx/Nš?Žr˛€f p°Ēlۓ/ * S€/N”Ņ“Hx/*HĀĐ­˙đ+@˙ėHx m˙ėRHHPHyĶNNšMlJ€Oī f jTH&`QJĩí˙čd´NšEâHyĶSNšIJƒg,C`/NšI.ŽNšMđR€ŨĀXOJfæ y^ēGčŦXO g ` <YŌ/Hy]Na>PO g ` <YŌ/Hy^ta$PO g ` <YŌ/Hy]Xa Lí\˙ĐN]NuNU˙Î/ Eí˙ÎHx2/ /-NšFØJf" m JPg/- / Nš"PO/ /-NšGN$m˙ĘN]NuNU˙ôHį0Gų^Î$m`RJB€ @Ņų^dĀ<fę+S˙üB“/-/- /-NšëČ& -f"J“fļŧ˙˙˙b,&ŧ" <€Lí ˙čN]Nuļŧ˙˙˙c&ŧ" <˙˙˙`ā&­˙ü `ØNU˙ Hį00Hx/-NšBÆP/k /- Hm˙ NšBôP"@pJv˙ _NC/pNB Lß N]NuNU˙ú/p˙°šYÔg&9YÔN”Ņ“ *"逐å€Ņ“ Ņ“JĒ g 9\Α“Jš\Æf 9\ʑ“J“mHx$/ aū–.€/ NšJ„`&ŧ˙˙˙˙ Lí8˙ÜN]NuNU˙üHį $mv` "å€ĐĐ€ RHHÁЁŧ0&R’ RB€ @Ņų^dĀ<fĖ LßN]NuNUHį &-Eų!ęJ­f //- /NšH€ RŅÃ%HRĒBOī //- /*NšH€ jB08Lí˙øN]NuNU/ $m :g.`RJJg& ,g -g +gH€0@Ņų^dĀ<gÔ $_N]NuNU˙üHį0Eí&m v˙ R -fv` +fR’Hx/ aūä.€NšDĘ&€ R :f(R’/ aūĘ"逐å€Ņ“ R :f R’/ aū°Ņ“XOXO// NšE Lí ˙đN]NuNUHį0Eí&m / aū~'@ R :fR’/ aūj'@ R#ü˙˙˙˙YÔ` Hm˙˙?<˙˙NšÖ2/ y^pNB€-˙˙& &-˙öN]NuNU˙ü/aŦ&??<˙˙NšÖ2/NšGØ &-˙øN]NuNU#íYÔ -N]NuNUp˙°š["fB§Hy[ęNšBÆ#Ā[" 9["N]NuNU˙ęHį8$m z˙Gų2:Ií˙üHx/-Nš-8&POn#ü^Î Lí8˙ŌN]Nu/Nš&ė( fp` *°’l Đŧír€(€/ p??/NšlJ€OīgLHm˙ī?/NšFēJ€Oī g r Ёg6/N“`–B­˙ôHm˙ô?/NšB-˙ī??/NšGØOīJ”f/N“`8/N“Hx/-NšØOī `ŪNšPŽ+@˙ø/NšP˛/N“/-˙øNšP˛p`˙,NU˙~Hįz˙Hm˙†/-NšJ€POl Lí8˙rN]Nu -˙ŽĀŧ@f\B§/-Nš-8(POmÖ/Nš&ė&?< :f R’/ aūV&€ Lí ˙øN]NuNU˙ÄHį:Eí˙ÜGíIų?ŽMųø"Aí˙Ø*+y\Æ˙Ä#ü\ÆxB§Nš$r E € E 9\ĘҐJš\ŌXOg E 9\ÎҐ/Nš @"J"Ø"Ø"Ø"Ø"Ø"Ø"Ø"Ø"Ø%|BĒB’R“ S<MXOg Vg` R“BĒ/ N–S€%@ SR“ .XOfÎ/ N–& SR“ .fŧ/ N–+@˙Ė%| p°ƒf4 *å€ @Ņü\– ]€%@ Hx/*N”r˛€f p°ĒfRĒ vHxHyQ€/ aü.€Nš?’X€/N”+@˙ÔHx -˙ː­˙Ô^€/N”"$ၒ‚.€pᥠЁ_€ŅĒ S /f/ pŅ“/aū8&€PO/ aû¸ m €#í˙Ä\Æ Lí\8˙¨N]NuR“x˙Hx/*N”r˛€f p;°Ēlp˜€/ N–Đ„%@ S /XO`šTZNU˙ôHį8Eų@Hm˙Ā?/NšBX - rIgp`p@˙Å?<@Hm˙Ā?/NšBT/Nš2:p`ŠNU˙ôHį &-$m B§/Nš-8,POm / /Nš'(/Nš2: Líx˙āN]NuHx_/NšKvPO//NšMđ"ԃSXO ˛€fJ‡g/B§ R/Nš–`/Hx˙˙ R/Nš¸&Oī p˙°ƒf˙ &9^Ō`˙NUūöHį xJ­f pLíūęN]NuHxHm˙}NšBžHxHmūūNš8ôx&-`*Hx;/NšKv$@J€POgB/aũÔ( gü;& XOJ„f Jƒg CJfČHm˙}NšîHmūūNšlableFilename too longResource deadlock avoidedResult too largeMath argumentBroken pipeToo many linksRead-only file systemIllegal seekNo space left on deviceFile too largeText file busyNot a typewriterToo many open filesFile table overflowInvalid argumentIs a directoryNot a directoryNo such deviceCross-device linkFile existsMount device busyBlock device requiredBad addressPermission deniedNot enough coreNo more processesNo childrenBad file numberExec format errorArg list too lo `‚NU`p‘šZh yZh PN šYčZhbâN]NuNU#üÛČ"AųZhąųZhc yZhXšZh ­p`p˙N]NuNU˙øHį Aí XH$H/ /- /-Nšá&Lí˙đN]NuNU˙úHį EųZ˛v0*Ā|gvjū˙ *ĐĒ%@ / /-NšŪ$+@˙úJg j%j J­˙úf/ Hx j Nr˙˛€fp˙`pLí˙ōN]NuNU˙øHį AíXH$H/ /-HyZ˛Nš(&Lí˙đN]NuNUJy\g4Jš\g,/9\NšMđXO?/9\?<˙˙/9^ÆNšBdSy\p˙N]Nu : NU˙øHį0&mEų3Ô&9^ÎgžJš"„g/9"„ y"„ h$NXO g*Jg&/ NšMđ.€/ HxN’HxHyŨ>HxN’OīJƒoļš[Ōl å€ @Ņü[2ngNo such device or addressI/O errorInterrupted system callNo such processNo such file or directoryNot ownerUnknown error"o oprg°göNuNU˙øHį Aí XH$H/ /- /-Nšļ&Lí˙đN]NuNU˙üHį $mHxB§*H€HĀ/NšC&p˙°ƒg 0*Ā|g Lí˙ôN]Nu0*Ā|gJĒgä *ĒЃ`Ú R‘ęŅà `ÎNU/ $m f p$m˙üN]Nu/ j$N`îNųHį*څŧ…eDgAķXHp8/N”PJ€nڃKķxMķX// N”PJ€l "HA`ÖÂQČ˙øQÉ˙ô.`´Lß@ NuNVHį?&n&.—Ã(n(. ",ĖĀH@HFĀÃÜ@$HBÂÂÜAHF âˆ"*ĘĀH@HEĀÃÚ@$HBÂÂÚAHEg p˙*€ g$Ģ%k%k"pЋ/NšŦ`˙NV/.NšŌnN^NuCompiled with c68 v4.2x on Dec 25 1997NVHyËúNšÜRN^NuNV <UfN^Nu /fpNuHį0NšĖ6 @ / "o"/F€$æ‰`‚vąåK&00∎€vąåK&00∎€vąåK&00∎€vąåK&00∎€vąåK&00∎€vąåK&00∎€vąåK&00∎€vąåK&00∎€QÉ˙~Ä|`vąåK&00∎€QĘ˙îLß F€NuNu /Hį?8,9f‚"9fnEųf^Iųfa*9fr&L×ÅE~úbz˛šfŠeäŽS†+˙ũáK+˙ū3üáL3ũ`3üáL3ũãH02°ESÎ`D"LĶĀ1üáO1ũ¸Gfā)˙ũáO)˙ūļGfŌ4<˙ Ką VĘ˙ü‘ËTˆąÁcž"#ĀfvNXO`pJ€f .-gJ†f pLí\ø˙°N]Nu0*Ā|0°|fJ”g T0(Ā|@g / T h$NXO,m j‘Ō(//*N“ž€b//NšDô*+G˙āB­˙č`Æ*//N“+@˙ā//Nš?â&g ƒ`p+@˙č`œJ„fR jąŌb / jNXO` RR’B€+@˙Ôr˙˛€f///-˙āNšDôĐ­˙萅/N“`˙.í˙×S… j‘Ō(`D¸…c(š„+R˙đp °„d//-˙đ/NšJ„ŨÄŲ­˙đxOī ` m˙đR­˙đĐp˜€J„fî$­˙đJ…f˙b -˙āž€J‡f -‡`ūĀ&-˙čx˙B­˙⏃d „+@˙č`VJƒg+|˙⠐ƒ+@˙Ø//-˙ØN“Ņ­˙āž­˙āc ///-˙ØNš?â" `ŧ+G˙ā//NšDôЃ(Jƒg˜†*`Ũš€J…g//*H€HĀ/Nš*"+@˙üOī fÚJ…g˙P˜…ļ„b˛šfŽe¤ LßüNuC68 libc_a v4.22fÍæ*o*m0Ā|˙å@ÚĀGųÖ&0V@€ÚĀ#ÍÚBy""By"@By"^*SJUgn/ / Nš"P`Va> ˙˙g )&˙˙faQÉ˙Ü`a.fü `öNuagR`øNuŧg gR`ōRNu g  g  Nu 1f ->fü >f Cų"@`˙r 2f ->fü Cų"^`˙V &f`î =fTa"J€gH°ŧn <°šSkp#ĀS`hü pr-˛|9n’|0mã€.å€Đ‡Đü `ŪNupņ`„ %faČJ€gî°šYČk$#ĀYČ` 'fa˙` "fa˙ `aūú fūĻpNqNA$9S’‚&9YČk f ’š^Ē`ԃ`"˛ŧ˙R/ ƒ/N“ž€Jƒg˙@S‡`˙:NU˙üHį &- $mxp‘­J­np °ƒb/-Hx /Nš?æ(// aÄ$@ "åŌ„ԁĐŧ0Ā Lí˙đN]NuNU#í[&N]NuNU˙üHį Eų[&Hyķ/Nš?’&/HxA§NšDĘ"tåĄĐƒ$€l <˙˙˙Ņ’ LßN]NuNU˙ĀHį8$m &-Gí˙đx˙Ií˙øB@*Đ@;@˙ęB€0*rū5@Āŧ˙˙2-˙ęHÁԁ:B€*ЀĐŧ ;@˙ėHyRūNšMđ;@˙čHyQÚNšMđ;@˙æHySNšMđ;@˙ä/ ?/NšVJ€Oī g6ŧ7|BkBk`ÜHm˙Ä?<0Hm˙ĀHm˙Â?/Nš0-˙ÂHĀB2*⁐rū5@0-˙ĀHĀB2*⁐5@ 0*°kl5k0* °kl5k B€0+B2ЁB2*B‚4*n"<Ō‚P./NšP XJ€gö&@//NšNP,œšS/NšP X&@/9SNšP X"@"QOņCų^ž Q"€pNA// NšNP 9Đâg @N/9ÚNšĶTXHxNšMŽX#ĀâHyRūNš7ĸX yâ ĀB#üŪ 9YØg /9YĖHyŪHyâ/9Ö @NOīNšéę/9^Ö/9â/9ŪNš\Oī /Nš(ēXr˙&pNA`öĐđ*SIGNAL_RNU˙ÔHį Eí˙čz˙B§HyĐæNšBÆ&p°ƒPOo`z$ŧ%MSG%|5|5yYĐ %E %| y^žAčČ%H?</ ?/NšBd(p°„Oī o`&?< Hm˙Ü?/NšB`(p °„n#í˙ä^ļOī p°ƒnp °„o.B§NšÜö09\°El:Ry\09\HĀ/Ō‚˛€oB€0+B2ЁB2*5@B€0+B2+ЁB2* B‚4*Ō‚˛€oB€0+B2+ЁB2*5@ OīB€0+B2ЁB2*B2*;@˙ā°|c;|˙āB€0+B2+ЁB2*B2* ;@˙Ū°|c;|˙ŪpЊ/Bg?-˙Ū?-˙ā?/Nš4pЊ/B@*???/Nš@ 8…0-˙ėBA*A9@BlBl*°g j˙â` *j˙â/ ??/NšAN??/NšA6-˙â??/NšA:/ ?/Nš@˜Jm˙äg(Hy?/Nš@Ė?-˙äHyS?/NšBdOīJm˙ægRB€0/B€02-˙æHÁ/HÅ/NšDĘ/Nš?’Y€<?<??/Nš@Ė?-˙æHyQÚ?/NšBdOīJm˙čg\HxB€0/B€02-˙čHÁ/HÅr@˙äf hWĀr@˙ãf LWĀr@˙ågRKJ-˙įf. cg8 [g2` R… jąŌb / jNXO` RR’B€& y^d08Ā<fĐB-˙â~B-˙ßB-˙ā+| ˙Ö+|9˙ŌAų鎐<[°<bH€Đ@ĐđNĐpД(€ @YH P …RKB-˙į`ūDB-˙ä`œJ„g|p0°ƒfvR… jąŌb / jNXO` RR’B€&p˜€J„g¨px°ƒgpX°ƒf,R… jąŌb / jNXO` RR’B€&+|˙Ö`p+|˙Ö+|7˙Ō`\|˙ā`+|˙Ö+|7˙Ō`+|˙ÖJ„g4J-˙āg0p+°ƒfR… jąŌct RR’B€&S„`p-°ƒf|˙ß`Jp°­˙Öfôp0°ƒfėR… jąŌb / jNXO` RR’B€&p˜€J„gÂpx°ƒgpX°ƒfŽR… jąŌbŒ/ j`ÚEų[ō`Ō/NšMđ;@˙ĸ å€\€+@˙´0-˙ĸHĀV€rūĀĐ­˙ÆŅ­˙´pŅ­˙´Hm˙°J­g -` /B§/-˙´/-˙¸Nš$ž*Oīl/-˙”Nš2:#Å^Ō`˙&/-˙¸/-˙°/-˙”Nš&ė.€Nš$ü.ž­˙¸Oī g /-˙”Nš2:#Į^Ō(ƒ//Nš7Ü`ū°/-˙”Nš2:Hx m˙°\HHPHyúNš(šJ€Oī g4/NšMžB§ mXHHPNš ,f(ŧ `¤/NšMđ;@˙ĸOī m˙°üh+H˙ŧ((\p˜€ D š^Úp˜€+D˙¤0-˙ĸHĀV€rū˜€ DTH+H˙¨0-˙ĸHĀ///-˙¨NšH€/NšMž D0­˙ĸ m˙¤0ŧJüJ­f p˜€ DBP`Ŧ å€T€˜€,D<ĒBm˙˜`Š0-˙˜HĀR€å€+r˙„ļ˛f*0-˙˜S@gS@g0-˙˜HĀ+@˙„`+|˙„`+|˙„/-˙„NšDr&@0-˙˜HĀå€NXO`ˆp0°ƒn ļ­˙Ōb–€`Vp˙°ƒg–#Ã"” y"”Ņų^dĀ<g 9"”Đŧ ` 9"”+@˙ôpa°­˙ônZpŠŅ­˙ô -˙ô°­˙ÖdJ&-˙ô/-˙Ö/NšDôЃ.R… jąŌb / jNXO` RR’B€&|˙âJ„m˙` S„J€f˙VJfJ-˙ßg D€.J-˙äf J-˙ãgJ-˙āfpД(€ @YH P0‡`ŪJ-˙āfpД(€ @YH P ‡`Ä/ /Nšũ&JPOgB­˙đ`(J-˙åg +|˙đ`J-˙äg +|˙đ`+|˙đHm˙â/-˙đ/ // Nš øÚ€ jąŌb / jNXO` RR’B€&J-˙âOī`Jp˙°„fxJfDpД(€ @YH+P˙č`4Jf m˙čR­˙čƒR… jąŌb / jNXO` RR’B€&|˙â S„J€gėJƒlž`äJf\pД(€ @YH+P˙č`LJƒoŧ @ŅÎ!k f0+Ā|f//+Nš'@kPOXORm˙˜0-˙˜H°’m˙n m˙ŧ!D\J­g /Nš#B.XOJ­gp`0?9\U?/Nš$Č.fū0J­gB§?</Nš$\ `üÜp`üÖNU˙ęHį8$m&m (mJ“f"HxNšMŽ&€f p˙Líø˙ĘN]NuB”XO`RJB€ @Ņų^dĀ<fęJgØx <"g[g. `.`ø \fRJ`¸g ¸< fB€ @Ņų^dĀ<fRJJfŌ J‘Į+H˙ø -˙øR€/NšMŽ&XOf / Nš ˜`˙hB//Nš$B„|J­POg/ / / mN,Oī f(pДå€//NšLv*g˛&… å€ @ŅĶ ƒpŅ”PO` /NšMžXOJ†mJf˙ å€ @ŅĶB `ūđNU˙üHį0&m$S` /NšMžXOXJJ’fđ/NšMž y^d08Ā<fĒJf m˙čR­˙čƒR… jąŌb / jNXO` RR’B€&|˙âJ„m° S„J€f¨`fHx B§pЎ/NšCÖp×Ā ^WĀr@˙áOī gRK ]f„` +-f +]gJ+g+°l$ KRKH€HĀ,€ęˆR€å€r$ÄŧåĄƒļ`>H€HĀ+@˙đ` ,­˙đ ęˆR€å€r$ÄŧåĄƒļR­˙đ+H€H°­˙đlŌp×ĀJg ]f˙v ]fžJfˆpД(€ @YH+P˙č`v y^d08Ā<ftJƒop,ƒ ęˆR€å€ 6r$ÄŧåĄĀVĀr-˙áHHÁŗ€gBJf m˙čR­˙čƒR… jąŌb / jNXO` RR’B€&|˙âJ„m† S„J€f˙~Jf m˙čR­˙čBJ-˙âgJfúæR­˙ü`úŪ/ /Nšũ& -˙ü`øüūhúĘúĘúĘúĘúĘúĘúĘũ–B“Lí ˙ôN]NuNU˙øHį Aí XH$H/ /- /-Nš(&Lí˙đN]NuNUpN]Nu"'\ NU˙äHį:&mMųMžvHxNšMŽ(XOf pLí\x˙ÄN]Nu DB|`ŪJ†gHy /NšHâPO/N–/NšMđXOå€V€/NšMŽ&XOf/N–`°J­ f//NšKôPO`P$C(Sz`B€ @Ņų^dĀ<gz`RLJfâJ…gü"Hy B§// Nš(ė$@J…gü"BOī/NšMđR€Ü€pІ//NšLv+@˙øPOf/N–`˙n//-˙øNšHâ(XKOīJ“f˙ /N– `˙NU˙ūHį $m&-(- ,-~˙J’fJĒg Líø˙æN]Nu0*Ā|gj÷˙%y"ˆ(#Ę"ˆJƒgļŧfHJ†gÆzJ„f/NšMŽ(XOg˛z/ Nš¤%D%FJgjļŧû\ũũũúĘúÜúĘúĘúĘúĘúŧûdúÔúĘúĘũøúĘû~úĘúĘûvNU˙ęHį0~0Gų"˜//9^€Nš.&€xJš[îg/ y[îN(XOJš[Ög/ y[ÖN(XOvz˙` pį Ā„gHÃ/Nš3pJ€XOgHÃ*`RCļ|mÚv`”pį +@˙îĀ„f„/HÃ/AųDôNĐ“$@Bjp˙°…g2//NšDô @ŅĶh ///NšDôГ// NšJ„Oī `(HxHy[ęNš-8r˙˛€POf Hx˙ųNš(ēXOHÃ*j˙ų -˙RCļ|m˙hv`¨pį Ā„gœ/HÃ/AųDôNĐ“$@ fp˙°š["f#ę["0gS@gS@gX| 9[ÚĀŧgLp@`J|`ę| fâ0*Ā|fØJšSg#ę^ÆJšSgĀHyS"/* ySNPO`Ē|`Ļp€†jRCļ|m˙TNšrLíf,#ü)¸"` p°ƒf˙|/ Nš¤pЊ%@%|jūû‡jp`˙VNU˙øHį0$m0*Ā|gj÷˙%y"ˆ(#Ę"ˆGų"ˆ`p(Ѓ&@&gļŠfōJƒg*J*m0/ j$NJ€XOf*H€HĀ/Nš2:J€XOg p˙Lí ˙ėN]Nu/ Nš¤0*Ā|0gj8` &Ē(/ NšMžp`ĖNU˙üHį $m0*Ā|g /*NšMž`80*Ā|g.v`$ å€ @Ņü"ŒJf å€ @Ņü"Œ Ē`Rƒp°ƒnÖj˙įLí˙ôN]NuNU˙øHį0$m(-&m KRKH€HĀ* bfRKvũ +f4ŧvpr°…fp°ƒg,4ŧv`$p°ƒg4ŧvp†€pa°…g†ŧ€`†ŧJ„lHxļ//-Nš-8( Lí 8˙äN]NuNU˙čHį:$m(- ,mGų"€p°„eJ„ ø˙ÎN]NuNU˙äHį0*-&m xB­˙ė|~$m` y^d08Ā<g RJB€&fæ r-gT€g`R­˙ėRJJ…f>z 0fRJB€&px°ƒgpX°ƒfzRJ`zR‡/Hx˙˙Nš?æ+@˙đp•Ā`¨p°…fâ 0fÜpÕĀB€&px°ƒgpX°ƒfÄpÕĀ`Ā y^d08Ā<gp0`08Ā<gp7`pW–€Jƒmbļ…l^R‡¸­˙đcR†J†fBp °…f å€Đ„Đ€`"p°…f é€`p°…f į€` //NšDô(p˙„ļ€cR†`؃pÕĀB€&f˙vJ†g#ü"^Îx˙` J­˙ėg D€( g J‡g&Š`&­ Lß øN]NuNU˙ČHį8$m,- Gų?æJĒfpЊ%@ / B§ j NPO`pJ€f *-gJ†f pLíø˙¨N]Nu+m˙ø0*Ā|f/ * j‘ęˆĐĒ/N“ē€dgB Lí\x˙ČN]Nup`ō0*Ā|0°|fJ“g S0(Ā|@g / S h$NXO(Np˜€ j‘Ō&gJļ„c&˜ƒ,/Hx /Nš-+@˙øOī g m˙ø‘ÆRH*`*v/// NšJ„ŲÅ FŅÅ$ˆOī BJƒfJJ„gF jąŌb / jNXO` RR’B€+@˙đr˙˛€fšÎg˙D`í˙ķ - ˙ķg p˜€J„f˙`B `˙NU/ $m0*Ā|bg p˙$m˙üN]Nuj/ NšV`čNU/ $m 0*Ā|!°|g 0*Ā|@g p˙$m˙üN]Nujj˙ū/ /-Nš+â`ŪNU˙üHį0$mGų"€v0*Ā|a°|f˜0*Ā|0°|fJ“g S0(Ā|@g / S h$NXO0*Ā|gp` *//**H€HĀ/Nš*"&nJƒgp``p jv` 0*Ā|gJš"gø+j˙đ//NšDô+@˙Đ+@˙Ô * j‘ęˆ(¸­˙Đc(-˙ĐJ„f/ j$NJ€XOfF`>™­˙Đ(jp °„d//-˙ø/ NšJ„Ų­˙øŲÄOī ` m˙øR­˙øĐp˜€J„fî%LJ­˙ĐfŽ -˙Ԑ­˙Đ+@˙Ė0*Ā|gJ+m˙Ė˙Č -˙ČĐ­˙đ°Ēg+j˙đ j‘ę+H˙Č/-˙ČHx /-˙đNš-J€Oī g / j$NXO//-˙ĖN“`ūŌ *ĒJ€g/ j$NJ€XOfū´~+G˙ä`Ļ&-˙äx˙~¸ƒd „+@˙ä`JJƒg~ ƒ+@˙Ø//-˙ØN“Ū€ē‡c ///-˙ØNš?â" `Æ.//NšDôЃ(Jƒg˜†//-˙ø*H€HĀ/Nš3Ô+@˙ü¸­˙üOī gļ­˙üb"/ -˙üƒ/N“š€JƒgS…` Ų­˙øš‡J…f˙V -…`ũöNU˙ÔHį:$m,- Gų?æIų"€J’fpЊ%@/ j// y"N&$Ē jŅÃ%HJƒg RR’B€`p˙Lí ˙đN]NuNU/ $m0*Ā|@fH0*Ā| f*Hx *’D€/*H€HĀ/NšCr˙˛€fj@$Ē%jp$m˙üN]Nup˙`ôNU˙ü/ $m+j˙ü0*Ā|gj÷˙%y"ˆ(#Ę"ˆ$Ē%j%|"%|ö$J­˙ügp`/ aūv$m˙øN]NuNU˙ĐHį Eí˙Đ5|‚%mp˙­%@%|J%|@ %|J$0*Ā|gp` *%jĐĒ%@ /-/- / Nš(& jRĒBpĀŧ˙ Lí˙ČN]NuNUp˙N]NuNUp˙N]NuNUpN]NuNU˙üHį $m0*Ā|f’%|0*Ā|@g%|Q0*Ā|gjv`8 å€ @Ņü"ŒJg& å€ @Ņü"Œ(`4(<ZzJƒl DR„ŧ- D€&Hx//NšņÚ @B(<ZlOī /NšMđ.€/HxN’HxHyŨv*XO`˛Uf0Jš^lg(/-/- / y^lN(Oī g˙4J„lD€&ڃ`r¸ŧ˙o(<˙?/- ?/-˙ôNšBd&Oī lDR€f40*Ā|g ?/-˙ôNšGä0*Ā|€gbJ…o `ūÔ(ŧ `ūČ(†#Ã^Ō`ūŧڃļ„f&—­×­ (-oJ­˙âf˙D o `pJ€g˙40*Ā|g ?/-˙ôNšGäJ…fž o `pJ€g -˙âF€gˆ(ŧ`ūVNU˙ø/-/- /-HxHy;´Hm˙øB§Hx/9^Ļ y^ļNJ€Oī$l/-S­ Gë `˙v0*Ā|g%DJ­˙ôgp°ƒdvžƒ DŅÃ*%E/ j$NXO0*Ā|f˙" * j‘ęˆ,`˙ (null)NU˙:Hį:(mMí˙^JŦfpЌ)@ / B§ l NPO`pJ€g pLí\ø˙N]NuB–BŽ+l˙đB­˙Ė&m +K˙ė0,Ā|g-m˙ėHx%/-˙ėNšKv&@J€POg K‘í˙ė-H`/-˙ėNšMđ+@˙ĀŅ­˙ĖGų'+K˙ė-m˙Ā/Hx/ aū6Oī`Ō“ %nJgĀ %g¸k +%nJ*gœ *%g’k +%nJ*gx *%gpk +%nJ*gX *%gPp×ĀÕĀĩÃeˆÖ€`“ %n JgD %g>RJRKĩÃeæ)J/ l$NXO$l ,ĐŦ&p°Ŧbؖ€`ļp`p`pÕĀ×Ā)J ­˙ė/- /-aũęN]Nu -˙ørhg#ü^Îp˙`ä -˙ü`ŪNU˙øHį *-|0Eų^€pЅ&J…l#ü^ÎpLíx˙äN]Nuļ’o`//AųDôN//9"˜NšLv(POf #ü ^Î`Ä#Ä"˜/ ’/AųDôN/B§//NšDôЄ/NšCÖ$ƒOī //NšDôĐš"˜`€  NU˙ęHį ,-$m0*Ā|@g Líx˙ÖN]Nu(*/ NšB46Hy>˜/- Nš@r*Oī gē†cĖ`Č m Qg[g\g[g(Vg0p˙`Ŧ?/Nš@ŧ`đBg`bp2??<ôNšDD`Ü?/NšA`Đp ??/NšGØHm˙î?/Nš@˜HxB€0-˙ō/Nš?Ž+@˙ęOīg˜B€0-˙ō­˙ęP€??/Nš@´`˙~t`t F"GHBBBp./lD‡FB,/fü`"lD†FBaFHBJBŅ­˙ĖJgŽRKAí˙]*+E˙äx+|\N˙ØB­˙Č KRKH€HĀ,Aų!Ūr rX°bZĐ@ĐđNĐp` p`p`pˆ€`Č mXH+HYH,l pˆ€ D€,+F˙Č KRKH€HĀ,`<+|\J˙Ø`Hx Hm˙ČNšE ŧ0Ņ­˙Č KRKH€HĀ,p0°†np9°†lÎp.°†fz KRKH€HĀ,p*°†f mXH+HYH,m ˆŧ+F˙ÄRK`Jp0°†nDp9°†m>ˆŧB­˙Ä`&Hx Hm˙ÄNšE ŧ0Ņ­˙Ä KRKH€HĀ,p0°†np9°†lÎSK`ūÜpĀ„r`pĀ„r `pĀ„r@€(`ūž mXH+HYH P ­˙Ė`ũ>pĀ„r €(B-˙ŋ.<\2`0ˆŧ€B-˙ŋ.<\:`B-˙ŋ`B-˙ŋ.<\B` |˙ŋ.<\*p Ā„gHJ-˙ŋf mXH+HYH+P˙ēJ-˙ŋg J­˙ēlp`p@˙žg -˙ēD€f HBJBgD€` J¯lD€,. _OīNĐt`t F"Gp./,/gļaJBgØ `Ôŧ‡e g`:p~`4žŧd ŽÆ0BGHG`"rž†e J†kã†ã`ōJgž†e€ž†â‰âŽ`îNuCú˙J`Cú˙@` Cú˙’`Cú˙ˆ// o/N‘ o €`˙j o"o/ pg *IJg˛fø*_NuR€`ęp `Pp `Lp `^p "o`Vp`Zp`Vp`@p`@p`Jp`Fp`Bp`>p`:p`$p`$p` p`p`p`p`"o `"/ `4/ 2/ `4/ / Hį0 o6/NCLß Nup `čp!`äp"`āp#`Üp$`Øp&`ļp'`Âp(`žp)`ēp*`Āp+`ŧp,`Žp-`Ļp."o `Ŧp/`Ŧp5"/ `¤NU˙ČHį&- (-/NšMđr2˛€XOd#ü^ÎpLí˙ĀN]NuHm˙Č/NšAŪJ€POf&Hx2Hm˙ÍNšBžHx2/Hm+@˙ē G/(//-˙ē`zpĀ„g.J-˙ŋg mXH+HYH0HĀ` mXH+HYHB€0+@˙˛`J-˙ŋf mXH+HYH+P˙˛J-˙ŋg J­˙˛lp`p@˙žg -˙˛D€+@˙˛ G/(//-˙˛ G PN*Oī <Ā„g -˙İ­˙Čc+m˙Ä˙Č+|\J˙ØBŽ m˙ä‘Å-H-E BŽ BŽ+|˙ŽJ-˙žgAø ŅÎR¨pš€ Eŧ-`&(*,."B$B&B(B*B,BHā?~jøLß|øĐAr`!AjúĐA`QČ˙ü /NuNUp?p?p?Bgp?p?- ??-NšH N]NuNU˙üHį &-mļš^€m#ü^ÎpLßN]Nu/Hx0NšDôĐš"˜$@0*Ā|f #ü ^Î`Ė `ĘBBJ¯lD¯FBJ¯lD¯FBaJBgD€ _OīNĐa`ô2/Âī0/ Āī Ō€HABA0/ ĀīЁNuAú˙Ž`Aú˙Ō"o/ "o/N"€`ļNU˙ōHį:(m gJf pLí\˙ŪN]NuNšEÖ y^ēAčH$P`>&Lp&Њ,@6*$`p €r ‚˛f RKRNSCJCfęJCf 1m 8n +_g$R fžNšEâ g” Ng n l$N0,Ā|@gp˙`øˆ -˙Ė`ø€ú4ū|ū|ú8ū|ū|ū|ū|ū|ū|ú>ú0ū|ú,úĻū|újúšúšúšúšúšúšúšúšúšū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ũļū|ũÄū|ū|ū|ū|û<ū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ûvū|ū|ū|ū|ū|ū|ū|ū|ū|ū|ūûšũŧũŽũĘû,ûšū|ū|û4ū|ûJûŽû`ū|ū|ū&ū|ûˆū|ū|ûj"o o2`ØQÉ˙üBNu 9^ÂNu y""g ˙˙˙˙gžgJgPˆ`ė ‡!@pr˙vNAHį˙üpr˙t&<Cų"°NAJ€fD!|Jû!|wait ühCų"°!Ib!G<|1|˙ū,p"tNAühPč!FLß?˙NuNUHį?8Jš"f.p"<t˙NAJ€fV#Č"0<˙B˜B˜QČ˙ú ü˙˙˙˙ ü˙˙˙˙pNA.(Hp"-$NAJ€f"´‡fühCų"°ŗčbgJ(f.-a˙&LßüN]Nuf j$fp`˙~p`˙x @ÁN@?/Nu 2FÁ/A fNšŅôNu../.._NU˙đHį,- ~(-/NšMđІS€*XO`pĐƒØ€pš€`S… E _gē†dōR‡/HyEüNšH¨&POlĐ/HyEøNšH¨&POlŧ E‘ÆRH&/NšMđЃ°­XOc#ü^Îp˙Líø˙ÜN]Nu///-NšH€/ mŅÃHPNšKô `ÔHį0p o6/NC oLß NuNU˙øHį&- /-NšKŽ(XOf(<FÖ/NšMđR€+@˙øJƒf/-NšMŽ&XOf"pLí˙đN]Nu -°­˙ød #ü^Î`Ū//NšKô `Ō=NU˙Î/Aí˙Î&/-/NšKôHyGL/NšHâ/- /NšHâ/NšI&-˙ĘN]NuHį0v˙ opB"/g$SAgSAgpņ` "<˙˙˙NC°ŧ˙˙˙öfJ¯NUHį?8pNA.*xN@p"$NA*g /a˙^XR„`č|ß˙Jš"g*pr˙v “ÉNA@ĮN@ y" ˙˙˙˙gJfPˆ`đFĮJ„fÖp˙` "(BFĮ$-g B LßüN]NuNU/- /-Nš'Š -N]Nu/p"/6/ "oNA&NuNU˙ü/NšPŽ&ŧír€&J­g m ƒ &-˙øN]NuHį0p"/$/ &/"oNAJ€f"o"ˆ Lß NuHį00p "//6/NALß Nu //Nš-lXJ€k @ (NupH`pIHį00 o"o$I$/v˙NCJ€f“Ę Lß NuNU˙úHįv˙ m8` pƒrã "æ‰Đ&0DŅí(H€HĀąƒp˜@JDlØ LßN]NuNU˙ø//-Nš-l&+C˙ü/Nš-@J€XOf -€ŧ€&-˙ôN]Nu m˙üHh2a˙|`ęNU/9\î/-/- gpC"/NC Lß Nup` p/ `p@`pA`pK` pOr"o `Hį0 o6/NCLß NuNU/ Eų^„m m 0-Āŧ˙á€B2-⁀5@0-Āŧ˙á€B2-⁀5@ m m mm/ NšHø$m˙üN]Nu o"o / J€gS€ŲföJ€gS€ü`ô /NuHįpĀ$/g,&/g&Sƒ BRƒ"Cggŗßgđ`č ¯LßNup˙`ö o"o JfüSˆŲfüNuHįp&oNApLß NuNU˙āHį0,-&9^ÚJ†f p˙Lí ø˙ÄN]NuJƒg˜ FJgčHx=/NšKv$@J€POgB/NšKŽ+@˙č gŧ=J­˙čgV m˙čSH(`p˜€¸ƒg DJ(˙˙fđ/NšMđЄR€+@˙āa¨R€ C‘í˙āЈ*//-˙ā/NšJ„Oī fpū`%P å€ @Ņü"ŒBj`FRƒp°ƒnÂHxNšMŽ%@gj` jū˙j0*Ā|gpЊ%@%| *Lí˙ôN]NuNU˙ø//- /-NšDô&o/NšMŽ+@˙øXOn p&-˙ôN]Nu/B§/-˙øNšCÖ`čNU˙úHįv m8`áƒ0DŅí(H€H†€SDJDnč LßN]NuNU˙ü/- SgUg Sg<ûg&<!ļ &N]Nu&<!˙`đ&<a˙`čNU˙ü/J- gv`&<’- SgUg Sg<ûg†ŧ$ &N]Nu†ŧm`đ†ŧAm`čNU˙LHį8$m Gí˙Ā*-Ií˙L|*~"B§Nš$r&Hx:B§/ NšCÖ?<@/ Bg/NšBX(pú°„f p Líø˙,N]Nu%C%C&J„lbp˙°„f$ŧ%|!ļ`zjZ¨äĪ “ ˙ Ž'}žąđ“D‡ŖŌōhiÂū÷bW]€egËl  NU˙ôHįz(-¸ŧ˙˙˙c(<˙˙˙//- /-Nš=‚&Oī p˙°ƒfp°š^ÎgÚp °š^ÎgĐp˙°ƒgڃ—­J­g×­ `Ļ Lí8˙čN]NuNULLPIPENU˙~Hį:(- *-~˙Gų^ÎIųBÆNš82+@˙‚l Lí\ø˙ZN]Nu/-˙‚Hx0NšDôĐš"˜$@|;|˙Œ/Nš7ĸ%@Hx/Hy4INš9,J€Oīfj EJ(g (_fZ|Hx_/Nš74+@˙~POg,pЅ°­˙~f*pŅ­˙~ m˙~Jg 0fpŅ­˙~ m˙~Jf+D˙üx`pĀ„f +|˙ü`B­˙üpĀ„r˛€f &ŧ`˙0 9]JĀŧą„/Nš7ōm˙ŒJ…XOg EJgHy4D/Nš9ēJ€POf %Gŧ`˜/NšE6J€XOfļ/-˙ü/N”&POo"Jfn?</Nš7R6qnkįūÔv‰Ķ+āÚzZgŨJĖųšßoŽžīųˇžC`°ŽÕÖÖŖčĄŅ“~8ØÂÄOßōRŅģgņĻŧWg?ĩŨH˛6KØ +Ú¯ L6JöAz`ß`īègßU1nŽīFižyËaŗŒŧfƒ%oŌ Rhâ6Ė w•ģ G"šU&/Åē;ž˛Ŋ (+´Z’\ŗjÂ×˙§ĩĐĪ1,Ųž‹[ŪŽ›d°ėcō&ujŖœm“ œ Šë6?rg…W•ŋJ‚â¸z{ą+Ž ļ8’ŌŽ›åÕž |Üīˇ Ûß!†ĶŌÔņÔâBhŨŗøڃnžÍöš&[o°wáˇGwˆZæ˙jpf;Ę \ež˙øbŽiak˙ĶlĪE  âx× ŌîNƒT9ŗÂ§g&aĐ`÷IiGM>nwÛŽŅjJŲÖZÜ@ß f7Ø;đŠŧŽSŪģžÅG˛Ī0ĩ˙éŊŊōĘēŠSŗ“0$´ŖĻēĐ6ÍדTŪW)#Ųgŋŗfz.ÄaJ¸]h*o+”´ ž7à ŽĄZß-ī<>01Info-ZIPqdos " ,˙˙€˙ Exit Delay˙˙˙˙Directory TyJ€gp`p`RrЁgr gS€gZ€gV€g #Ã^Ō&‡`ū† <0Ā„ŧg@ŧ g8Đŧg8MųBžHx2Hm˙ŽN–Hx2/Hm˙ŽHm˙ÁNšFJ€Oīl `ū6Mų8ô`ÎMų9`Æ/Hm˙ÁNšKôPO|p#Ā„f&`VB§Hm˙ÁN”&POmHp0Ā„r0˛€f/NšB*&ŧ`ũâ <€Ā„g"/NšB*pĀ„g.Hm˙ÁNš:2&pˆ€XOXOJƒl>pĀ„gpĀ„f&ŧ`ũœ&ŧ `ũ’Hx`HxHm˙ÁN”&POl#Ã^Ō`Î <Ā„gHxB§/-˙‚NšC%C†5m˙Œ -˙‚`ũH o /"HJfü° f NuŗČfôpNuNV˙ø/Cî˙øv np NCJ€fp&N^Nu°ŧ˙˙˙˙gđp`î 97~gNuHį`€pNA#Č7~ LßNuNU˙ü//-NšMđXOR€/NšMŽ&pe˙˙˙ ˙˙˙˙ ^ŲbŲ^ŲZYčUnknown error 00000000000ęV@Tę(J+âTZų8J+âTŽVJÜ@+â˙˙˙˙3)˙˙˙į˙Ũ˙Ã˙ą˙Ÿ˙˙ƒ˙q˙a˙O˙C˙-˙˙ūũūîūŪūĪūžūĒū–ū…ūvūgūOūBū,ūūūũō/-Nš.ˆN]NuNU˙ôHį0(-Gų"˜J9""g(B§Hy""Nš-8r˙˛€POf Hx˙ųNš(ēXOpˆ€` S1|zEų"@JgD >f &<RJ`&<‘ &fzRJ// Nš-8r˙˛€POf Hx˙ųNš(ēXOpˆ€` S1|2Eų"^Jg@ >f RJ&<`&<‘ &fRJ// Nš-8r˙˛€POf Hx˙ųNš(ēXOpˆ€J…g"Hx0p0Г/p`Г/NšJ„ Sh 2pˆ€ Lí 8˙āN]NuNU˙ü/-NšDr+@˙üfp˙N]Nu m˙ü (`ōNU˙ü/-NšDr+@˙üXOfp˙N]Nu/- m˙ü/(Nš- `čHį8 /(/N@/Nš-lXJ€k$(@¸ŧ˙˙˙˙fpNA(` "$pNAJ€f)Dp|ß˙LßNuNU˙đHį8$m &mIų,î JRJB€&p\°ƒfÔ JRJB€&/Hy˙f fō`˙\XO~Jš^Ög`pŪ€ å€ @Ņų^ÖJfėaR*/NšMđR€&@ ЋR€//9^ÚNšLv&POg˙#Ã^Ú/ CŅÅHPNšKô EŅËB08/NšL`ūčNU˙ü/ $y^ÚJš^Úg`/ NšMđR€ÕĀXOJfî J‘ų^Ú $m˙øN]Nu o"o`"o o / / ŗČgpcrŅĀĶĀ24 „ABfR°ŧe&"‚ü,iHį>p,` ‘ĀLĐ|üHá?>QÉ˙ôHA0Lß|ø2æˆ`# # QČ˙úŧdđĀŧf` QČ˙üŧdō Nu24 „ABfR°ŧe&"‚ü,iHį>p,` LØ|üHŅ|üĶĀQÉ˙ôHA0Lß|ø2æˆ`"Ø"ØQČ˙úŧdđĀŧgĸ`ØQČ˙üŧdō` o /°f NuJfôpNuNU˙øHį (-/NšMđ&Jš^ÖXOg:J„g6$y^Ö`*///3žN”J€POmDxz` FŅü3žB€"įĐ( JRJB€&R…p°…ojp °„od/Hy3žN”,POlÄ`Rpx°ƒfR JRJB€&xz` FŅü3žB€"éĐ( JRJB€&R…p°…op°„o/Hy3§N”,POlÄSJÄ`/Hy\æN”(POm DŅü\ŪĐ`ÃJf˙B Líx˙ÔN]Nu o"opr$/ S‚ką gø !NuNUJš"g y"NJš"|g y"|N/-Nš-ĖN]NuNU˙øHį $m m R­ B€& y^d08Ā<WgJ­g0//-NšKvJ€POgü\`J­g//-NšKvJ€POgÃ`Pü\/Hy\ŪNš,î+@˙øPOm m˙øŅü\æĐ`( ė€Đŧ0Āp?ƀ æ€Đŧ0ĀpƒĐŧ0Ā m Jf˙PB Lí˙đN]NuNU˙øHį NšMlJ€Oī f CŅŌ =f RŅÃRH `XJJ’fŌpLí˙ėN]Nu"o o ØfüNuNU˙ôHį0v&m`/ NšMđR€×ĀXORƒJfėpЃå€//9^ÖNšLv$@J€POf p˙Lí ˙čN]Nu#Ę^Ö&m`$Ë/ NšMđR€×ĀXOJfėB’ `ĐJ¯fNųMžJ¯f /oNųMŽ oYˆ Y€"/’€^øJgPnHį00`hHį00Cų^šY‰Gđ$I$)gPĶÂŗËfō˛‘bFg*“š^žĶGņĶĒ&‘““'ig“ĢLß /Nu“š^žĶ")fBĒ`âĶĒ`Ü//NšMŽXJ€g8"@$)˙ü o"(˙ü´d"Yä‰$HB`"ØQÉ˙üQĘ˙ø&//NšMžX Lß Nu o"o$/ prS‚k g°gōNuNU˙üJ­gpŅ­/-NšP +@˙üfpN]Nu m˙üXH `ōNU‚‚‚‚‚‚  ]c:Z>žFēDATA_USE˙˙ Ē˙˙˙˙P˜–Q0n   ø” ŦČ &   z ,   *402 D >   B @^   „  62. 2 $ B ` "  `      ,  öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö   $     0    F "  T"   0 " @                  (     (    "         ,         >  ">      N >  ">     6    B        $   "      Æ" ,öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö   ˆ2L2$(&6Dz Fh &*Ŧ&< & T^lZ¤Hh<š     ° .LpF¨ œ$dj F˛ Žh8 0 Ôxtd    ĸ$ž$$, @FD’4  *: . H $0&N 0^  0,^&       *      (8"  ,ļĻD&"xt&F$V6&l     * d$ "hŽH@"   öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö"" 2@"l ĖV 4V .:  žâ&". 4 (F6   z&HX  $t .\ 0 *N‚H&2 ( *&R 2*  ,$Œ(Ôx0 .b $  (" 6 &" (F*: 6 042""> $ē . ¨&: ‚&rF>\.  4  n .Ô\  &B"4       "   (>@ 6V"  Ė Z:H P   @ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööJ    "  <  €6Îp Œ,D2 (      &   2& " 4Z & ^* * ,& *&  22,& 0  $.6  .,X   `Ž< <:*B&: ""40", jD0’,–HŽbÔĒT 4 8 (  "0^:h,@xRv† V€$L>Œ*d6~  86D   ( , V  ((*HP$"HH`R  ,pf.npX &   &  töööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö6  2& 0 L $2€00 .$D$0 4,. & ^ B8$ (n&ŽFd& hJB2V ŪDr>f4" 2 h,nô X€rôˆÂ<ŠŒ^ö< >8> J   $R((** * B8DBl,2"*.   d H &j(.,.Jh 4@ " .$<$JB   D  H.$8"&F>2  : 6 "ō>`$V$´ ˜PD$.8 &  `¨(4&  4V, *:F@H0&8.   * ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööļ 0 D4Ę(’„.   <L\xFXTcc¸vHäŖĒl4qpop3_rcHæzōl5Ā˙words@Š˙q_pop3l7˙lynxlz€˙ll{ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööũØũÆũŗũšũ†(t $}ļ˙con%Î˙˙˙˙˙˙˙˙˙˙˙˙0123456789abcdef0123456789ABCDEFtč\č\ē0000 (LIBM_A library needed to print Floating Point numbers),ę,č ntfvrab4N@€@Đ Â˙˙˙ŧ˙˙PROG_USESPL_USE˙˙ ((((( H„„„„„„„„„„öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö