From 88958a0f71d36b4f4fab6b3717d946204de876eb Mon Sep 17 00:00:00 2001 From: AceVest Date: Tue, 14 Mar 2017 23:54:10 +0800 Subject: [PATCH] swift-Inheritance-Initialization --- .../Contents.swift | 96 ++++++++++ .../Contents.swift | 176 ++++++++++++++++++ .../AcePlay.playground/contents.xcplayground | 2 + .../UserInterfaceState.xcuserstate | Bin 21667 -> 23829 bytes 4 files changed, 274 insertions(+) create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift diff --git a/learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..dc1cf1d --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift @@ -0,0 +1,96 @@ +//: [Previous](@previous) + +import Foundation + +var str = "Hello, Inheritance" + +//: [Next](@next) + +class Vehicle { + var currentSpeed = 0.0 + var description: String { + return "traveling at \(currentSpeed) miles per hour" + } + + func makeNoise() { + // to do nothing + } +} + +let someVehicle = Vehicle() +print("Vehicle: \(someVehicle.description)") + +class Bicycle: Vehicle { + var hasBasket = false +} +let someBicycle = Bicycle() +someBicycle.hasBasket = true +someBicycle.currentSpeed = 13.5 +print("Bicycle: \(someBicycle.description)") + + +class Tandem: Bicycle { + var currentNumberOfPassengers = 0 +} + +let someTandem = Tandem() +someTandem.hasBasket = true +someTandem.currentSpeed = 19.9 +someTandem.currentNumberOfPassengers = 2 +print("Tandem: \(someTandem.description)") + +// 重写 +// 子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现。我们把这种行为叫重写 +// 如果要重写某个特性,你需要在重写定义的前面加上override关键字 +class Train: Vehicle { + override func makeNoise() { + print("Choo Choo") + } +} + +let someTrain = Train() +someTrain.makeNoise() + + +// 重写属性 +// 可以重写继承来的实例属性或类型属性,提供自己定制的 getter 和 setter,或添加属性观察器使重写的属性可以观察属性值什么时候发生改变 +// 可以将一个继承来的只读属性重写为一个读写属性 +// 不可以将一个继承来的读写属性重写为一个只读属性 + +// 如果在重写属性中提供了setter,那么你也一定要提供getter +// 如果不想在重写版本中的getter 里修改继承来的属性值 +// 可以直接通过super.someProperty来返回继承来的值,其中someProperty是要重写的属性的名字 + +class Car: Vehicle { + var gear = 1 + + override var description: String { + return super.description + " in gear \(gear)" + } +} + +let someCar = Car() +someCar.currentSpeed = 72.7 +someCar.gear = 3 +print("Car: \(someCar.description)") + +// 重写属性观察器 +// 可以通过重写属性为一个继承来的属性添加属性观察器 +class AutomaticCar: Car { + override var currentSpeed: Double { + didSet { + gear = Int(currentSpeed/20.0) + 1 + } + } +} +let someAutomaticCar = AutomaticCar() +someAutomaticCar.currentSpeed = 67.3 +print("AutomaticCar: \(someAutomaticCar.description)") + +// 防止重写 +// 以通过把方法,属性或下标标记为final来防止它们被重写,只需要在声明关键字前加上final修饰符即可 +// 例如:final var,final func,final class func,以及final subscript +// 在类扩展中的方法,属性或下标也可以在扩展的定义里标记为final的 +// 可以通过在关键字class前添加final修饰符来将整个类标记为不可被继承的,试图继承这样的类会导致编译报错 + + diff --git a/learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..a7ddf9f --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift @@ -0,0 +1,176 @@ +//: [Previous](@previous) + +import Foundation + +var str = "Hello, Initialization" + +//: [Next](@next) + +// 构造过程 + +// 可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值 +// 为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观察者 + +struct Fahrenheit { + var temperature: Double + init() { + temperature = 32.0 + } +} + +// 与下述定义方式等价 +// struct Fahrenheit { +// var temperature = 32.0 +// } + +var f = Fahrenheit() +print("The default temperature is \(f.temperature)° Fahrenheit") + + +// 构造参数 +struct Celsius { + var temperatureInCelsius: Double + init(fromFahrenheit fahrenheit: Double) { + temperatureInCelsius = (fahrenheit - 32.0) / 1.8 + } + + init(fromKelvin kelvin: Double) { + temperatureInCelsius = kelvin - 273.15 + } + + init(_ celsius: Double) { + temperatureInCelsius = celsius + } +} + +let bollingPointOfWather = Celsius(fromFahrenheit: 212.0) +let freezingPointOfWather = Celsius(fromKelvin: 273.15) + + +// 构造器并不像函数和方法那样在括号前有一个可辨别的名字 +// 因此在调用构造器时,主要通过构造器中的参数名和类型来确定应该被调用的构造器 +// 正因为参数如此重要,如果你在定义构造器时没有提供参数的外部名字,Swift会为构造器的每个参数自动生成一个跟内部名字相同的外部名 + +struct Color { + var red, green, blue: Double + + init(red: Double, green: Double, blue: Double) { + self.red = red + self.green = green + self.blue = blue + } + + init(white: Double) { + red = white + green = white + blue = white + } +} + +let magenta = Color(red: 1.0, green: 0.0, blue: 1.0) +let halfGray = Color(white: 0.5) + + +// 如果不通过外部参数名字传值,你是没法调用这个构造器的 +// 只要构造器定义了某个外部参数名,你就必须使用它,忽略它将导致编译错误 +// let green = Color(0.0, 1.0, 0.0) 这段代码会报编译时错误,需要外部名称 +let bodyTemperature = Celsius(37.2) + +// 常量属性的修改&可选属性类型 +class SureyQuestion { + let text: String + var response: String? + + init(text: String) { + // 可以在构造过程中的任意时间点给常量属性指定一个值 + // 一旦常量属性被赋值,它将永远不可更改 + // 对于类的实例来说,它的常量属性只能在定义它的类的构造过程中修改;不能在子类中修改 + self.text = text + } + + func ask() { + print(text) + } +} + + +let beetsQuestion = SureyQuestion(text: "How about beets?") +beetsQuestion.ask() +beetsQuestion.response = "I also like beets. (But not with cheese.)" + + +// 默认构造器 +// 如果结构体或类的所有属性都有默认值,同时没有自定义的构造器,那么 Swift 会给这些结构体或类提供一个默认构造器(default initializers) +class ShoppingListItem { + // name 默认为 nil + var name: String? + + // quantity 默认为 1 + var quantity = 1 + + // purchased 默认为 false + var purchased = false +} + +var someShoppingListItem = ShoppingListItem() + + +// 结构体的逐一成员构造器 +// 除了上面提到的默认构造器,如果结构体没有提供自定义的构造器,它们将自动获得一个逐一成员构造器,即使结构体的存储型属性没有默认值 +struct Size { + var width = 0.0 + var height = 0.0 +} + +let size0 = Size() // 默认构造器 +let size1 = Size(width: 2.3, height: 3.7) // 逐一构造器 + + +// 构造器代理 +// 构造器代理的实现规则和形式在值类型和类类型中有所不同 + +// 值类型(结构体和枚举类型)的构造器代理不支持继承,所以构造器代理的过程相对简单 +// 对于值类型,可以使用self.init在自定义的构造器中引用相同类型中的其它构造器。并且只能在构造器内部调用self.init +// 如果为某个值类型定义了一个自定义的构造器,将无法访问到默认构造器(如果是结构体,还将无法访问逐一成员构造器) +// 如果希望默认构造器、逐一成员构造器以及你自己的自定义构造器都能用来创建实例 +// 可以将自定义的构造器写到扩展(extension)中,而不是写在值类型的原始定义中 + +struct Point { + var x = 0.0, y = 0.0 +} + +struct Rect { + var origin = Point() + var size = Size() + + init() { } + + init(origin: Point, size: Size) { + self.origin = origin + self.size = size + } + + init(center: Point, size: Size) { + let originX = center.x - size.width / 2 + let originY = center.y - size.height / 2 + + self.init(origin: Point(x: originX, y: originY), size: size) + } + + var description: String { + return "LeftBottom(\(origin.x), \(origin.y)) RightTop(\(origin.x+size.width), \(origin.y+size.height))" + } +} + +let basicRect = Rect() +let originRect = Rect(origin: Point(x: 2.0, y: 2.0), size: Size(width: 100, height: 200)) +let centerRect = Rect(center: Point(x: 50, y: 50), size: Size(width: 50, height: 50)) + +print("BasicRect: \(basicRect.description)") +print("OriginRect: \(originRect.description)") +print("CenterRect: \(centerRect.description)") + + +// 类的继承和构造过程 + + diff --git a/learn/AcePlay/AcePlay.playground/contents.xcplayground b/learn/AcePlay/AcePlay.playground/contents.xcplayground index 7a38434..17e0832 100644 --- a/learn/AcePlay/AcePlay.playground/contents.xcplayground +++ b/learn/AcePlay/AcePlay.playground/contents.xcplayground @@ -11,5 +11,7 @@ + + \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index e07186e958dbf8c34d82a238656037c97603a052..ed698a8a9ea0ad1be45cd5768644ae5085823739 100644 GIT binary patch literal 23829 zcmd6Pd0f-=|M=_mzQ*kv80R>~F)lf_!7j$J!9ZbvBno)W0TXAq;Wktx^7Ym-HOo(B zWmzVOnwe$heOB6?W#*Y?nnxFD15MTfY1Rw#$E9c!;9XrKjvzx7!>R4;dL{qK9J|fm=tDRt;VzLd3byyqy0Gz$_ zbzdwR@PHfe2Ye6!;z0sP1W8~ZNCqh&6{LZ5paMfcIk*oD1r=Zz7!E2y6{rRyz)0W# zO<)R`3Z{W(Fdejj2S6)$5X=A%gW2Fw@Dx}Go(9i=XTkHJ9V`PKU?q43tOaj?O<*&4 z2kZuWz`Ni>a10y=Ux5?gYj6^r0^fks;3D`1Tmrv>%iuR~1^f=Kf?LeD zwicphGi>+uqN7(N`Y#OrVqJ|3^f zC*Wp$3O*fg!DrwIe+YjVpNr4KAIBHqPvHykMfh|0i}(_}9bbm8#9zi=#W&+y@U8eZ zd^`RQ{vQ55{sn#jKS&H9{0Tl0OoR~OLwm066c6-iSLNt zh$|#XQY4RbBLm4GGMEe@f2b#@C#k2Xh1Ap3N@_Lr zDz%n+gW5oCq_$Gqs9n@s)E??x>O<-y>JW99Izk<#zNC&($EokA@2MZC->56p@6=Tu z$)k8Yo*R$P3*ZIvf_O2!Se}R%$BXAB@Dh1RJULInQ}R^2TwXp;$1CBL^2&HahR0f( z8XCR;?!W_h0xvKC_*Iovq~338wvQ~UNbQP1m9e!AM!UTocmp4VA-o;Xz!wn=Bv6`x zj@9PLGUReaMv7KhC`rkXOA1r8N}Vc2nI|t0XXMFMVzJyn^NVx^RaV>m_C{l^NoTEX znq;y#T$lqv1c+M+f^A z5D$f-a+EQag>JUgS*I4-jFU_TI;u!lFvM18vYG0-u?{oVs53jPHm%KMG|(x%McqeN!yV=Zv!j{aR?*mCc2t^8Q#pX$ zz&H?nwABZM&SW>&TmA+DOA-g)Y_hX9Hq2O4Xl^i-8yyo2bfDI5H`^UXi-V)oUSe#v zHaS>DTg(o#vB5mu=rCI?sncp38;s5MHfximuF+U;a(9V!6sQMrtHEe628;y;Fb)_& z4X6cmzy!vlFcgj=P$UwfC=`uiP%ILmxYb|+FoReS3rayLumCG)1e1Xc#UmLCMWJXE z8imHAdFWBpj+UVe1MRCb)il-Dn{2&=6WA@>Qfr;bP~k9I>WsEJ15L9GyB=WW!K#7% zjAPJ1^DDXPg!{Xqsb-S3&NPzy%L$7P=nK1Rzrl&Kyju!R9GqJGi*yA#(|BW3gQM4{ z!mf|XS$uYf$>JDlYP6Z`CX2%WYV8z(7iqa;Bv8KV~^xI`%IqSI`)|bI51MT0vp$Gjk z@N#bgR)aOH#9l@6Ht-r!uo4q-%Iq@bTZ!Mr!8)*>1@Iug))Yf8qM9STfh$B zw+w6r+rV~|iPR`-8Q2L*!CNRBjY4%SpNW0YRXB_eQ-yJg*;4QPwVQCW$!?$n`tCI~ zm}(uSx|=^AWU@{&Ic&|GqTgeq-}@*B`M5~_2<&Hb&Bx#quorv^J_Gx}=O`CxkQU{k ze56AKE5R4w05}K^fkWU3IEo6a0@wnyZ2K<)TqdgNZf6GG~$sapl3kSrfR{3Z^+s7PcekF~Cu-wc$fc478xuIw{rI z*w|o7t#hRIjWjN%&ww9*-*RvkoCDv2@4)wHFe*aDNRLXEgC9XB_z8%>c~pwZ&=6FP z?qf9*Ty8T@GTNG5xQ3Z0nd}bZq(+v_+FFy{ZnZUQEfy>1kX7b7HYUd2^i)^+%Aa7g z8EYLT+fbvW-ZW;gxz40*XehGVn^?t)ZhFY2+P+W4Xm?I4QluX`5~DGVbNa%lmUKym zG+C%fm$bT#Xh~NpB*{W?>p^f0`~^J0b#Ma$2q6Y>NEm3^#Yu^^))_;__DGZq=(Nr{ z$!P8+Xf`8T>P*vyjCVcT^9UM)hM{q&0*yA%Y1OsXI#X(qt}EwsX_*6;+MVqy9JZ!f zN0ZIuv`xqZ(st+u-O+F~0{MIay`VSn1c%@NNRRBnGu%l5szg<&dTigsLVG&h9r9s- zfevGobk`WGVUS>}ADi<;HrGJ*_X}{W5AACx|#0Z=n5kmBU=>a;drR9Qu;&D3CIt49P-EgH+wErasmWfjARmb60|8~r_iCsYDy8&n|^@-ff>&eBlq ztPI6cak4NyBfYh?D=fflm6q@tD5c**iD~4)h=??vH6s!etE8%E329AXWI1U~R?a6GJs_0S9_qA6%9nt^7bnP@h8}44K<_bsHFq8zz2W`K8PMbt*9J5_z&U!e>A4=@ZaX}5;crqI~a*rsc5Zgk;`w6 z;&b3!XB3~09zw_&bZ2p<{y3}S1&HYmpRnE;y=L}~Uj1U%A~trRhq)+K&^JnH|6PI84qi zhK4Q{55Xhs_QUA;Hh2^*c5eUsmI8hS=C#8U@N4t}da1jmfZxEgy-R#}4t|SXL`zUw zx9DRuv&GJ8#)Y#Jp6~O>1$YrHMQtdpM@candwHK{euGyy6F30>fPcbkz!UxjW8e)8 z7-&D6)#~81%63a-Y|BRn)tfBlCOemi*rA1KnuA*jZsh8|eoN?81W*Th{Sby>IPk;> zjKnAy1OLL@;Q`D8hE>;2FgMiMOqR+yzVP2Rw8w4;Ktwt-HLEsgqhA}@NZO8mEK3a)h?hXW89mSPRU6lyLu(K~uOYypPhuVQ2I}Y*bc5v9dwvYi`U_Kyw2Mu4~uY&cel zRbka=Gunc-qHP`6NNf}~8XJSQqy6YR^gZi~!agy#d)|}UU1;BWOP}v=Jh)MUndrSX>>>0%%5b$2t_^dr`5=yac*t6YqEJB~4G#Ajt*b7_;G|>E> zqE{*xCky528Qs|uTZ*-J16YPW>jAI=d%2tJRcK##I>lbaUSk*5pwHW!Bxc;yhPfzs z6Wa;mUcuI58?cSoCTugd1>1^k!?t5P&==?cI*1OT!{`V)ioQh0(D7HWUD#XL+t@qU zZfp*LSfgrl7yXIc0X2BZ?W1; z`9{0RK(pO<_d-8HU5%jKIjPZ`n)hP|fhP>Z4vj9Wa1JH%txXmOI>ANQBiK=PWaFB! zIeDxwIhJ8xV#nBs+J9+eS%qsCEv3PT?oRgrb`p4E2eDJwH`r--03H}wR^g(ix~!ta zWT|&dpncJ44)a;;TrW`V*tbC0>+k*8_rMeT0sFDKtb!9HI*Y#D4?MA-u%EH>Bg!gL z?at00oh#?yUBrGd&;zTh+BnS!_3%q>;?{Sh+{a86X*x@Hu@2DqMy*u=sdcBF0KM1 zoQJ#N?m&cl;$A?6`=E043%Z0ZqjK~cx`N8l@2uyr$0h|fo7Hx6#g@@x2qq`Nw8YUi&M*`*WvWg0m!tg?~*>Af~UDsKQ2apbftbg9n4#XXW%kij{Zc~83?=cKd!>FdM9-}8_z-4&|hqF zU{7?qy^xz=H*$k<7rK1Bu+PJT@WJQ?0|83wd-xNhS#Yv9 z3VaN7ec#UhuI7)o(SIN8vpDRufv&rU*z?)*_rEc{KB(t#sQnDI`5vM!ury6F*|;;e zex~0C|6?3}zJZ=_5AhdSCYWqyhtX1Nx;^?QIrM=Bdi*^^U)W@E9^L%|@6U3`gAH`; zJw%>ow3}=H0rLwS=FodY&<%Y> zes`$Z%OOsUJ2QBHljB0=Dlo4Ncq6PQ6|TY8fw&I*HT-paE&c`rqZk;?z!(O`cHnQ~ z>+ucvMh1!)IFNxy80hR?|K-H+zdB4X&~be_*}fU3*U7^_Z0s3ey3*Yad>4po!*?<; zt_^>Sfe9$1cNl(`Q%}5suDB=aan7hL4tuJ7s(HNYUJCvJzLy49sDm z#+f|x7^q`lp)-XJc4pLK29_|ejDh709O}%g!&pi#;lJXS@!#+(`0w~t{15z3{2Klj zejUF-00I&iffEEl5){EB+z5BVgYYE02yX^fGSI-lS_alLu#tfd22Nw(bcU70Oa?y6 zz{eT*BmW&L=+ zE5UbNlq+noPVI-icUeIU>3EBVqnV!hyQ0Mk5Z12hf?zpfebR2%|y=MKN zYkH!HL!EzbQJ0z=6RdTAQ{41cco~Pfz(8B?Ndo8k=$rgbBo#|<>w6U(6@&T-;O;E{ z4hl@7nnPXGFYetPYVHQ|KgYc>9D4n|<@}CRU&Em;?H6wD%HjU2a8u8bFy!9G+?%ZL zwwBkxQE*?smhP^Ea0e|NF`2_$ac}FaJ8bEQDIE6U{gi)KX8%u;cOByp&BP24x15+x zv=9#vt;B;2tYTm_14l4$Bm+k+ClKf)W&#oM5Ccb}G6s%euau8#^TiF zlh>?~axI4Dx2>4Co{l0TJ;$1IMup8(D^H*oJ23)a4Hr zs6#mDGADGYT%OL}o^e56N~{2Je}D0lSP43bRX{|nW?&r)*u(-J?*u$eb=mRrsZlKw znOK=DlqnRgBU>aYl_Xi1p56`n4Pp~Z`8wiFVm+~e*vP;M3^X%vA_MPdV8e1^GqDAT zKqs-Cfs+_$LFFtK>p!UKU)?sk&5hJMzFb-#H#GI}@GABql1kQE$^Pt-S@3pXh=)CG!3(4yH0)%u+0o zIqzw^)PEmYb$jU5ppzU4MC51&KE*;`$U=X*3%dR5Ut>7v3bC@ax<#Sv1H6Wua7)`V zgHG~(AR;F*@L3k_A{Op*oNW~rX)d1`*`i_%N+w~A>t?d;Wb^IGo(?+62Y`rtkb#R? z@Gr37U+f~=^!77#9N8ICNo!RLcXiz*l84B7tl>UP&L$rr=a6$5_!0w`GO&$-?F?MD zoP4y$Z996q?QQSv|10afjkVvY;qKs{d3)xjZ7${(kxN+So+FX{E;jIUqC;2`QksmT}9Si?W7XErC z{7D# zAR>Qc;4T*WTP*aq|F6d5DOXOlon1SsMJi(xuq>UGrBu$|&+RT8$lu6ow~rEkfll%U z5K)kUyIGd^uq?mZ6(y{*9(biI981J(lu-48P4OsiPMoYTzv&VuC(CWDI4Pf=DDi&p zC=sLGIi<5*5p}N1C8X>1R^SmfgiF|e#BDwaTk>>Nz*@YQYp>Ia9-f< zosg(_D&_XDQ$Z&s1|mwzz`ZQ&Pg&TXaj;h}fAl*(Yf{NViA?r4Ii6Bdxgc%@r2^-` zS?=W~27Zo;&|vQUrWKS1bW(X#J`hm_4BXEm_=154SR4mY#t8OKcA>SQ&fay2hAKwq z4D@>~9zvl|SS!qCe+UztfA#+2)?Hr>!fatQcaFKOX_OVZD2sQjxzD`wwPS$|fO5rdoHw!B?u2Pt$%70OO z!DT*UDIf`RN1$zwXXYF>I!*{`Hfeo#K{=C9ZrT&QW?gqp z)5=U!MN%<)53K8qvFAN3>U9q1PX@ZWFV25C6mj8XuPV8YG<%_2&!IbS@Wq0rrA%XA zluMapt!r|=PS<6?hAtSn4Mt0Sld;~E%^mdioYabkN2YPkgVU7p?Egn#FDIrn z8XXht*=bXZwzToqhC22Yy&7ejWrCxzu~90KPgc~|WYpEFRJC;zrz>m4VzId1k~S=@ z&nrh9%EtOMW79NqgV|_n=E$_C707gAiA*I+k!C2RDH%GME+tQ_kfanU(q&?uRHDmM zEyhN`M-dy+-7F4TlL`Vk~t@n6!!luWcR%J)3s=? zyFc69$TDPiF{DaO?^<*iZS^Kc_B5s3AkRo~zT}%?w%S#xy)Ru+TR3yMXrLeHXDv?M z|Ccs$4@la{k#xyGSM_z6e>pvMIShMV+uuERbJ#BTbI-fPb_@6XfJ1lXUZZmkhx=S` zpgyMdfw&Ip6KXH@DfJlxuQKot2L8#wYaP_*)P62G|HZ)TU8(ur_kVZZFp@1Fckrt+Iu~5)%EqeJ>K0jgvQQ%LChiaF1`Co)%e|BG*$y7y zK_KGc48~(HHx{J36Quv9KLoqW$F`(P6_RvivQVl}C|gIjq)Sy9VhKBxaRKMK^L#*D zM^_oqyMtfW!5hG%fr#hFV4e)-#RB){=smNY$vni-t6--B?8LPPVlXcp#C7mOc%eK2 zFO0zkFc{5Xz6|Eq!HeKU0ue8Y!TcGF&q56NpC}&g)EIVJcgzoqa_iP%HT!>Qdb2W+ zC%&a{Bs?h)@iG`Jh{1wcRzkXjvuf4h%F*nIlNGd7CTZoG4ux3SE%Z!Y7Km%(sToYr z#>-}~@IJKzFVE?@SXjTKm4BJXxkJsKldXOyO0IJaUIA|~@N4H4@&++j1cODk^NM)I z3?^i-D3msQD*N9PDkqrOw=iQgbGa9yVl)qPZw5Lq@as*@raJE3Ig{;k-cVk}aOc%u z1c4g}0nuO}kbz8)OFTk6Mm$fn6Kja|#1>*3v4ePr*h9Qed`Mg%c_g2VAw^_7nMe*K zQ^+(@LTbo7Qb!h&gUMpDge)V=Ndq~H+(TZX0w@VpLYXKFHJP$gP1J+bTJoLCx8^CAtlCOL0qclene3$=nofDz|dCp>D(6D&4BxM!Jo5 z8|yaCt;Vg+ZM@qAw+Gywc6-@vquXA$BW@Sm-Q6SI^W00_N4k%3H@Mfh*SU{(pYA@( zeUAG)_xbLRyDxTM>fY|&;l9d!wfh?P*WGux?{ojs{j__h`&IYr9-bbwho1-EBg8}C z5$+M`A@Ruc$oClPF~Xz9W17bdkNF-8Jf84a=<$rlB9FH`_Im8|*za-B(?tH*C1zkA&9gr2x3>B;j<_tbmVdNz1kJtuqGJ(1@E&nG;e@_gF!S4_S@%8cd5&8`Dk@%$h$b1w&g+7CQ?(=E%Y4Ta<)8@0xXSvTxpVxif z@Y(9~zRwpvU-^9PbIRxRfcplF9MCwRX~3fc77o}oV9$W_bQqmTOXzGmm)6qxbO}9_ zuA;}$wX}(@r)SXf=>_x?^g{X>dJ+8=y_eoc@23yahv}pAIr=C1JbjVAME^lwqp$k{ zU(7evx6pU2Z@uqC-v(ccZ;S6d-}%0e`~JuGN#BLO&-gC#UFo~ZceU>t-`9QL@O{&F zgYPEaJ-+*VfAqcKC-77G75Ewa8vL64rusGewfMFA&Gwt)H_var-{XG&@muY;-|wWq zo4>EWz(2-c>7VJJ<)7oP@z3+u`5&yaVpYuKV zLHrQDfFI6}<0tY5@>BQ){Gt2`{xE(ezn0&?x9}VJHok-3%Adh!__O#A^B>{=hyOf( zIe!QLBmNisgZ#t%qx@t1GyHS>@AyCPJNZ8ccm*T|lmwUpECJSl$pH@rFafgyW(Uj( zm=~}lU}?abfVBbZ0yYF}3fK~`H{ejfv4F1vz79AQ@N>YWfXe|_0wt#%nckII6Sa2uqtpw;KaZgfzJi558N2IIdE&>_P~RICj!p~ zUJT*~34@}8VuRv>5`waWa)Y!%`9TFigM!L~h6hyzjR+bQG$CkWP(zR584^@R?s^^dxG8z`YdRF(1D;sL0<>E2m1sogSEl+!41Jr2EP>C z9^4VUGI&++>frUkTY|R*?+D%%{7LZV!CwR)4E{3sc<_nflfkEge+a%3d@cBT2nZoV zcp>f~o+12@sF0+PuoOLw^qaO@IqL1YQCk0WAm;ga`zJa6zOXUXUP=3UUQ`0-a!xph%z>R0~E3 zMhZp?>;fd1C3sjcM=(z?U+|pZ1;G+Qn_!t>xnP}OgJ6?jt6;ler(mz(OTl@;MZqP( zWx*A}Rl%QvzXUhJU>F`292OcD78VgE42uqn4T}p)2ulh}4oeLi9@Y}JFzn^9{oyb? zI9wTiU--=MN5dC|KOepD*VUrYZ1H%I>Il49}ymr5Rnq0jL=3D zN0daAMN~x?BWfe+A|^%5h?pI*AYxI(`iN~2ha);82SkQNrbS93(<5b(ibz$YIx;&l zH&PopEV44PI&x&>=*Y2=<05M!>mtWTPKcZp`E2Cs$gPq4BhLvjVURFYs1PcJnZkTw zxv)w&MmSzrFEk5nLc6d@_@HoxkP*%kJ}P`n_`L8%;Y-4HVTW*q@O9xv;b!4h;SS+0 z;U~h+gO+@pe-J`vteWDYi)zQ__*60P%i=x*= zuZ?~)dSmpK=Zy-8}nt%@t6}a zr(y@k4v(#h9T7V^_Ji1iv4>-i#vT_95)BhoimFAUM0-S^i@p#Y6dj4niPOiG#tn%Z z8n->}!?=&*_QvgtSH$b$3*!gJ>*Ke^?~Z>j{)70B;t$84j6WTJF8=%Y&iKpmzsLU> ze?0*v;0aj?=7c8`wk3R!@NvSY37;n%NH~;mI^k@>w+TNaY7$EmD-){|M<$L=9Gh65 zI5BZjqBU`HqCN3}#My~YC4Q3lS>pc0gNa8Hk0qW+Je7DR@!P~75`Rj(ka#Kax5TT7 z*Aj0eVM%0?TasszPm*sEKPf0FG$}l(GHFE8=p;i@O_C{TLel+7mZZr^j-;tc)00}0 zP|~cV*-3Mg<|i#kdNS$hq(w=Kla?g4C3PgNOj?z+F==zs)}$Q+;|FF8ln+!6R1fSJ z_{P9D2W}X+IXNa-oGeYwNLC~-Or*0Al2cMs#3|`1Z7Hv%tW8;$vLQ7l zRh%kK%}7qv*{h_E7D(1U!CEb5s@Lxh|UmYEXa5vV@bx+jAb%ES)?pUmLe0&(q(d)N~V(y zk`>8HWM#7ZWEC=tY_4prY^Us;?7Zx%9GBB_fjmMUC6ATI%ai0Xxl*1f&z9%P^W-{t zsk};Vlw0J@@)mike1@En&yqhbe?tD0{2BQo`C|Et@)h!R@*VPzjRw<22i?UhyfO3X% zrt)Fs9OYBWXOzz=7b{;>E>*TGS1UIwcPrmjzOVdH`LS}Z@`&=7@+;*@zMJ_$=Es?zW**Hvo_QkkROac-bD7^|Ud;ScO{)FW;cB5e zMjfY4R41zy>P&T(I#;b#>(qtnA?gw88nsnDUHyRiK{Zm(R6nF%png)lQ2ng>IrR(b zCF+&xb?WWv57h_Mht*%Izfzx6pH}~@zNo&W{!RV6`cL&=SyUFC6`Uo?5@)4n$+J{h zSy{PR#aX3UvA@h?VU|$`)3Dchh&Fk$7d&Hr(~yP zOR_Vv<=OXTPs^U2-Io1f_WtZ++23Vf%D$X^CHrdjpV@!qxaD}}c<0bLemMa-K{>*l zkmPE*d*9F#LZ=b4;kIj`lc%~_YTK4)Xj z=A7L*@8x`u^Ks7JoP9a_bB^Vl%Q>HOEti+;k?WmH=lbUc=0@el=EmhF<_^qF%@ybB zbI0dCmb*B2ckU;-M{>W(J)iqW?q3?9!8Me|UBlM|X+kt%ng~slCPtI2k!x}^dQGKf zgl4qHpsCTAG>sa&W{PH-X1b!$V825LjJ0&Rp=sEyHzw5eK^HeXw=9ittmt5l0Z}Wc0>&&~F_h;T;`5=FA{_y;&{1N%1^PkRd z&tH?jHvi51jrm*hx97i~|55(l{Lk_~&p(iVDF5sH@A5C}fDYGDI(MCyZh$US7p@cP zqII#lcwM4Sr@LR*tXrttu6tManeM3WobIyjcio@5>jkiYDBu-%6oeFn6+{+97l;ZH z3I-OW7KjV73vvsz1-gQcf;S4@EZ9)6xzN8*SQuRxTNpn$Z}5=8_YJNXTsipQ;BN+> z8GLT=_eJ?d7^)dQny-J^_FVGLx>-A;& zD*Z_P7`;JXqp#CX(ofOP(9hRDtzV>HtY4yU)4!r$qhG6Er{AF8q<>5Qnf|!`d;Kr^ z%lhB-f9kK7@Jc*Nyh{d@_?7TW!b{>xQcKh&x{^U9#U-UBh5aG`2LpG^sSXG_6!pnprxi^uE%urN+{_()!Yg zr46Ocr7fkcrKt3W(krFcN^g{5WxO(vGVihhWdUVjWumgwGEG@QnV#!vF^v1k8^--~ IeU+8|Ki~JR7ytkO literal 21667 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 hI8pFU!MTDj3$FHu{R8+q4a4}q)K31d|I