home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sys.next.programmer
- Path: sparky!uunet!dtint!usenet
- From: nevin@dtint.dtint.com
- Subject: Re: Coding Rules/Suggestions (RTF)
- Message-ID: <1992Nov18.211536.25711@dtint.uucp>
- Sender: usenet@dtint.uucp
- Reply-To: nevin@dtint.dtint.com
- Organization: Digital Technology, International
- Date: Wed, 18 Nov 92 21:15:36 GMT
- Lines: 714
-
-
- Interesting stuff and a lot of good point, some of which end up being
- applicable only to the NeXT environment. Consider what kind of
- porting problems you may run into if you implement your standards.
-
- It'll port easily to every NeXTSTEP supported platform and that's all
- I care about. Other programmers may not be as lucky, though, and may
- not have that luxury.
-
- More that a particular standard, it probably is important for a group
- of people to agree on a standard implementation. This includes
- subproject setup, object naming conventions, code outlining, file
- commenting and organization, method/function commenting, line or
- cluster commenting, etc.
-
- I covered "object naming conventions" by requiring them to follow the
- panel/window example, the names of which must be logical from an
- end-user point of view. Commenting was covered to the degree that I
- think it matters beyond that, let each developer decide. I didn't
- cover subproject setup not that I overlooked it but that I'm not yet
- ready to voice my thoughts.
-
- I've been the route of extremely strict conventions (see Charles
- Symoni, MIT/Microsoft on type naming calculus commonly referred to as
- "Hungarian"), and I find the middle ground more appealing (i.e. a
- 'relaxed' but enforceable, democratic group of standards).
-
- I'm against Hungarian notation. I'm also not inclined to make any
- rules governing instance variable names, but class names are covered
- (see comment above).
-
-
- > All panels and windows should be in a separate NIB file, one per
- NIB, with a separate Class object to control and manage each NIB.
- For example, for the Info NIB file, there should also be files Info.h
- and Info.m that manages the NIB file. The panel or window in the NIB
- file should have the name of it's NIB file (and associated class
- files) as the name of the panel/window (this is setable via the
- Inspector panel of I.B. I'm talking about the name that will appear
- in the title bar of the panel/window, not the name as it might appear
- in the "Objects" part of the NIB).
-
- This doesn't account for sub-panels or micro-panel management. Also,
- if you have a large collection of NIBs it means a propagation of
- objects/classes. Again, a standard method within the application may
- be what's really called for, not a standard approach to all
- applications.
-
- Yes, you are right. I have ammended the applicable part of this rule
- to read as follows:
-
- All panels and windows that are instantiated in a NIB file should be
- in separate NIB files, one per NIB, with a separate Class object to
- control and manage each NIB. For example, for the Info NIB file,
- there should also be files Info.h and Info.m that manages the NIB
- file. The panel or window in the NIB file should have the name of
- it's NIB file (and associated class files) as the name of the
- panel/window (this is setable via the Inspector panel of I.B. I'm
- talking about the name that will appear in the title bar of the
- panel/window, not the name as it might appear in the "Objects" part
- of the NIB). Note that this applies only to the NIB files associated
- with the Class creator's primary language (i.e., if you are French,
- you'll create French class names, and create the French NIB files to
- follow this rule. The other language NIB files German, English,
- Swiss, etc. will be created based on the French NIB files, and those
- alternate language NIB's won't necessarily match your French class
- names).
-
- Notice that the rule now only applies to panels/windows that are
- already instantiated in the NIB (this is what I initially meant,
- anyway). Alert panels, micro-panels, and the like are generally
- instantiated via program logic (via "NXRunAlterPanel()", as one
- possible example).
-
- Also notice the clarification at the end of the paragraph regarding
- localized NIB's (I had one person email me in disagreement, arguing
- that they wanted localized NIB names instead).
-
- >
- > Or, at the very least, the name of the NIB file (and therefore the
- associated class files) should be obvious to determine simply by
- looking at the panel (or window) name. In this way, simply running
- the program will give another programmer a very good idea of the
- object structure of the program, since he can plainly see all of the
- panels and windows, and their names, while the program is running.
-
- Again, many nibs don't show titles. Another (possible) consideration:
- information hiding. If you are distributing source for public
- consumption then is probably not what you want to do. If you are
- selling an application, you may wish to encode some things. Some
- venders do consider it appropriate.
-
- I presume you mean: "some panels/windows in some NIB's don't have
- titles". My question would then be: why doesn't the panel/window
- have a title? What would it hurt to put a title in? Note that the
- rule I gave does give you some discretion in the choice of the title:
-
- Or, at the very least, the name of the NIB file (and therefore the
- associated class files) should be obvious to determine simply by
- looking at the panel (or window) name. In this way, simply running
- the program (with the appropriate default language) will give another
- programmer a very good idea of the object structure of the program,
- since he can plainly see all of the panels and windows, and their
- names, while the program is running.
-
- However, you make a good point about encoding. It might be an issue
- on some projects.
-
- > *****************************
- >
- > When given a choice of fewer objects that do more, versus more
- objects that are smaller and do less, favor the use of smaller
- objects. You'll find that your objects will grow larger during
- development anyway.
-
- Generally I'd agree. However, if you're talking about managing say,
- 1000 classes, you'll find a certain redundancy starts to creep in.
- OOP in general has to do with the management of information. Do you
- want to manage more or less things within a file? Do you want to
- manage more or less things among files?
-
- An object can manage more and still be small in terms of the code it
- contains if it delegates it's work to other objects. To use a
- house-construction metaphor: 4 boards and some nails might make a
- panel; 3 or 4 panels might make a wall, 4 walls and a floor might
- make a room, 3 rooms might make a floor, and 3 floors and a roof
- might make a house. And, in each case, the object is small even the
- "house" object.
-
- People are still enamored enough with OOP enough to not see the
- second situation: objects allow a encapsulization of related code so
- we can avoid situations of tightly wrapped coding. Object systems
- still end up being tightly bound among sets of objects. OOP has not
- 'solved' the problem, only pushed it further back, at which stage the
- problem becomes even bigger. Consider the impacts of favoring smaller
- objects when your objects become interdependent and abundant.
-
- Is the "room" object tightly bound to the "house" object from my
- metaphor above? No.
-
- Is the "room" object tightly bound to the "board" object from my
- metaphor above? No. It's perfectly acceptable to build the walls of
- the room with another material (such as brick), as long as the room
- is still a room. In other words, it's OK to improve the algorithm.
-
- If you make a mistake and discover that your rooms built with boards
- are obsolete (maybe you used balsa wood?), and you no longer want
- rooms that way (but must keep your old balsa-wood rooms around
- because of some peculiar backwards compatability problem), just mark
- your "room" object as obsolete (and also it's support objects) so
- nobody will use it again for any new floor of any new house. Then
- create a "brick-rooms" object (and it's support objects) for future
- use. Then, keep both "room" objects (and their support objects) in
- your library. All new code will use the new objects, and eventually
- the old objects will die a natural death.
-
- Incidentally, I think this is one of the neat things of Objective-C
- (versus C++). You can create new, logically-related object Classes,
- and polymorphically message them, without them all having to inherit
- from the same base class. Thus, it's more forgiving of mistakes in
- your initial Class hierarchy design than C++ is. With C++, if you
- poorly design your class hierarchy, you're screwed, since you'll
- probably now have to re-implement major parts of the Class hierarchy.
-
- I'm neither for or against large/small objects; I'm for applying what
- best suits the big picture.
-
- >
- > *****************************
- >
- > I have not, as yet, seen a single convincing situation where public
- instance variables were necessary or even desirable, although I am
- hesitant to say that there are none. ...
- Unless otherwise convinced for special occassions, all instance
- variables should only be modifiable by a class method (i.e., NOT be
- public). It should also not be modifiable by more than one class
- method.
-
- It depends on how "purist" or theoretical vs. practical you want to
- get. Within the same module/class it may be acceptable to refer to
- the instance variable vs. the method, especially where speed is
- concerned.
-
- If it's within the same instance of a class (i.e., the same "module"?
- what do you mean by a "module", anyway?), the instance variables of a
- given instance of a class are accessible to all methods of that
- instance anyway, regardless of the variables' classification (public,
- protected, or private) so in this case there would be no advantage to
- declaring any of them public.
-
- But, if you are talking about different instances of the same class
- what relevance does the fact that they are of the same class have? I
- guess if it executes faster, then we should all just go back to
- having global variables for everything (ala Windoze)?
-
- I fully expect to eventually encounter some case where the instance
- variables need to be public for speed of execution reasons as you
- suggest. I just haven't seen that case yet. And, when it happens, I
- just think it should be suitably documented in the code (i.e.,
- explained why the public declarations were necessary and also in
- non-ambiguous, very specific terms) . Otherwise, stay away from
- public declarations.
-
- >
- > *****************************
- >
- > Reality Checking in 'C' code (as well as all of the 'C' language
- derivatives, such as Objective-C) is accomplished with the assert()
- macro. Brad Cox, the creator of Objective-C, recommends using
- asserts (p. 98 and 99 of his book, Object-Oriented Programming, An
- Evolutionary Approach, 2nd Edition) for Reality Checking (he calls it
- something else, though) and clustering the checks into two groups:
- (1) preconditions, and (2) postconditions. The advantage of using
- assert() is that this debugging code can be turned off with a
- compile-time switch.
- >
- > I don't entirely agree with this approach, for a couple of reasons:
- >
- > A precondition assert should verify that the argument values and/or
- types are as they should be for the method to work properly.
- Interestingly enough, except possibly with really obscure code (and I
- can't even think of an example), the compiler and/or runtime system
- will do this for you, so why do you need an assert for this case?
- (Objective-C has a unique runtime system that almost no other
- language has).
-
- You might be able to gain a fuller appreciation for preconditions by
- reading "Object Oriented Design" by Bertrand Meyer, which is where
- Brad Cox picked up the notion of preconditions and postconditions.
-
- There are several things that your discussion misses. A compiler can
- check type information (is this an int, a const char*, the correct
- object), but it cannot guarantee the condition of that argument (is
- this int between values A and B, is the const char* a unique string,
- is this object initialized to the proper state). Furthermore,
- preconditions may extend to implicit arguments (global state, object
- state), which also needs to be verified. For example; are we
- currently printing? Is the associated nib for this object already
- loaded.
-
- Postconditions are treated in a similar fashion (the method operates
- on state to produce a range of results; are the results in the
- expected range?).
-
- A third checking that is left out (I'll have to re-read Cox, as I
- believe he misses this as well), is invarients. That is, what are
- those states which may effect outcome which have nothing to do with
- inputs. This includes environment conditions (memory, disk, threads,
- etc), globals and some local state.
-
- Some very good points. I need to study it some more.
-
- I've been finding that the third checking you mention (invarients) is
- especially important with Distributed Objects. These types of
- objects seem to either need state-machine logic inside of them, or
- else provide some sort of mutex-locking methods. And in any case, to
- implement such mechanisms, the object must "remember" who sent each
- message so "state" information is quite common.
-
- For example, suppose you message a remote object to load an NXImage,
- with the intent to message it afterwards to attach some additional
- information to the image, then finally message it to save the image
- and it's tagged data to a database. Now suppose that before you send
- the message to save the data, some other remote object messages it to
- load a different NXImage. Disaster....
-
- The ability for any object on the network to message any other object
- on the network can lead to chaos if suitable precautions aren't
- taken. And, as I said above, these precautions seem to always
- require some sort of "state" memory for the object.
- ..
-
- protocols are cool, but not supported outside NeXT :-(
-
-
- So? :-)
-
-
- >
- > *****************************
- > Methods must appear in both the implementation-module and
- interface-module in the same order that they appear in standard NeXT
- class documentation ...
-
- Seeing as NeXT keeps tweaking their own definitions (witness 3.0
- docs), and knowing some of the shortcomings (like delegate method
- lookup) I'm not enamored with the suggestion. We break things into
- logical groupings (existence, accessor, i/o, etc) within the header
- and module files. This allows a programmer quick access to related
- regions (which we deem pretty important). In fact, I'd wager you'll
- encounter more production problems (i.e. bugs) by code that is spread
- out alphabetically that clustered into logical groups.
-
- Your point here is well-taken. In fact, I considered this approach
- for quite a while, and even initially wrote my code in the manner you
- suggest. The problem was that it just wasn't that easy to categorize
- many of the methods, and what made sense to me for a category for a
- method didn't necessarily make sense to others, and visa-versa. It
- seems that, for those gray areas where a method could actually be
- multiply-categorized, everyone has their own idea of where it
- belongs. After awhile, chaos seems to ensue.
-
- I still think it's better to alphabetize them within their respective
- groups, with Class methods at the top, instance methods in the
- middle, and delegate methods at the bottom.
-
- However, those 3 groups should only be sub-groups of the bigger
- groups implied by interface objects across multiple (sub)projects.
- This will be a part of my "sub-projects" guidelines.
-
- regards,
-
- Kevin
- --
- Kevin Sven Berg / / / / P / a / g / e / s
- kevin@pages.com / / / / / / / /
- Pages Software Inc. / / / / / / / /
- 619-492-9050
-
-
- --
- Nevin Pratt, Digital Technology, Int'l Orem, Ut
- NeXTmail preferred, but ONLY at my REAL email address:
- nevin@dtint.dtint.com
-
-
-
- -- NewsGrazer, a NeXTstep(tm) news reader, posting --
- M>UQR=&8P7&%N<VE[7&9O;G1T8FQ<9C!<9G-W:7-S($AE;'9E=&EC83M<9C)<
- M9FYI;"!4:6UE<RU2;VUA;CM<9C%<9FUO9&5R;B!#;W5R:65R.WT*7&UA<F=L
- M,3(P"EQM87)G<C$R,`I[7&-O;&]R=&)L.UQR960P7&=R965N,%QB;'5E,#M]
- M"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R
- M,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&8P7&(P7&DP7'5L;F]N
- M95QF<S(T7&9C,%QC9C`@7`I);G1E<F5S=&EN9R!S='5F9B!A;F0@82!L;W0@
- M;V8@9V]O9"!P;VEN="P@<V]M92!O9B!W:&EC:"!E;F0@=7`@8F5I;F<@87!P
- M;&EC86)L92!O;FQY('1O('1H92!.95A4(&5N=FER;VYM96YT+B!#;VYS:61E
- M<B!W:&%T(&MI;F0@;V8@<&]R=&EN9R!P<F]B;&5M<R!Y;W4@;6%Y(')U;B!I
- M;G1O(&EF('EO=2!I;7!L96UE;G0@>6]U<B!S=&%N9&%R9',N7`I<"@I<8B!)
- M="=L;"!P;W)T(&5A<VEL>2!T;R!E=F5R>2!.95A44U1%4"!S=7!P;W)T960@
- M<&QA=&9O<FW086YD('1H870G<R!A;&P@22!C87)E(&%B;W5T+B`@3W1H97(@
- M<')O9W)A;6UE<G,@;6%Y(&YO="!B92!A<R!L=6-K>2P@=&AO=6=H+"!A;F0@
- M;6%Y(&YO="!H879E('1H870@;'5X=7)Y+EP*"EQB,"!<"DUO<F4@=&AA="!A
- M('!A<G1I8W5L87(@<W1A;F1A<F0L(&ET('!R;V)A8FQY(&ES(&EM<&]R=&%N
- M="!F;W(@82!G<F]U<"!O9B!P96]P;&4@=&\@86=R964@;VX@82!S=&%N9&%R
- M9"!I;7!L96UE;G1A=&EO;BX@5&AI<R!I;F-L=61E<R!S=6)P<F]J96-T('-E
- M='5P+"!O8FIE8W0@;F%M:6YG(&-O;G9E;G1I;VYS+"!C;V1E(&]U=&QI;FEN
- M9RP@9FEL92!C;VUM96YT:6YG(&%N9"!O<F=A;FEZ871I;VXL(&UE=&AO9"]F
- M=6YC=&EO;B!C;VUM96YT:6YG+"!L:6YE(&]R(&-L=7-T97(@8V]M;65N=&EN
- M9RP@971C+EP*7`H*7&(@22!C;W9E<F5D(")O8FIE8W0@;F%M:6YG(&-O;G9E
- M;G1I;VYS(B!B>2!R97%U:7)I;F<@=&AE;2!T;R!F;VQL;W<@=&AE('!A;F5L
- M+W=I;F1O=R!E>&%M<&QE+"!T:&4@;F%M97,@;V8@=VAI8V@@;75S="!B92!L
- M;V=I8V%L(&9R;VT@86X@96YD+75S97(@<&]I;G0@;V8@=FEE=RX@($-O;6UE
- M;G1I;F<@=V%S(&-O=F5R960@=&\@=&AE(&1E9W)E92!T:&%T($D@=&AI;FL@
- M:70@;6%T=&5R<]!B97EO;F0@=&AA="P@;&5T(&5A8V@@9&5V96QO<&5R(&1E
- M8VED92X@($D@9&ED;B=T(&-O=F5R('-U8G!R;VIE8W0@<V5T=7#0;F]T('1H
- M870@22!O=F5R;&]O:V5D(&ETT&)U="!T:&%T($DG;2!N;W0@>65T(')E861Y
- M('1O('9O:6-E(&UY('1H;W5G:'1S+EP*"EQB,"!<"DDG=F4@8F5E;B!T:&4@
- M<F]U=&4@;V8@97AT<F5M96QY('-T<FEC="!C;VYV96YT:6]N<R`H<V5E($-H
- M87)L97,@4WEM;VYI+"!-250O36EC<F]S;V9T(&]N('1Y<&4@;F%M:6YG(&-A
- M;&-U;'5S(&-O;6UO;FQY(')E9F5R<F5D('1O(&%S(")(=6YG87)I86XB*2P@
- M86YD($D@9FEN9"!T:&4@;6ED9&QE(&=R;W5N9"!M;W)E(&%P<&5A;&EN9R`H
- M:2YE+B!A("=R96QA>&5D)R!B=70@96YF;W)C96%B;&4L(&1E;6]C<F%T:6,@
- M9W)O=7`@;V8@<W1A;F1A<F1S*2Y<"EP*"EQB($DG;2!A9V%I;G-T($AU;F=A
- M<FEA;B!N;W1A=&EO;BX@($DG;2!A;'-O(&YO="!I;F-L:6YE9"!T;R!M86ME
- M(&%N>2!R=6QE<R!G;W9E<FYI;F<@:6YS=&%N8V4@=F%R:6%B;&4@;F%M97,L
- M(&)U="!C;&%S<R!N86UE<R!A<F4@8V]V97)E9"`H<V5E(&-O;6UE;G0@86)O
- M=F4I+EP*"EQB,"!<"EP*"EQI7&QI-30P7&9C,5QC9C$@/B!!;&P@<&%N96QS
- M(&%N9"!W:6YD;W=S('-H;W5L9"!B92!I;B!A('-E<&%R871E($Y)0B!F:6QE
- M+"!O;F4@<&5R($Y)0BP@=VET:"!A('-E<&%R871E($-L87-S(&]B:F5C="!T
- M;R!C;VYT<F]L(&%N9"!M86YA9V4@96%C:"!.24(N("!&;W(@97AA;7!L92P@
- M9F]R('1H92!);F9O($Y)0B!F:6QE+"!T:&5R92!S:&]U;&0@86QS;R!B92!F
- M:6QE<R!);F9O+F@@86YD($EN9F\N;2!T:&%T(&UA;F%G97,@=&AE($Y)0B!F
- M:6QE+B`@5&AE('!A;F5L(&]R('=I;F1O=R!I;B!T:&4@3DE"(&9I;&4@<VAO
- M=6QD(&AA=F4@=&AE(&YA;64@;V8@:70G<R!.24(@9FEL92`H86YD(&%S<V]C
- M:6%T960@8VQA<W,@9FEL97,I(&%S('1H92!N86UE(&]F('1H92!P86YE;"]W
- M:6YD;W<@*'1H:7,@:7,@<V5T86)L92!V:6$@=&AE($EN<W!E8W1O<B!P86YE
- M;"!O9B!)+D(NT$DG;2!T86QK:6YG(&%B;W5T('1H92!N86UE('1H870@=VEL
- M;"!A<'!E87(@:6X@=&AE('1I=&QE(&)A<B!O9B!T:&4@<&%N96PO=VEN9&]W
- M+"!N;W0@=&AE(&YA;64@87,@:70@;6EG:'0@87!P96%R(&EN('1H92`B3V)J
- M96-T<R(@<&%R="!O9B!T:&4@3DE"*2Y<"@I<:3!<;&DP7&9C,%QC9C`@7`I4
- M:&ES(&1O97-N)W0@86-C;W5N="!F;W(@<W5B+7!A;F5L<R!O<B!M:6-R;RUP
- M86YE;"!M86YA9V5M96YT+B!!;'-O+"!I9B!Y;W4@:&%V92!A(&QA<F=E(&-O
- M;&QE8W1I;VX@;V8@3DE"<R!I="!M96%N<R!A('!R;W!A9V%T:6]N(&]F(&]B
- M:F5C=',O8VQA<W-E<RX@06=A:6XL(&$@<W1A;F1A<F0@;65T:&]D('=I=&AI
- M;B!T:&4@87!P;&EC871I;VX@;6%Y(&)E('=H870G<R!R96%L;'D@8V%L;&5D
- M(&9O<BP@;F]T(&$@<W1A;F1A<F0@87!P<F]A8V@@=&\@86QL(&%P<&QI8V%T
- M:6]N<RY<"EP*"EQB(%EE<RP@>6]U(&%R92!R:6=H="X@($D@:&%V92!A;6UE
- M;F1E9"!T:&4@87!P;&EC86)L92!P87)T(&]F('1H:7,@<G5L92!T;R!R96%D
- M(&%S(&9O;&QO=W,Z7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
- M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
- M9C)<9G,R.%QF8S!<8V8P(%P*"EQL:3<V,"!!;&P@<&%N96QS(&%N9"!W:6YD
- M;W=S('1H870@87)E(&EN<W1A;G1I871E9"!I;B!A($Y)0B!F:6QE('-H;W5L
- M9"!B92!I;B!S"EQI(&5P87)A=&4*7&DP("!.24(@9FEL97,L(&]N92!P97(@
- M3DE"+"!W:71H(&$@<V5P87)A=&4@0VQA<W,@;V)J96-T('1O(&-O;G1R;VP@
- M86YD(&UA;F%G92!E86-H($Y)0BX@($9O<B!E>&%M<&QE+"!F;W(@=&AE($EN
- M9F\@3DE"(&9I;&4L('1H97)E('-H;W5L9"!A;'-O(&)E(&9I;&5S(`I<:2!)
- M;F9O+F@*7&DP("!A;F0@"EQI($EN9F\N;0I<:3`@('1H870@;6%N86=E<R!T
- M:&4@3DE"(&9I;&4N("!4:&4@<&%N96P@;W(@=VEN9&]W(&EN('1H92!.24(@
- M9FEL92!S:&]U;&0@:&%V92!T:&4@;F%M92!O9B!I="=S($Y)0B!F:6QE("AA
- M;F0@87-S;V-I871E9"!C;&%S<R!F:6QE<RD@87,@=&AE(&YA;64@;V8@=&AE
- M('!A;F5L+W=I;F1O=R`H=&AI<R!I<R!S971A8FQE('9I82!T:&4@26YS<&5C
- M=&]R('!A;F5L(&]F($DN0B[022=M('1A;&MI;F<@86)O=70@=&AE(&YA;64@
- M=&AA="!W:6QL(&%P<&5A<B!I;B!T:&4@=&ET;&4@8F%R(&]F('1H92!P86YE
- M;"]W:6YD;W<L(&YO="!T:&4@;F%M92!A<R!I="!M:6=H="!A<'!E87(@:6X@
- M=&AE(")/8FIE8W1S(B!P87)T(&]F('1H92!.24(I+B`@3F]T92!T:&%T('1H
- M:7,@87!P;&EE<R!O;FQY('1O('1H92!.24(@9FEL97,@87-S;V-I871E9"!W
- M:71H('1H92!#;&%S<R!C<F5A=&]R)W,@<')I;6%R>2!L86YG=6%G92`H:2YE
- M+BP@:68@>6]U(&%R92!&<F5N8V@L('EO=2=L;"!C<F5A=&4@1G)E;F-H(&-L
- M87-S(&YA;65S+"!A;F0@8W)E871E('1H92!&<F5N8V@@3DE"(&9I;&5S('1O
- M(&9O;&QO=R!T:&ES(')U;&4N("!4:&4@;W1H97(@;&%N9W5A9V4@3DE"(&9I
- M;&5ST$=E<FUA;BP@16YG;&ES:"P@4W=I<W,L(&5T8R[0=VEL;"!B92!C<F5A
- M=&5D(&)A<V5D(&]N('1H92!&<F5N8V@@3DE"(&9I;&5S+"!A;F0@=&AO<V4@
- M86QT97)N871E(&QA;F=U86=E($Y)0B=S('=O;B=T(&YE8V5S<V%R:6QY(&UA
- M=&-H('EO=7(@1G)E;F-H(&-L87-S(&YA;65S*2X@"EQF,%QF<S(T(%P*"EQP
- M87)D7'1X-3(P7'1X,3`V,%QT>#$V,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<
- M='@S-S(P7'1X-#(V,%QT>#0X,#!<='@U,S(P7&(P7&9C,%QC9C`@7`H*7&(@
- M3F]T:6-E('1H870@=&AE(')U;&4@;F]W(&]N;'D@87!P;&EE<R!T;R!P86YE
- M;',O=VEN9&]W<R!T:&%T(&%R92!A;')E861Y(&EN<W1A;G1I871E9"!I;B!T
- M:&4@3DE"("AT:&ES(&ES('=H870@22!I;FET:6%L;'D@;65A;G0L(&%N>7=A
- M>2DN("!!;&5R="!P86YE;',L(&UI8W)O+7!A;F5L<RP@86YD('1H92!L:6ME
- M(&%R92!G96YE<F%L;'D@:6YS=&%N=&EA=&5D('9I82!P<F]G<F%M(&QO9VEC
- M("AV:6$@(DY84G5N06QT97)086YE;"@I(BP@87,@;VYE('!O<W-I8FQE(&5X
- M86UP;&4I+EP*7`I!;'-O(&YO=&EC92!T:&4@8VQA<FEF:6-A=&EO;B!A="!T
- M:&4@96YD(&]F('1H92!P87)A9W)A<&@@<F5G87)D:6YG(&QO8V%L:7IE9"!.
- M24(G<R`H22!H860@;VYE('!E<G-O;B!E;6%I;"!M92!I;B!D:7-A9W)E96UE
- M;G0L(&%R9W5I;F<@=&AA="!T:&5Y('=A;G1E9"!L;V-A;&EZ960@3DE"(&YA
- M;65S(&EN<W1E860I+EP*(%P*"EQB,"`^("`@(%P*"EQI7&QI-30P7&9C,5QC
- M9C$@/B!/<BP@870@=&AE('9E<GD@;&5A<W0L('1H92!N86UE(&]F('1H92!.
- M24(@9FEL92`H86YD('1H97)E9F]R92!T:&4@87-S;V-I871E9"!C;&%S<R!F
- M:6QE<RD@<VAO=6QD(&)E(&]B=FEO=7,@=&\@9&5T97)M:6YE('-I;7!L>2!B
- M>2!L;V]K:6YG(&%T('1H92!P86YE;"`H;W(@=VEN9&]W*2!N86UE+B`@26X@
- M=&AI<R!W87DL('-I;7!L>2!R=6YN:6YG('1H92!P<F]G<F%M('=I;&P@9VEV
- M92!A;F]T:&5R('!R;V=R86UM97(@82!V97)Y(&=O;V0@:61E82!O9B!T:&4@
- M;V)J96-T('-T<G5C='5R92!O9B!T:&4@<')O9W)A;2P@<VEN8V4@:&4@8V%N
- M('!L86EN;'D@<V5E(&%L;"!O9B!T:&4@<&%N96QS(&%N9"!W:6YD;W=S+"!A
- M;F0@=&AE:7(@;F%M97,L('=H:6QE('1H92!P<F]G<F%M(&ES(')U;FYI;F<N
- M7`H*7&DP7&QI,%QF8S!<8V8P(%P*06=A:6XL(&UA;GD@;FEB<R!D;VXG="!S
- M:&]W('1I=&QE<RX@06YO=&AE<B`H<&]S<VEB;&4I(&-O;G-I9&5R871I;VXZ
- M(&EN9F]R;6%T:6]N(&AI9&EN9RX@268@>6]U(&%R92!D:7-T<FEB=71I;F<@
- M<V]U<F-E(&9O<B!P=6)L:6,@8V]N<W5M<'1I;VX@=&AE;B!I<R!P<F]B86)L
- M>2!N;W0@=VAA="!Y;W4@=V%N="!T;R!D;RX@268@>6]U(&%R92!S96QL:6YG
- M(&%N(&%P<&QI8V%T:6]N+"!Y;W4@;6%Y('=I<V@@=&\@96YC;V1E('-O;64@
- M=&AI;F=S+B!3;VUE('9E;F1E<G,@9&\@8V]N<VED97(@:70@87!P<F]P<FEA
- M=&4N7`I<"@I<8B!)('!R97-U;64@>6]U(&UE86XZ(")S;VUE('!A;F5L<R]W
- M:6YD;W=S(&EN('-O;64@3DE")W,@9&]N)W0@:&%V92!T:71L97,B+B`@37D@
- M<75E<W1I;VX@=V]U;&0@=&AE;B!B93H@=VAY(&1O97-N)W0@=&AE('!A;F5L
- M+W=I;F1O=R!H879E(&$@=&ET;&4_("!7:&%T('=O=6QD(&ET(&AU<G0@=&\@
- M<'5T(&$@=&ET;&4@:6X_("!.;W1E('1H870@=&AE(')U;&4@22!G879E(&1O
- M97,@9VEV92!Y;W4@<V]M92!D:7-C<F5T:6]N(&EN('1H92!C:&]I8V4@;V8@
- M=&AE('1I=&QE.EP*7`H*7'!A<F1<='@U-C!<='@Q,3(P7'1X,38X,%QT>#(R
- M-#!<='@R.#`P7'1X,S,V,%QT>#,Y,C!<='@T-#@P7'1X-3`T,%QT>#4V,#!<
- M9C)<:5QF<S(X7&QI-S(P7&9C,%QC9C`@3W(L(&%T('1H92!V97)Y(&QE87-T
- M+"!T:&4@;F%M92!O9B!T:&4@3DE"(&9I;&4@*&%N9"!T:&5R969O<F4@=&AE
- M(&%S<V]C:6%T960@8VQA<W,@9FEL97,I('-H;W5L9"!B92!O8G9I;W5S('1O
- M(&1E=&5R;6EN92!S:6UP;'D@8GD@;&]O:VEN9R!A="!T:&4@<&%N96P@*&]R
- M('=I;F1O=RD@;F%M92X@($EN('1H:7,@=V%Y+"!S:6UP;'D@<G5N;FEN9R!T
- M:&4@<')O9W)A;2`H=VET:"!T:&4@87!P<F]P<FEA=&4@9&5F875L="!L86YG
- M=6%G92D@=VEL;"!G:79E(&%N;W1H97(@<')O9W)A;6UE<B!A('9E<GD@9V]O
- M9"!I9&5A(&]F('1H92!O8FIE8W0@<W1R=6-T=7)E(&]F('1H92!P<F]G<F%M
- M+"!S:6YC92!H92!C86X@<&QA:6YL>2!S964@86QL(&]F('1H92!P86YE;',@
- M86YD('=I;F1O=W,L(&%N9"!T:&5I<B!N86UE<RP@=VAI;&4@=&AE('!R;V=R
- M86T@:7,@<G5N;FEN9RX*7&DP(%P*"EQP87)D7'1X-3(P7'1X,3`V,%QT>#$V
- M,#!<='@R,3(P7'1X,C8V,%QT>#,R,#!<='@S-S(P7'1X-#(V,%QT>#0X,#!<
- M='@U,S(P7&8P7&9S,C1<9F,P7&-F,"!<"DAO=V5V97(L('EO=2!M86ME(&$@
- M9V]O9"!P;VEN="!A8F]U="!E;F-O9&EN9RX@($ET(&UI9VAT(&)E(&%N(&ES
- M<W5E(&]N('-O;64@<')O:F5C=',N7`H*7&(P(%P*/B`J*BHJ*BHJ*BHJ*BHJ
- M*BHJ*BHJ*BHJ*BHJ*BHJ*EP*/B!<"@I<:5QL:34T,%QF8S%<8V8Q(#X@5VAE
- M;B!G:79E;B!A(&-H;VEC92!O9B!F97=E<B!O8FIE8W1S('1H870@9&\@;6]R
- M92P@=F5R<W5S(&UO<F4@;V)J96-T<R!T:&%T(&%R92!S;6%L;&5R(&%N9"!D
- M;R!L97-S+"!F879O<B!T:&4@=7-E(&]F('-M86QL97(@;V)J96-T<RX@(%EO
- M=2=L;"!F:6YD('1H870@>6]U<B!O8FIE8W1S('=I;&P@9W)O=R!L87)G97(@
- M9'5R:6YG(&1E=F5L;W!M96YT(&%N>7=A>2Y<"@I<:3!<;&DP7&9C,%QC9C`@
- M7`I'96YE<F%L;'D@22=D(&%G<F5E+B!(;W=E=F5R+"!I9B!Y;W4G<F4@=&%L
- M:VEN9R!A8F]U="!M86YA9VEN9R!S87DL(#$P,#`@8VQA<W-E<RP@>6]U)VQL
- M(&9I;F0@82!C97)T86EN(')E9'5N9&%N8WD@<W1A<G1S('1O(&-R965P(&EN
- M+B!/3U`@:6X@9V5N97)A;"!H87,@=&\@9&\@=VET:"!T:&4@;6%N86=E;65N
- M="!O9B!I;F9O<FUA=&EO;BX@1&\@>6]U('=A;G0@=&\@;6%N86=E(&UO<F4@
- M;W(@;&5S<R!T:&EN9W,@=VET:&EN(&$@9FEL93\@1&\@>6]U('=A;G0@=&\@
- M;6%N86=E(&UO<F4@;W(@;&5S<R!T:&EN9W,@86UO;F<@9FEL97,_7`I<"@I<
- M8B!!;B!O8FIE8W0@8V%N(&UA;F%G92!M;W)ET&%N9"!S=&EL;"!B92!S;6%L
- M;"!I;B!T97)M<R!O9B!T:&4@8V]D92!I="!C;VYT86EN<]!I9B!I="!D96QE
- M9V%T97,@:70G<R!W;W)K('1O(&]T:&5R(&]B:F5C=',N("!4;R!U<V4@82!H
- M;W5S92UC;VYS=')U8W1I;VX@;65T87!H;W(Z(#0@8F]A<F1S(&%N9"!S;VUE
- M(&YA:6QS(&UI9VAT(&UA:V4@82!P86YE;#L@,R!O<B`T('!A;F5L<R!M:6=H
- M="!M86ME(&$@=V%L;"P@-"!W86QL<R!A;F0@82!F;&]O<B!M:6=H="!M86ME
- M(&$@<F]O;2P@,R!R;V]M<R!M:6=H="!M86ME(&$@9FQO;W(L(&%N9"`S(&9L
- M;V]R<R!A;F0@82!R;V]F(&UI9VAT(&UA:V4@82!H;W5S92X@($%N9"P@:6X@
- M96%C:"!C87-E+"!T:&4@;V)J96-T(&ES('-M86QLT&5V96X@=&AE(")H;W5S
- M92(@;V)J96-T+EP*"EQB,"!<"E!E;W!L92!A<F4@<W1I;&P@96YA;6]R960@
- M96YO=6=H('=I=&@@3T]0(&5N;W5G:"!T;R!N;W0@<V5E('1H92!S96-O;F0@
- M<VET=6%T:6]N.B`@;V)J96-T<R!A;&QO=R!A(&5N8V%P<W5L:7IA=&EO;B!O
- M9B!R96QA=&5D(&-O9&4@<V\@=V4@8V%N(&%V;VED('-I='5A=&EO;G,@;V8@
- M=&EG:'1L>2!W<F%P<&5D(&-O9&EN9RX@3V)J96-T('-Y<W1E;7,@<W1I;&P@
- M96YD('5P(&)E:6YG('1I9VAT;'D@8F]U;F0@86UO;F<@<V5T<R!O9B!O8FIE
- M8W1S+B!/3U`@:&%S(&YO="`G<V]L=F5D)R!T:&4@<')O8FQE;2P@;VYL>2!P
- M=7-H960@:70@9G5R=&AE<B!B86-K+"!A="!W:&EC:"!S=&%G92!T:&4@<')O
- M8FQE;2!B96-O;65S(&5V96X@8FEG9V5R+B!#;VYS:61E<B!T:&4@:6UP86-T
- M<R!O9B!F879O<FEN9R!S;6%L;&5R(&]B:F5C=',@=VAE;B!Y;W5R(&]B:F5C
- M=',@8F5C;VUE(&EN=&5R9&5P96YD96YT(&%N9"!A8G5N9&%N="Y<"EP*"EQB
- M($ES('1H92`B<F]O;2(@;V)J96-T('1I9VAT;'D@8F]U;F0@=&\@=&AE(")H
- M;W5S92(@;V)J96-T(&9R;VT@;7D@;65T87!H;W(@86)O=F4_("!.;RY<"EP*
- M27,@=&AE(")R;V]M(B!O8FIE8W0@=&EG:'1L>2!B;W5N9"!T;R!T:&4@(F)O
- M87)D(B!O8FIE8W0@9G)O;2!M>2!M971A<&AO<B!A8F]V93\@($YO+B`@270G
- M<R!P97)F96-T;'D@86-C97!T86)L92!T;R!B=6EL9"!T:&4@=V%L;',@;V8@
- M=&AE(')O;VT@=VET:"!A;F]T:&5R(&UA=&5R:6%L("AS=6-H(&%S(&)R:6-K
- M*2P@87,@;&]N9R!A<R!T:&4@<F]O;2!I<R!S=&EL;"!A(')O;VTN("!);B!O
- M=&AE<B!W;W)D<RP@:70G<R!/2R!T;R!I;7!R;W9E('1H92!A;&=O<FET:&TN
- M7`I<"DEF('EO=2!M86ME(&$@;6ES=&%K92!A;F0@9&ES8V]V97(@=&AA="!Y
- M;W5R(')O;VUS(&)U:6QT('=I=&@@8F]A<F1S(&%R92!O8G-O;&5T92`H;6%Y
- M8F4@>6]U('5S960@8F%L<V$@=V]O9#\I+"!A;F0@>6]U(&YO(&QO;F=E<B!W
- M86YT(')O;VUS('1H870@=V%Y("AB=70@;75S="!K965P('EO=7(@;VQD(&)A
- M;'-A+7=O;V0@<F]O;7,@87)O=6YD(&)E8V%U<V4@;V8@<V]M92!P96-U;&EA
- M<B!B86-K=V%R9',@8V]M<&%T86)I;&ET>2!P<F]B;&5M*2P@:G5S="!M87)K
- M('EO=7(@(G)O;VTB(&]B:F5C="!A<R!O8G-O;&5T92`H86YD(&%L<V\@:70G
- M<R!S=7!P;W)T(&]B:F5C=',I('-O(&YO8F]D>2!W:6QL('5S92!I="!A9V%I
- M;B!F;W(@86YY(&YE=R!F;&]O<B!O9B!A;GD@;F5W(&AO=7-E+B`@(%1H96X@
- M8W)E871E(&$@(F)R:6-K+7)O;VUS(B!O8FIE8W0@*&%N9"!I="=S('-U<'!O
- M<G0@;V)J96-T<RD@9F]R(&9U='5R92!U<V4N("!4:&5N+"!K965P(&)O=&@@
- M(G)O;VTB(&]B:F5C=',@*&%N9"!T:&5I<B!S=7!P;W)T(&]B:F5C=',I(&EN
- M('EO=7(@;&EB<F%R>2X@($%L;"!N97<@8V]D92!W:6QL('5S92!T:&4@;F5W
- M(&]B:F5C=',L(&%N9"!E=F5N='5A;&QY('1H92!O;&0@;V)J96-T<R!W:6QL
- M(&1I92!A(&YA='5R86P@9&5A=&@N7`I<"DEN8VED96YT86QL>2P@22!T:&EN
- M:R!T:&ES(&ES(&]N92!O9B!T:&4@;F5A="!T:&EN9W,@;V8@3V)J96-T:79E
- M+4,@*'9E<G-U<R!#*RLI+B`@66]U(&-A;B!C<F5A=&4@;F5W+"!L;V=I8V%L
- M;'DM<F5L871E9"!O8FIE8W0@0VQA<W-E<RP@86YD('!O;'EM;W)P:&EC86QL
- M>2!M97-S86=E('1H96TL('=I=&AO=70@=&AE;2!A;&P@:&%V:6YG('1O(&EN
- M:&5R:70@9G)O;2!T:&4@<V%M92!B87-E(&-L87-S+B`@5&AU<RP@:70G<R!M
- M;W)E(&9O<F=I=FEN9R!O9B!M:7-T86ME<R!I;B!Y;W5R(&EN:71I86P@0VQA
- M<W,@:&EE<F%R8VAY(&1E<VEG;B!T:&%N($,K*R!I<RX@(%=I=&@@0RLK+"!I
- M9B!Y;W4@<&]O<FQY(&1E<VEG;B!Y;W5R(&-L87-S(&AI97)A<F-H>2P@>6]U
- M)W)E('-C<F5W960L('-I;F-E('EO=2=L;"!P<F]B86)L>2!N;W<@:&%V92!T
- M;R!R92UI;7!L96UE;G0@;6%J;W(@<&%R=',@;V8@=&AE($-L87-S(&AI97)A
- M<F-H>2Y<"@I<8C`@7`I))VT@;F5I=&AE<B!F;W(@;W(@86=A:6YS="!L87)G
- M92]S;6%L;"!O8FIE8W1S.R!))VT@9F]R(&%P<&QY:6YG('=H870@8F5S="!S
- M=6ET<R!T:&4@8FEG('!I8W1U<F4N7`I<"CX@7`H^("HJ*BHJ*BHJ*BHJ*BHJ
- M*BHJ*BHJ*BHJ*BHJ*BHJ7`H^(`E<"@I<:5QL:34T,%QF8S%<8V8Q(#X@22!H
- M879E(&YO="P@87,@>65T+"!S965N(&$@<VEN9VQE(&-O;G9I;F-I;F<@<VET
- M=6%T:6]N('=H97)E('!U8FQI8R!I;G-T86YC92!V87)I86)L97,@=V5R92!N
- M96-E<W-A<GD@;W(@979E;B!D97-I<F%B;&4L(&%L=&AO=6=H($D@86T@:&5S
- M:71A;G0@=&\@<V%Y('1H870@=&AE<F4@87)E(&YO;F4N("XN+EP*"EQF8S!<
- M8V8P(%5N;&5S<R!O=&AE<G=I<V4@8V]N=FEN8V5D(&9O<B!S<&5C:6%L(&]C
- M8V%S<VEO;G,L(&%L;"!I;G-T86YC92!V87)I86)L97,@<VAO=6QD(&]N;'D@
- M8F4@;6]D:69I86)L92!B>2!A(&-L87-S(&UE=&AO9"`H:2YE+BP@3D]4(&)E
- M('!U8FQI8RDN("!)="!S:&]U;&0@86QS;R!N;W0@8F4@;6]D:69I86)L92!B
- M>2!M;W)E('1H86X@;VYE(&-L87-S(&UE=&AO9"Y<"@I<:3!<;&DP(%P*270@
- M9&5P96YD<R!O;B!H;W<@(G!U<FES="(@;W(@=&AE;W)E=&EC86P@=G,N('!R
- M86-T:6-A;"!Y;W4@=V%N="!T;R!G970N(%=I=&AI;B!T:&4@<V%M92!M;V1U
- M;&4O8VQA<W,@:70@;6%Y(&)E(&%C8V5P=&%B;&4@=&\@<F5F97(@=&\@=&AE
- M(&EN<W1A;F-E('9A<FEA8FQE('9S+B!T:&4@;65T:&]D+"!E<W!E8VEA;&QY
- M('=H97)E('-P965D(&ES(&-O;F-E<FYE9"Y<"EP*"EQB($EF(&ET)W,@=VET
- M:&EN('1H92!S86UE(&EN<W1A;F-E(&]F(&$@8VQA<W,@*&DN92XL('1H92!S
- M86UE(")M;V1U;&4B/]!W:&%T(&1O('EO=2!M96%N(&)Y(&$@(FUO9'5L92(L
- M(&%N>7=A>3\I+"!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&]F(&$@9VEV96X@
- M:6YS=&%N8V4@;V8@82!C;&%S<R!A<F4@86-C97-S:6)L92!T;R!A;&P@;65T
- M:&]D<R!O9B!T:&%T(&EN<W1A;F-E(&%N>7=A>2P@<F5G87)D;&5S<R!O9B!T
- M:&4@=F%R:6%B;&5S)R!C;&%S<VEF:6-A=&EO;B`H<'5B;&EC+"!P<F]T96-T
- M960L(&]R('!R:79A=&4IT'-O(&EN('1H:7,@8V%S92!T:&5R92!W;W5L9"!B
- M92!N;R!A9'9A;G1A9V4@=&\@9&5C;&%R:6YG(&%N>2!O9B!T:&5M('!U8FQI
- M8RY<"EP*0G5T+"!I9B!Y;W4@87)E('1A;&MI;F<@86)O=70@9&EF9F5R96YT
- M(&EN<W1A;F-E<R!O9B!T:&4@<V%M92!C;&%S<]!W:&%T(')E;&5V86YC92!D
- M;V5S('1H92!F86-T('1H870@=&AE>2!A<F4@;V8@=&AE('-A;64@8VQA<W,@
- M:&%V93\@($D@9W5E<W,@:68@:70@97AE8W5T97,@9F%S=&5R+"!T:&5N('=E
- M('-H;W5L9"!A;&P@:G5S="!G;R!B86-K('1O(&AA=FEN9R!G;&]B86P@=F%R
- M:6%B;&5S(&9O<B!E=F5R>71H:6YG("AA;&$@5VEN9&]Z92D_7`I<"DD@9G5L
- M;'D@97AP96-T('1O(&5V96YT=6%L;'D@96YC;W5N=&5R('-O;64@8V%S92!W
- M:&5R92!T:&4@:6YS=&%N8V4@=F%R:6%B;&5S(&YE960@=&\@8F4@<'5B;&EC
- MT&9O<B!S<&5E9"!O9B!E>&5C=71I;VX@<F5A<V]N<R!A<R!Y;W4@<W5G9V5S
- M="X@($D@:G5S="!H879E;B=T('-E96X@=&AA="!C87-E('EE="X@($%N9"P@
- M=VAE;B!I="!H87!P96YS+"!)(&IU<W0@=&AI;FL@:70@<VAO=6QD(&)E('-U
- M:71A8FQY(&1O8W5M96YT960@:6X@=&AE(&-O9&4@*&DN92XL(&5X<&QA:6YE
- M9"!W:'D@=&AE('!U8FQI8R!D96-L87)A=&EO;G,@=V5R92!N96-E<W-A<GG0
- M86YD(&%L<V\@:6X@;F]N+6%M8FEG=6]U<RP@=F5R>2!S<&5C:69I8R!T97)M
- M<RD@+B`@3W1H97)W:7-E+"!S=&%Y(&%W87D@9G)O;2!P=6)L:6,@9&5C;&%R
- M871I;VYS+EP*"EQB,"!<"CX@(%P*/B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
- M*BHJ*BHJ*EP*/B`@("`@(%P*"EQI7&QI-30P7&9C,5QC9C$@/B!296%L:71Y
- M($-H96-K:6YG(&EN("=#)R!C;V1E("AA<R!W96QL(&%S(&%L;"!O9B!T:&4@
- M)T,G(&QA;F=U86=E(&1E<FEV871I=F5S+"!S=6-H(&%S($]B:F5C=&EV92U#
- M*2!I<R!A8V-O;7!L:7-H960@=VET:"!T:&4@87-S97)T*"D@;6%C<F\N("!"
- M<F%D($-O>"P@=&AE(&-R96%T;W(@;V8@3V)J96-T:79E+4,L(')E8V]M;65N
- M9',@=7-I;F<@87-S97)T<R`H<"X@.3@@86YD(#DY(&]F(&AI<R!B;V]K+"!/
- M8FIE8W0M3W)I96YT960@4')O9W)A;6UI;F<L($%N($5V;VQU=&EO;F%R>2!!
- M<'!R;V%C:"P@,FYD($5D:71I;VXI(&9O<B!296%L:71Y($-H96-K:6YG("AH
- M92!C86QL<R!I="!S;VUE=&AI;F<@96QS92P@=&AO=6=H*2!A;F0@8VQU<W1E
- M<FEN9R!T:&4@8VAE8VMS(&EN=&\@='=O(&=R;W5P<SH@*#$I('!R96-O;F1I
- M=&EO;G,L(&%N9"`H,BD@<&]S=&-O;F1I=&EO;G,N("!4:&4@861V86YT86=E
- M(&]F('5S:6YG(&%S<V5R="@I(&ES('1H870@=&AI<R!D96)U9V=I;F<@8V]D
- M92!C86X@8F4@='5R;F5D(&]F9B!W:71H(&$@8V]M<&EL92UT:6UE('-W:71C
- M:"Y<"@I<:3!<;&DP7&9C,%QC9C`@/B!<"CX@22!D;VXG="!E;G1I<F5L>2!A
- M9W)E92!W:71H('1H:7,@87!P<F]A8V@L(&9O<B!A(&-O=7!L92!O9B!R96%S
- M;VYS.EP*/B`@("!<"CX@02!P<F5C;VYD:71I;VX@87-S97)T('-H;W5L9"!V
- M97)I9GD@=&AA="!T:&4@87)G=6UE;G0@=F%L=65S(&%N9"]O<B!T>7!E<R!A
- M<F4@87,@=&AE>2!S:&]U;&0@8F4@9F]R('1H92!M971H;V0@=&\@=V]R:R!P
- M<F]P97)L>2X@($EN=&5R97-T:6YG;'D@96YO=6=H+"!E>&-E<'0@<&]S<VEB
- M;'D@=VET:"!R96%L;'D@;V)S8W5R92!C;V1E("AA;F0@22!C86XG="!E=F5N
- M('1H:6YK(&]F(&%N(&5X86UP;&4I+"!T:&4@8V]M<&EL97(@86YD+V]R(')U
- M;G1I;64@<WES=&5M('=I;&P@9&\@=&AI<R!F;W(@>6]U+"!S;R!W:'D@9&\@
- M>6]U(&YE960@86X@87-S97)T(&9O<B!T:&ES(&-A<V4_("`H3V)J96-T:79E
- M+4,@:&%S(&$@=6YI<75E(')U;G1I;64@<WES=&5M('1H870@86QM;W-T(&YO
- M(&]T:&5R(&QA;F=U86=E(&AA<RDN7`I<"EEO=2!M:6=H="!B92!A8FQE('1O
- M(&=A:6X@82!F=6QL97(@87!P<F5C:6%T:6]N(&9O<B!P<F5C;VYD:71I;VYS
- M(&)Y(')E861I;F<@(D]B:F5C="!/<FEE;G1E9"!$97-I9VXB(&)Y($)E<G1R
- M86YD($UE>65R+"!W:&EC:"!I<R!W:&5R92!"<F%D($-O>"!P:6-K960@=7`@
- M=&AE(&YO=&EO;B!O9B!P<F5C;VYD:71I;VYS(&%N9"!P;W-T8V]N9&ET:6]N
- M<RY<"EP*5&AE<F4@87)E('-E=F5R86P@=&AI;F=S('1H870@>6]U<B!D:7-C
- M=7-S:6]N(&UI<W-E<RX@02!C;VUP:6QE<B!C86X@8VAE8VL@='EP92!I;F9O
- M<FUA=&EO;B`H:7,@=&AI<R!A;B!I;G0L(&$@8V]N<W0@8VAA<BHL('1H92!C
- M;W)R96-T(&]B:F5C="DL(&)U="!I="!C86YN;W0@9W5A<F%N=&5E('1H92!C
- M;VYD:71I;VX@;V8@=&AA="!A<F=U;65N="`H:7,@=&AI<R!I;G0@8F5T=V5E
- M;B!V86QU97,@02!A;F0@0BP@:7,@=&AE(&-O;G-T(&-H87(J(&$@=6YI<75E
- M('-T<FEN9RP@:7,@=&AI<R!O8FIE8W0@:6YI=&EA;&EZ960@=&\@=&AE('!R
- M;W!E<B!S=&%T92DN($9U<G1H97)M;W)E+"!P<F5C;VYD:71I;VYS(&UA>2!E
- M>'1E;F0@=&\@:6UP;&EC:70@87)G=6UE;G1S("AG;&]B86P@<W1A=&4L(&]B
- M:F5C="!S=&%T92DL('=H:6-H(&%L<V\@;F5E9',@=&\@8F4@=F5R:69I960N
- M($9O<B!E>&%M<&QE.R!A<F4@=V4@8W5R<F5N=&QY('!R:6YT:6YG/R!)<R!T
- M:&4@87-S;V-I871E9"!N:6(@9F]R('1H:7,@;V)J96-T(&%L<F5A9'D@;&]A
- M9&5D+EP*7`I0;W-T8V]N9&ET:6]N<R!A<F4@=')E871E9"!I;B!A('-I;6EL
- M87(@9F%S:&EO;B`H=&AE(&UE=&AO9"!O<&5R871E<R!O;B!S=&%T92!T;R!P
- M<F]D=6-E(&$@<F%N9V4@;V8@<F5S=6QT<SL@87)E('1H92!R97-U;'1S(&EN
- M('1H92!E>'!E8W1E9"!R86YG93\I+EP*7`I!('1H:7)D(&-H96-K:6YG('1H
- M870@:7,@;&5F="!O=70@*$DG;&P@:&%V92!T;R!R92UR96%D($-O>"P@87,@
- M22!B96QI979E(&AE(&UI<W-E<R!T:&ES(&%S('=E;&PI+"!I<R!I;G9A<FEE
- M;G1S+B!4:&%T(&ES+"!W:&%T(&%R92!T:&]S92!S=&%T97,@=VAI8V@@;6%Y
- M(&5F9F5C="!O=71C;VUE('=H:6-H(&AA=F4@;F]T:&EN9R!T;R!D;R!W:71H
- M(&EN<'5T<RX@5&AI<R!I;F-L=61E<R!E;G9I<F]N;65N="!C;VYD:71I;VYS
- M("AM96UO<GDL(&1I<VLL('1H<F5A9',L(&5T8RDL(&=L;V)A;',@86YD('-O
- M;64@;&]C86P@<W1A=&4N7`I<"@I<8B!3;VUE('9E<GD@9V]O9"!P;VEN=',N
- M("!)(&YE960@=&\@<W1U9'D@:70@<V]M92!M;W)E+EP*7`I))W9E(&)E96X@
- M9FEN9&EN9R!T:&%T('1H92!T:&ER9"!C:&5C:VEN9R!Y;W4@;65N=&EO;B`H
- M:6YV87)I96YT<RD@:7,@97-P96-I86QL>2!I;7!O<G1A;G0@=VET:"!$:7-T
- M<FEB=71E9"!/8FIE8W1S+B`@5&AE<V4@='EP97,@;V8@;V)J96-T<R!S965M
- M('1O(&5I=&AE<B!N965D('-T871E+6UA8VAI;F4@;&]G:6,@:6YS:61E(&]F
- M('1H96TL(&]R(&5L<V4@<')O=FED92!S;VUE('-O<G0@;V8@;75T97@M;&]C
- M:VEN9R!M971H;V1S+B`@06YD(&EN(&%N>2!C87-E+"!T;R!I;7!L96UE;G0@
- M<W5C:"!M96-H86YI<VUS+"!T:&4@;V)J96-T(&UU<W0@(G)E;65M8F5R(B!W
- M:&\@<V5N="!E86-H(&UE<W-A9V70<V\@(G-T871E(B!I;F9O<FUA=&EO;B!I
- M<R!Q=6ET92!C;VUM;VXN7`I<"D9O<B!E>&%M<&QE+"!S=7!P;W-E('EO=2!M
- M97-S86=E(&$@<F5M;W1E(&]B:F5C="!T;R!L;V%D(&%N($Y826UA9V4L('=I
- M=&@@=&AE(&EN=&5N="!T;R!M97-S86=E(&ET(&%F=&5R=V%R9',@=&\@871T
- M86-H('-O;64@861D:71I;VYA;"!I;F9O<FUA=&EO;B!T;R!T:&4@:6UA9V4L
- M('1H96X@9FEN86QL>2!M97-S86=E(&ET('1O('-A=F4@=&AE(&EM86=E(&%N
- M9"!I="=S('1A9V=E9"!D871A('1O(&$@9&%T86)A<V4N("!.;W<@<W5P<&]S
- M92!T:&%T(&)E9F]R92!Y;W4@<V5N9"!T:&4@;65S<V%G92!T;R!S879E('1H
- M92!D871A+"!S;VUE(&]T:&5R(')E;6]T92!O8FIE8W0@;65S<V%G97,@:70@
- M=&\@;&]A9"!A(&1I9F9E<F5N="!.6$EM86=E+B`@1&ES87-T97(N+BXN7`I<
- M"E1H92!A8FEL:71Y(&9O<B!A;GD@;V)J96-T(&]N('1H92!N971W;W)K('1O
- M(&UE<W-A9V4@86YY(&]T:&5R(&]B:F5C="!O;B!T:&4@;F5T=V]R:R!C86X@
- M;&5A9"!T;R!C:&%O<R!I9B!S=6ET86)L92!P<F5C875T:6]N<R!A<F5N)W0@
- M=&%K96XN("!!;F0L(&%S($D@<V%I9"!A8F]V92P@=&AE<V4@<')E8V%U=&EO
- M;G,@<V5E;2!T;R!A;'=A>7,@<F5Q=6ER92!S;VUE('-O<G0@;V8@(G-T871E
- M(B!M96UO<GD@9F]R('1H92!O8FIE8W0N7`H*7&(P("XN+EP*7`IP<F]T;V-O
- M;',@87)E(&-O;VPL(&)U="!N;W0@<W5P<&]R=&5D(&]U='-I9&4@3F585"`Z
- M+2A<"EP*7`H*7&(@(%-O/R`Z+2D@7`H*7&(P(%P*7`H^("!<"CX@*BHJ*BHJ
- M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BI<"@I<:5QL:34T,%QF8S%<8V8Q(#X@
- M365T:&]D<R!M=7-T(&%P<&5A<B!I;B!B;W1H('1H92!I;7!L96UE;G1A=&EO
- M;BUM;V1U;&4@86YD(&EN=&5R9F%C92UM;V1U;&4@:6X@=&AE('-A;64@;W)D
- M97(@=&AA="!T:&5Y(&%P<&5A<B!I;B!S=&%N9&%R9"!.95A4(&-L87-S(&1O
- M8W5M96YT871I;VX@+BXN7`H*7&DP7&QI,%QF8S!<8V8P(%P*4V5E:6YG(&%S
- M($YE6%0@:V5E<',@='=E86MI;F<@=&AE:7(@;W=N(&1E9FEN:71I;VYS("AW
- M:71N97-S(#,N,"!D;V-S*2P@86YD(&MN;W=I;F<@<V]M92!O9B!T:&4@<VAO
- M<G1C;VUI;F=S("AL:6ME(&1E;&5G871E(&UE=&AO9"!L;V]K=7`I($DG;2!N
- M;W0@96YA;6]R960@=VET:"!T:&4@<W5G9V5S=&EO;BX@5V4@8G)E86L@=&AI
- M;F=S(&EN=&\@;&]G:6-A;"!G<F]U<&EN9W,@*&5X:7-T96YC92P@86-C97-S
- M;W(L(&DO;RP@971C*2!W:71H:6X@=&AE(&AE861E<B!A;F0@;6]D=6QE(&9I
- M;&5S+B!4:&ES(&%L;&]W<R!A('!R;V=R86UM97(@<75I8VL@86-C97-S('1O
- M(')E;&%T960@<F5G:6]N<R`H=VAI8V@@=V4@9&5E;2!P<F5T='D@:6UP;W)T
- M86YT*2X@26X@9F%C="P@22=D('=A9V5R('EO=2=L;"!E;F-O=6YT97(@;6]R
- M92!P<F]D=6-T:6]N('!R;V)L96US("AI+F4N(&)U9W,I(&)Y(&-O9&4@=&AA
- M="!I<R!S<')E860@;W5T(&%L<&AA8F5T:6-A;&QY('1H870@8VQU<W1E<F5D
- M(&EN=&\@;&]G:6-A;"!G<F]U<',N7`I<"@I<<&%R9%QT>#4V,%QT>#$Q,C!<
- M='@Q-C@P7'1X,C(T,%QT>#(X,#!<='@S,S8P7'1X,SDR,%QT>#0T.#!<='@U
- M,#0P7'1X-38P,%QF,EQB7&9S,CA<9F,P7&-F,"!9;W5R('!O:6YT(&AE<F4@
- M:7,@=V5L;"UT86ME;BX@($EN(&9A8W0L($D@8V]N<VED97)E9"!T:&ES(&%P
- M<')O86-H(&9O<B!Q=6ET92!A('=H:6QE+"!A;F0@979E;B!I;FET:6%L;'D@
- M=W)O=&4@;7D@8V]D92!I;B!T:&4@;6%N;F5R('EO=2!S=6=G97-T+B`@5&AE
- M('!R;V)L96T@=V%S('1H870@:70@:G5S="!W87-N)W0@=&AA="!E87-Y('1O
- M(&-A=&5G;W)I>F4@;6%N>2!O9B!T:&4@;65T:&]D<RP@86YD('=H870@;6%D
- M92!S96YS92!T;R!M92!F;W(@82!C871E9V]R>2!F;W(@82!M971H;V0@9&ED
- M;B=T(&YE8V5S<V%R:6QY(&UA:V4@<V5N<V4@=&\@;W1H97)S+"!A;F0@=FES
- M82UV97)S82X@($ET('-E96US('1H870L(&9O<B!T:&]S92!G<F%Y(&%R96%S
- M('=H97)E(&$@;65T:&]D(&-O=6QD(&%C='5A;&QY(&)E(&UU;'1I<&QY+6-A
- M=&5G;W)I>F5D+"!E=F5R>6]N92!H87,@=&AE:7(@;W=N(&ED96$@;V8@=VAE
- M<F4@:70@8F5L;VYG<RX@($%F=&5R(&%W:&EL92P@8VAA;W,@<V5E;7,@=&\@
- M96YS=64N7`H*7'!A<F1<='@U,C!<='@Q,#8P7'1X,38P,%QT>#(Q,C!<='@R
- M-C8P7'1X,S(P,%QT>#,W,C!<='@T,C8P7'1X-#@P,%QT>#4S,C!<9C!<8C!<
- M9G,R-%QF8S!<8V8P(%P*"EQP87)D7'1X-38P7'1X,3$R,%QT>#$V.#!<='@R
- M,C0P7'1X,C@P,%QT>#,S-C!<='@S.3(P7'1X-#0X,%QT>#4P-#!<='@U-C`P
- M7&8R7&)<9G,R.%QF8S!<8V8P($D@<W1I;&P@=&AI;FL@:70G<R!B971T97(@
- M=&\@86QP:&%B971I>F4@=&AE;2!W:71H:6X@=&AE:7(@<F5S<&5C=&EV92!G
- M<F]U<',L('=I=&@@0VQA<W,@;65T:&]D<R!A="!T:&4@=&]P+"!I;G-T86YC
- M92!M971H;V1S(&EN('1H92!M:61D;&4L(&%N9"!D96QE9V%T92!M971H;V1S
- M(&%T('1H92!B;W1T;VTN7`I<"DAO=V5V97(L('1H;W-E(#,@9W)O=7!S('-H
- M;W5L9"!O;FQY(&)E('-U8BUG<F]U<',@;V8@=&AE(&)I9V=E<B!G<F]U<',@
- M:6UP;&EE9"!B>2!I;G1E<F9A8V4@;V)J96-T<R!A8W)O<W,@;75L=&EP;&4@
- M*'-U8BEP<F]J96-T<RX@(%1H:7,@=VEL;"!B92!A('!A<G0@;V8@;7D@(G-U
- M8BUP<F]J96-T<R(@9W5I9&5L:6YE<RY<"@I<<&%R9%QT>#4R,%QT>#$P-C!<
- M='@Q-C`P7'1X,C$R,%QT>#(V-C!<='@S,C`P7'1X,S<R,%QT>#0R-C!<='@T
- M.#`P7'1X-3,R,%QF,%QB,%QF<S(T7&9C,%QC9C`@7`IR96=A<F1S+%P*7`I+
- M979I;EP*+2U<"@I<9C$@2V5V:6X@4W9E;B!"97)G("`@("`@("`@("`@("`@
- M+R`@("`O("`@("\@("`@+R`@4"`O("!A("\@(&<@+R`@92`O("!S7`IK979I
- M;D!P86=E<RYC;VT@("`@("`@("`@("`@("\@("`@+R`@("`O("`@("\@("`@
- M+R`@("`O("`@("\@("`@+R!<"E!A9V5S(%-O9G1W87)E($EN8RX@("`@("`@
- M("`O("`@("\@("`@+R`@("`O("`@("\@("`@+R`@("`O("`@("\@("!<"C8Q
- M.2TT.3(M.3`U,"`@7`H*7'!A<F1<='@Q,34R7'1X,C,P-%QT>#,T-39<='@T
- M-C`X7'1X-3<V,%QT>#8Y,3)<='@X,#8T7'1X.3(Q-EQT>#$P,S8X7'1X,3$U
- M,C!<9F,P7&-F,"!<"EP*+2U<"DYE=FEN(%!R871T+"!$:6=I=&%L(%1E8VAN
- M;VQO9WDL($EN="=L("`@($]R96TL(%5T7`I.95A4;6%I;"!P<F5F97)R960L
- M(&)U="!/3DQ9(&%T(&UY(%)%04P@96UA:6P@861D<F5S<SH@;F5V:6Y`9'1I
- 3;G0N9'1I;G0N8V]M7`I<"@I]"DP@
- `
- --
- ---
- root root@dtint.dtint.com
- Digital Technology Int. (801)226-2984
- 500 W. 1200 South, Orem UT, 84057 FAX (801) 226-8438
-