Allow editing selected bits of the GUSI preferences (creator, type and

delayed-sioux-window flag).
This commit is contained in:
Jack Jansen 1996-09-06 22:25:34 +00:00
parent ca3cddd4a2
commit 6c4e987443
2 changed files with 157 additions and 69 deletions

View File

@ -28,19 +28,32 @@ OPTIONS_ITEM = 7
# The options dialog. There is a correspondence between # The options dialog. There is a correspondence between
# the dialog item numbers and the option. # the dialog item numbers and the option.
OPT_DIALOG_ID = 513 OPT_DIALOG_ID = 513
# 1 thru 7 are the options # 1 thru 9 are the options
OD_OK_ITEM = 8 # The GUSI creator/type and delay-console
OD_CANCEL_ITEM = 9 OD_CREATOR_ITEM = 10
OD_TYPE_ITEM = 11
OD_DELAYCONSOLE_ITEM = 12
OD_OK_ITEM = 13
OD_CANCEL_ITEM = 14
# Resource IDs in the preferences file # Resource IDs in the preferences file
PATH_STRINGS_ID = 128 PATH_STRINGS_ID = 128
DIRECTORY_ID = 128 DIRECTORY_ID = 128
OPTIONS_ID = 128 OPTIONS_ID = 128
GUSI_ID = 10240
# Override IDs (in the applet) # Override IDs (in the applet)
OVERRIDE_PATH_STRINGS_ID = 129 OVERRIDE_PATH_STRINGS_ID = 129
OVERRIDE_DIRECTORY_ID = 129 OVERRIDE_DIRECTORY_ID = 129
OVERRIDE_OPTIONS_ID = 129 OVERRIDE_OPTIONS_ID = 129
OVERRIDE_GUSI_ID = 10240
# Things we know about the GUSI resource. Note the code knows these too.
GUSIPOS_TYPE=0
GUSIPOS_CREATOR=4
GUSIPOS_SKIP=8
GUSIPOS_FLAGS=9
GUSIFLAGS_DELAY=0x04 # Mask
READ = 1 READ = 1
WRITE = 2 WRITE = 2
@ -80,21 +93,38 @@ def message(str = "Hello, world!", id = MESSAGE_ID):
n = ModalDialog(None) n = ModalDialog(None)
if n == 1: break if n == 1: break
def optinteract(options): def optinteract((options, creator, type, delaycons)):
"""Let the user interact with the options dialog""" """Let the user interact with the options dialog"""
old_options = options[:] old_options = (options[:], creator, type, delaycons)
d = GetNewDialog(OPT_DIALOG_ID, -1) d = GetNewDialog(OPT_DIALOG_ID, -1)
tp, h, rect = d.GetDialogItem(OD_CREATOR_ITEM)
SetDialogItemText(h, creator)
tp, h, rect = d.GetDialogItem(OD_TYPE_ITEM)
SetDialogItemText(h, type)
d.SetDialogDefaultItem(OD_OK_ITEM) d.SetDialogDefaultItem(OD_OK_ITEM)
d.SetDialogCancelItem(OD_CANCEL_ITEM) d.SetDialogCancelItem(OD_CANCEL_ITEM)
while 1: while 1:
for i in range(len(options)): for i in range(len(options)):
tp, h, rect = d.GetDialogItem(i+1) tp, h, rect = d.GetDialogItem(i+1)
h.as_Control().SetControlValue(options[i]) h.as_Control().SetControlValue(options[i])
tp, h, rect = d.GetDialogItem(OD_DELAYCONSOLE_ITEM)
h.as_Control().SetControlValue(delaycons)
n = ModalDialog(None) n = ModalDialog(None)
if n == OD_OK_ITEM: if n == OD_OK_ITEM:
return options tp, h, rect = d.GetDialogItem(OD_CREATOR_ITEM)
ncreator = GetDialogItemText(h)
tp, h, rect = d.GetDialogItem(OD_TYPE_ITEM)
ntype = GetDialogItemText(h)
if len(ncreator) == 4 and len(ntype) == 4:
return options, ncreator, ntype, delaycons
else:
sys.stderr.write('\007')
elif n == OD_CANCEL_ITEM: elif n == OD_CANCEL_ITEM:
return old_options return old_options
elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM):
pass
elif n == OD_DELAYCONSOLE_ITEM:
delaycons = (not delaycons)
elif 1 <= n <= len(options): elif 1 <= n <= len(options):
options[n-1] = (not options[n-1]) options[n-1] = (not options[n-1])
@ -160,6 +190,28 @@ def getoptions(id):
return [0]*7, None return [0]*7, None
return map(lambda x: ord(x), opr.data), opr return map(lambda x: ord(x), opr.data), opr
def getgusioptions(id):
try:
opr = GetResource('GU\267I', id)
except (MacOS.Error, Res.Error):
return '????', '????', 0, None
data = opr.data
type = data[GUSIPOS_TYPE:GUSIPOS_TYPE+4]
creator = data[GUSIPOS_CREATOR:GUSIPOS_CREATOR+4]
flags = ord(data[GUSIPOS_FLAGS])
delay = (not not (flags & GUSIFLAGS_DELAY))
return creator, type, delay, opr
def setgusioptions(opr, creator, type, delay):
data = opr.data
flags = ord(data[GUSIPOS_FLAGS])
if delay:
flags = flags | GUSIFLAGS_DELAY
else:
flags = flags & ~GUSIFLAGS_DELAY
data = type + creator + data[GUSIPOS_SKIP] + chr(flags) + data[GUSIPOS_FLAGS+1:]
return data
def openpreffile(rw): def openpreffile(rw):
# Find the preferences folder and our prefs file, create if needed. # Find the preferences folder and our prefs file, create if needed.
vrefnum, dirid = macfs.FindFolder(kOnSystemDisk, 'pref', 0) vrefnum, dirid = macfs.FindFolder(kOnSystemDisk, 'pref', 0)
@ -199,14 +251,18 @@ def edit_preferences():
options, opr = getoptions(OPTIONS_ID) options, opr = getoptions(OPTIONS_ID)
saved_options = options[:] saved_options = options[:]
creator, type, delaycons, gusi_opr = getgusioptions(GUSI_ID)
saved_gusi_options = creator, type, delaycons
# Let the user play away # Let the user play away
result = interact(l, fss, options, 'System-wide preferences') result = interact(l, fss, (options, creator, type, delaycons),
'System-wide preferences')
# See what we have to update, and how # See what we have to update, and how
if result == None: if result == None:
sys.exit(0) sys.exit(0)
pathlist, nfss, options = result pathlist, nfss, (options, creator, type, delaycons) = result
if nfss != fss: if nfss != fss:
fss_changed = 1 fss_changed = 1
@ -239,6 +295,16 @@ def edit_preferences():
opr = Resource(newdata) opr = Resource(newdata)
opr.AddResource('Popt', OPTIONS_ID, '') opr.AddResource('Popt', OPTIONS_ID, '')
if (creator, type, delaycons) != saved_gusi_options:
newdata = setgusioptions(gusi_opr, creator, type, delaycons)
if gusi_opr.HomeResFile() == preff_handle:
gusi_opr.data = newdata
gusi_opr.ChangedResource()
else:
print 'Created new GUSI option'
ngusi_opr = Resource(gusi_opr.data)
ngusi_opr.AddResource('GU\267I', GUSI_ID, '')
CloseResFile(preff_handle) CloseResFile(preff_handle)
def edit_applet(name): def edit_applet(name):
@ -275,12 +341,21 @@ def edit_applet(name):
options, dummy = getoptions(OPTIONS_ID) options, dummy = getoptions(OPTIONS_ID)
saved_options = options[:] saved_options = options[:]
creator, type, delaycons, gusi_opr = getgusioptions(OVERRIDE_GUSI_ID)
if not opr:
if notfound:
notfound = notfound + ', GUSI options'
else:
notfound = 'GUSI options'
creator, type, delaycons, dummy = getgusioptions(GUSI_ID)
saved_gusi_options = creator, type, delaycons
dummy = dummy2 = None # Discard them. dummy = dummy2 = None # Discard them.
if notfound: if notfound:
message('Warning: initial %s taken from system-wide defaults'%notfound) message('Warning: initial %s taken from system-wide defaults'%notfound)
# Let the user play away # Let the user play away
result = interact(l, fss, options, name) result = interact(l, fss, (options, creator, type, delaycons), name)
# See what we have to update, and how # See what we have to update, and how
if result == None: if result == None:
@ -319,6 +394,15 @@ def edit_applet(name):
opr = Resource(newdata) opr = Resource(newdata)
opr.AddResource('Popt', OVERRIDE_OPTIONS_ID, '') opr.AddResource('Popt', OVERRIDE_OPTIONS_ID, '')
if (creator, type, delaycons) != saved_gusi_options:
newdata = setgusioptions(gusi_opr, creator, type, delaycons)
if gusi_opr.HomeResFile == app_handle:
gusi_opr.data = newdata
gusi_opr.ChangedResource()
else:
gusi_opr = Resource(gusi_opr.data)
gusi_opr.AddResource('GU\267I', OVERRIDE_GUSI_ID, '')
CloseResFile(app_handle) CloseResFile(app_handle)
def main(): def main():
@ -335,5 +419,4 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
print # Stupid, to init toolboxes...
main() main()

View File

@ -1,60 +1,65 @@
(This file must be converted with BinHex 4.0) (This file must be converted with BinHex 4.0)
:&%9NDA43HA4SEfj3FQ9QFbjbFh*M!(*cFQ058d9%!3#3"`iJll%!N!3"!!!!$0m :&%9NDA43HA4SEfj3FQ9QFbjbFh*M!(*cFQ058d9%!3#3"`m+@DJ!N!3"!!!!$FN
!!![I!!!"36B8)&3JD!!8)&"p%E"S%3!k!@FQ%Lm-6VS#$!`k!&Tj&%9NDA43HA4 !!!c*!!!"36B8)&3JD!!8)&"p%E"S%3!k!@FQ%Lm-6VS#$!`k!&Tj&%9NDA43HA4
SEfj3FQ9QFbjbFh*MF`)!!!"bFh*M8P-!!(*cFQ058d9%!3!!0!#!!*!5VCdLr`# SEfj3FQ9QFbjbFh*MC3)!!!"bFh*M8P-!!(*cFQ058d9%!3!!!!%!N"(8'UiQIa%
3"JiJra(!U'N"(8!4rr-6F!!3,[rc[G)4CK"40Vj9D`%"3N5pSEj9D`%"-&%b!@F !N!B2#[m4`+KT!4e!%Irc%h!!%#lrmlh5%@B386Dq9@X"!8*%[D'q9@X"!6"4-J&
H4"8-!!!FC4*`!"!Z3a8-!!!IBJC`!@!!!3%#,&T8,5j%[3%!'c`"CM!R96iD5S! R(N39$!!!('85F!!3,N-9$!!!(f)'F!&J!!%"!LaD9#dZ4,d"!"Xm!@B`*e8q'NU
J8`)S!,m!,L)!l3N#!3"!JbME0"1Tebm-6VS"#8TRD`%!TPG$1J!!!3!!!3!!!!+ !)&-#+!#r!#iL!1d*!J%!3)-Sfc36UGF[$%kk!3P+CfX"!+CA3cS!!!%!!!%!!!!
!!!!%3!!!##!!!"!3!!!KL!!!3B3!!)2#!!%$`3!#"rL!"!H%3!J%!L!3#1%3)"- #J!!!"%!!!!JJ!!!3%!!!)BJ!!%'%!!#$`J!"!m%!!JIiJ!3(K%!)"!)J%!MK%#!
JL%!H)(b!!q!k3!`!15!6!$S3%1!m#!`H1!3!!IJ#$!!i!4)!3!#5q)!!6!%!!#! 6))K!(L"mJ!2J1N!-!$NJ%`!k%"$J2!J-(MJ%!!(i!J`!1!%5!%!!N[L!!%`"!!!
#!!!3"!!!#!J!!!33!!!#)!!!!8!!!!#!!!!"!!!!!i!!!!I!!!!2i!!!(r!!!$r J!J!!%!3!!!J)!!!%%!!!!L!!!!&!!!!!J!!!!3!!!!1!!!!(`!!!$q!!!"r`!!!
i!!"rr!!!rri!!Irr!!2rri!(rrr!$rrri"rrrr!rrrriIrrrr2rrrrjrrrrr2rr rq!!!Ir`!!2rq!!(rr`!$rrq!"rrr`!rrrq!Irrr`2rrrq(rrrrcrrrrqIrrrrcr
rrKrrrr`2rrri"rrrq!2rrrJ"rrr!!2rrJ!"rr`!!2ri!!"rm!!!2q!!!"r!!!!2 rrriIrrrm$rrrq!IrrrJ$rrri!Irr`!$rri!!Irm!!$rq!!!Ir!!!$rJ!!!I`!!!
J!!!"`!!!!)!!N!3+81!!(S5!!!HK)!!!!!G"8&"-!*!'3!%!!S!%3!YJ%j!!)JK $i!!!!F!!!!#!!*!%#P$J!"k%J!!(S5!!!!!(39"36!#3"N!"!!+!"%!,B"13!#)
&*),M33-J`a-r#`X%%!)J!8!!J!%!!i!(`!rJ(r!rq(rmrrprrcrr(rm2q`I`!q! )455#id%$)--62`X,""!#)!&!!)!"!!1!"m!2i"r`2rKrr2rrIrmrrarr$rX(m!2
"`!#!!!!%!*!3r`#3([m!r`#3(2m!!!$r!*!Dr`!!pI8!r`#3'2m!!2@3"!$r!*! J!F!!J!!!"!#3%2m!N"lr!2m!N"cr!!!!r`#3'[m!!2Ae!2m!N"Mr!!$eN!3!r`#
@r`!!pI@`X2Ae!2m!N"6r!!$epI@`X2Aep3$r!*!5r`!!pIAeX*!%pIAe!2m!N"$ 3&[m!!2AeX,$ep3$r!*!8r`!!pIAeX,$epI8!r`#3%[m!!2AepE#3"2Aep3$r!*!
r!!$eN!5`N!6eN!3!r`#3$[m!!2@3",#3"2q3"2Ae!2m!N!cr!!$eN!@`rrrr#*! 3r`!!pC!%X*!%pC!%!2m!N!lr!!$eN!5`N!6rN!6ep3$r!*!-r`!!pC!&X2rrr`L
%rrAe!2m!N!Vr!!$eN!Er-`L3"rrep3$r!*!)r`!!pC!'r`J)-rrrr`L3"2rep3$ 3"2rep3$r!*!+r`!!pC!'rc-)N!IrpI8!r`#3#2m!!2@3"[m)#$2rrrm)N!6rpI8
r!*!'r`!!pC!'r`Jcrrrhprm)N!ArpI8!r`#3"2m!!2@3"rq3"2IepImc#*!&rj! !r`#3"[m!!2@3"[m)-rrrprIr#*!&rrAe!2m!N!6r!!$eN!IrN!6hpIAr-`L3"Iq
&!!$r!!$eN![rN!8"#*!&-rrrrrIr!!$rpr@3#Irr-`L3#M2rrrrhprm!!2rhpC! 3"3!!r`!!pC!,rj!&!3L3"62rrrrhr`!!rrIeN!Rrrc-)N!ScrrrrprIr!!$rpr@
(r`Ahrrmc-c-)N!Bcrrrrprm!N!6rpr@3"[m&"IIhrrrr-j!%#!Jcrj!%!*!'rrI 3"rm&prrr-c-c#*!'-rrrrrIr!*!%rrIeN!Er"3Ahprrrrc13"!J)-rq3"!#3"[r
eN!ErrrAeprIhrj!%-c-crrrr!*!)rrIeN!chN!6rN!B!N!Rrpr@3"2rrpC!)pj! hpC!'rrrepIIhprq3"$-c-rrrr`#3#2rhpC!-pj!%rj!'!*!*rrIeN!6rrr@3#2H
%rrrr!*!+rrIepIrepIreN!Mhprm!N!lrprArpIArpIq3"IAhprm!N"$rprArrr@ 3"2rrr`#3#[rhpIArpIArpC!)prIr!*!1rrIerrAerrArN!AeprIr!*!3rrIerrr
3"rIhr`#3%[rhpC!)prIr!*!8rrIeN!Ehprm!N"Erpr@3"2Ihr`#3'2rhpIAhprm eN!Ihprm!N",rpr@3#2Ihr`#3&2rhpC!'prIr!*!@rrIeN!6hprm!N"MrprAeprI
!N"VrprIhr`#3(2rhr`#3([m!N"%"!*!)r`#3$[rer`#3$2repIAr!*!+rr@`X2A r!*!DrrIhprm!N"crprm!N"lr!*!4!3#3#2m!N!lrpIm!N!crpIAer`#3#[reX,$
rr`#3#2repE$rr`J)r`#3"[repIAr#*!&r`#3"2repIAr#2m)#2m)#2m!!2reN!A errm!N!MrpI@`rrm)#2m!N!ErpIAer`L3"Im!N!6rpIAer`Mr#!Mr#!Mr!!$rpC!
rprrrr`J)-rrr!2reN!Er-c-)-c2rr`!!rr@3"Irr-j!%rrm!!!$rpIArrrAerj! &rrIrrrm)#$2rr`$rpC!'rc-c#$-crrm!!2reN!Arrc13"2rr!!!!rrAerrrepIq
'!*!%rrArrrAepIIr!2rr!*!&rr@3"2Ir!*!+rrAeprm!N!crprm!N!lr!*!+J!! 3"J#3"2rerrrepIAhr`$rr`#3"IreN!6hr`#3#[repIIr!*!-rrIr!*!1r`#3#S!
!!!m!N!I`m!#3"3m!$`#3"I"9$r!!!!!2!&r`$`!!!2!!m!!!m!!2!!r2!2!2!2! !!!!2!*!(m2!!N!82!!m!N!A`93r`!!!!$`"Im!m!!!$`!2!!!2!!$`!2c`$`$`$
!!2crm!hr$`!!!2h3hIm!m!!!rphGr`!2!2m!rrrr!!$`r`!-m2m!!!m!!-m!N!A `!!$mrr!0r`m!!!$pd0hr!2!!!2rGhIm!$`$r!2rrr`!!m2m!$2$r!!!2!!$2!*!
`$2!!N!82c`#3"r!!N!8#!*!)$`#3$r$`!*!0$`!2!*!0m!!!m!#3#`m!!!!2!*! &m!c`!*!&$mm!N!I`!*!&!J#3#!m!N!r`m!#3$3m!$`#3$I!!!2!!N!X2!!!!$`#
,m!!&8!$`!*!*$`!!"9!!$`#3#I!!!&99!!$`!*!($`!!!&99!!!2!*!(m!!!"99 3#r!!"9!!m!#3#3m!!!93!!m!N!R`!!"993!!m!#3"`m!!!"993!!$`#3"r!!!!9
Irr!!m!#3"3m!!!!&rr!!$`!2!*!&m!!!!!r3!!!!m!$`!!!!$`#3"2c0rr!!$`! 9Arr`!2!!N!82!!!!"Ir`!!m!$`#3"I!!!!!2d!!!!2!!m!!!!!m!N!6mcIr`!!m
2!!!!m!!!!!r0rmc`!!$`!2!!$`#3"!rrr!$`!!!2rrm!m!#3"[rrm!!!$Irmm!r !$`!!!2!!!!!2cIr-m!!!m!$`!!m!N!32rr`!m!!!$rrr!2!!N!Errr!!!!hrr2!
!!*!%rp!!N!30rrc2!2`!!!!2(2rGd!!!$Irmm!!2`!!!$a(-rrhGd!hrr`!!!2` 2`!#3"2r3!*!%$Irmc`$m!!!!$acrhG!!!!hrr2!!$m!!!!m4c2rphG!0rrm!!!$
!!!$r!-c2rrhGrr!!!!!2`!#3"3c-crrrm!#3"2`!!2m!N!6-c2r`!*!%$m!2!2! m!!!!r`$-crrphIr`!!!!$m!!N!8-c-rrrr!!N!6m!!$r!*!%c-crm!#3"!r!$`$
!!!!-c`#3"r`2!2$rrr$-m!#3"`r!r`!!!!c2!*!*r!#3"-c`!*!*$m!!!!c2!*! `!!!!$-m!N!Im$`$`rrr`c2!!N!F2`2m!!!!-c`#3#I`!N!6-m!#3#3r!!!!-c`#
,r!!!c2!!N!X2`!c2!*!0r-c`!*!0$mm!N!r`!*!+&3!L!'J"J!'I!!%"!!%!N!8 3#r`!!-c`!*!,$m!-c`#3$Ic-m!#3$3r2!*!2m!#3#K8!)J"S!B!"R`!"!3!"!*!
#!*!&!3#3"!FUN!3!!3#3"#43HA3`!!!!!8C548B!!3!!!)!!!3#"5801)`!"!!! &!J#3"3%!N!3(+T!%!!%!N!3N8(Pd-!!!!!&'8N9'!!%!!!#!!!%!J8P$6L-!!3!
",!!"!*!%!3S!"J#3"9)!&3$c!5F3#89NDA3J9'9iG)F!N!3"1`$`!8m",!3#6dX !!5`!!3#3"!%+!!B!N!95!"8!m`%R%!P&C'Pd)&4PH(5(!*!%!6X!m!&2!5`%!Np
!N!3"1`!8!8m!6J3'3f&ZBf9X!*!&qJ!8!3`"+`3I8f9XC@0d)#3S8&P85%p1+5" ,!*!%!6X!&!&2!%i%"N0KEQ0PE!#3"IS!&!%-!5X%(e0PE'9MG#!N+&"C9%K26LN
SEfeP)'C[E'4PFLiZ,QB!N!80!"F!(J%Q#!P&C'Pd)&4PH(3Z!*!&+J!9!%i"*iK JD'pYC5"QEfaNCA)Z,LjQ!*!&$3!A!"i"*JJ*4@4TG#"8CAKd,J#3"5S!&3"1!5H
24@jdCA)JFhPc,R"KG'JJBfpYF'pZC@jdFb`JEfjP)("PFL"XD@jP$5K9Ff8J*#K )6d9ZG'9b)(0jFbj`BA4S)'0[EA"[EQ9ZG(-X)'pZC5"`CA)JE'PZC3dS9A0P)#3
3@94)6diT)'C[FL"`HA4SEfiJD'pYC5"QEfaNCA)T1J#3"3%6!"3"*3%V""T%C@C S8&P85%p1+5"QEh)JF(PdD'pZ)'K[E@8JCQpXC'9b+6S!N!8"%`!8!58"+`3D4'9
KG@ad)(0dBA*dGA!JEh"dD@pZFbiZ,J!!!A)!#J#3"4i!#3!`!3i&)d9ZG'9b)'P QBA9XG#"cG'&bG(9`)'p`G'P[ER-Z,Li!!!!9!#`!9J&Q!@N!!3%!!3#3"3)"!!!
ZG'9bB@0dDACP)'e[C'8JB@CdCA)JFf0bDA"d)`#3"6-!#3"&!3i&&e4bB@0P)'P !!P`!%3#3"4i!#3!`!3i&)d9ZG'9b)'PZG'9bB@0dDACP)'e[C'8JB@CdCA)JFf0
YF'pbG#"cG'&dC@ePER4cJJ#3"8N!#3"E!3d&(&0eF("bCA0c)'9iF(*PFh0TEfi bDA"d)`#3"6-!#3"&!3i&&e4bB@0P)'PYF'pbG#"cG'&dC@ePER4cJJ#3"8N!#3"
JF(*TER4TEQF!N!9I!!N!F3%-"4K9EQ*eCQCPFQ9N)(0dC'peG#pcG'4PFR)!N!9 E!3d&(&0eF("bCA0c)'9iF(*PFh0TEfiJF(*TER4TEQF!N!9I!!N!F3%-"4K9EQ*
e!!N!K`%,"40%C@*eCb"`BA*cCA)JEh9dF(9dC3#3"D!!(J#b!)`&#dj[FQeKE#" eCQCPFQ9N)(0dC'peG#pcG'4PFR)!N!9e!!N!K`%,"40%C@*eCb"`BA*cCA)JEh9
PH'PdF`#3"D!!S!#b!3S&#Q9bFQpb)'9iDA3!N!A$!08!e`%2"!*25`#3"F-!#J$ dF(9dC3#3"D!!(J#b!)`&#dj[FQeKE#"PH'PdF`#3"D!!S!#b!3S&#Q9bFQpb)'9
A!%F%"N0KEQ0PE!#3"3B!*J!A!1k)'P"jG'K[EL"TER4PFR"bCA4PFL"[F(4TEfj iDA3!N!AJ!!S!m3%,K4Y%DA0KBQaP)'&bCf-[BA*RGL"PEA9XBA4TEfi'!*!&p!!
c!*!&M!!+!*`"#iJD5f9PF#"cG'4TEb"hD@jNEhFJEh"PEL"[EMS!!!!9!%i!F!% +!3B"$)8L4'PcB@*XC5"TER4PFQ&MG'PfC5"[F(4TEfiYFf9dG'PZC`#3"EJ!S!$
f!B)!!3%!!3#3"3)"!!!!!3!!!!cI!!!,h`!!!8%!JZr8%Pi!!!!F!6)!#d*14%` )!1X3!*!'c!#J!0`!ka!!N!8"#!!+!4S"#`8K4'9XBANJBfpZFfpXC5"hD@jNEhF
!!!"L5801)`!!!'j659T&!!!!HNC548B!!3#'D@0c)`!!!*jTBf`i!!!!UQPMFcJ JG@jdD@`JEQ9PC'9N!*!&!4m!e3%c!3m%!Np,!*!%!4m!#J%c!%F%"N0KEQ0PE!#
!!!#fD@0c0!!!!-*TBf`d!!!!cN4-6dF!!3$D4%P86!!"!2*3HA3`!!!"#J#!rrm 3"3B!*J!A!1k)'P"jG'K[EL"TER4PFR"bCA4PFL"[F(4TEfjc!*!&M!!+!*`"#iJ
!!!ND!),XH!%Xrrm!N!@#l1crN!3!!!%%!),56!#!rrm!!!%5!),Xp!#"rrm!!!N D5f9PF#"cG'4TEb"hD@jNEhFJEh"PEL"[EMS!N!@i!!S!b3#AL"9%C@CKG@ad)'C
2!),X9!%Xrrm!!!%G!),X[!%Xrrm!!!&K!),Y#!%Xrrm!!!9P!),Vh!%Xrrm!!!C TE'8JBh*PBA4[FMTP!*!&c!!+!0d!PiJ54'9QBA9XG#"QD@aP)(4jF'8k!!!"!!!
T!),YA!%Xrrm!!!EY!),Y3!)!rrm!!!Ma!),YL!)"rrm!!!['!),Xr!)!rrm!!!P !$FN!!!c*!!!"33$4-536'J!!!"`"-J!,3Nj%6!!!!'**3diM!!!!EP0*@N8!!!"
#!),Yb!)"rrm!!!T3!),VT!#3"JN+!),Y`!j2GfjPFL"bCA0[GA*MCG,b: k4P*&4J!"!)CTBh-M!!!!RQPME$J!!!#UD@0c1!!!!,CTBh-d!!!!`QPME$3!!!$
14%a24`!"!0T%594-!!%!mP"jG$!!!!%+!)$rr`!!#4S!N!3",2rr!*!)rj!%!!!
""!#3"B$rr`!!!4)!N!@"rrm!!!N2!*!%!5crr`!!!4d!N!3",2rr!!!"B3#3"!%
Xrrm!!!9P!*!%!5crr`!!"QN!N!3",2rr!!!'l3#3"!)!rrm!!!Ma!*!%!J(rr`!
!#P!!d5kS!J$rr`!!#8)!d5rm!J(rr`!!#QN!d6!%!*!'#3S!N!316hGZCA)JFQ9
cEh9bBfA2XJ: