Practical Geometry Algorithms: With C++ Code 9798749449730

This book presents practical geometry algorithms with computationally fast C++ code implementations. It covers algorithm

4,911 821 10MB

English Pages 194 [195] Year 2021

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Practical Geometry Algorithms: With C++ Code
 9798749449730

Citation preview

PRACTICAL GEOMETRY ALGORITHMS with C++ Code

Daniel Sunday PhD

Copyright © 2021, Daniel Sunday All rights reserved. ISBN 9798749449730 Self-published with Amazon KDP First Printing: May 2021.

TABLE OF CONTENTS PREFACE ................................................................................................................... V INTRODUCTION ....................................................................................................... VI LINEAR ALGEBRA .................................................................................................... 1 NOTATION................................................................................................................. 1 COORDINATE SYSTEMS ............................................................................................. 1 POINTS AND VECTORS............................................................................................... 3 Basic Definitions ................................................................................................. 3 Vector Addition ................................................................................................... 3 Scalar Multiplication ............................................................................................ 4 Affine Addition ..................................................................................................... 5 Vector Length ..................................................................................................... 6 VECTOR OPERATIONS ............................................................................................... 8 Determinants....................................................................................................... 8 Dot Product ......................................................................................................... 8 2D Perp Operator ..............................................................................................11 2D Perp Product ................................................................................................12 3D Cross Product ..............................................................................................13 3D Triple Product ...............................................................................................15 AREA ..........................................................................................................................17 TRIANGLES ...............................................................................................................17 Ancient Triangles ................................................................................................17 Modern Triangles ................................................................................................18 QUADRILATERALS .....................................................................................................19 POLYGONS ...............................................................................................................22 2D Polygons........................................................................................................22 3D Planar Polygons ............................................................................................23

Standard Formula ........................................................................................................23 Quadrilateral Decomposition ........................................................................................25 Projection to 2D ...........................................................................................................25

IMPLEMENTATIONS ....................................................................................................26 REFERENCES ............................................................................................................30 LINES .........................................................................................................................31

LINE EQUATIONS .......................................................................................................32 DISTANCE FROM A POINT TO A LINE ...........................................................................34 The 2-Point Line .................................................................................................34 The 2D Implicit Line ............................................................................................35 The Parametric Line ...........................................................................................36 DISTANCE FROM A POINT TO A RAY OR SEGMENT .......................................................37 IMPLEMENTATIONS ....................................................................................................38 REFERENCES ............................................................................................................40

i

POINT IN POLYGON .................................................................................................41 THE CROSSING NUMBER ...........................................................................................42 Edge Crossing Rules ..........................................................................................43 THE WINDING NUMBER..............................................................................................44 ENHANCEMENTS .......................................................................................................46 Bounding Box or Ball ..........................................................................................46 3D Planar Polygons ............................................................................................47 Convex or Monotone Polygons...........................................................................47 IMPLEMENTATIONS ....................................................................................................48 REFERENCES ............................................................................................................49 PLANES .....................................................................................................................51 PLANE EQUATIONS ....................................................................................................52 Implicit Equation .................................................................................................52

Normal Implicit Equation ..............................................................................................52

Parametric Equation ...........................................................................................53 Barycentric Coordinates .....................................................................................54 Representation Conversions ..............................................................................54

Barycentric Coordinate Computation ...........................................................................54

DISTANCE OF A POINT TO A PLANE .............................................................................56 IMPLEMENTATIONS ....................................................................................................57 REFERENCES ............................................................................................................58 LINE, SEGMENT, AND PLANE INTERSECTIONS .................................................59

LINE AND SEGMENT INTERSECTIONS ..........................................................................59 Parallel Lines ......................................................................................................59 Non-Parallel Lines ..............................................................................................60 PLANE INTERSECTIONS..............................................................................................61 Intersection of a Line and a Plane ......................................................................61 Intersection of 2 Planes ......................................................................................62

Direct Linear Equation .................................................................................................62 Line Intersect Point ......................................................................................................63 3 Plane Intersect Point .................................................................................................63

Intersection of 3 Planes ......................................................................................64 IMPLEMENTATIONS ....................................................................................................65 REFERENCES ............................................................................................................69 RAY AND TRIANGLE INTERSECTIONS.................................................................71 INTERSECTION OF A RAY/SEGMENT WITH A PLANE ......................................................71 Intersection of a Ray/Segment with a Triangle ...................................................71 INTERSECTION OF A TRIANGLE WITH A PLANE .............................................................73 Intersection of a Triangle with a Triangle............................................................74 IMPLEMENTATIONS ....................................................................................................75 REFERENCES ............................................................................................................77

ii

DISTANCE BETWEEN LINES........................................................................................79 DISTANCE BETWEEN LINES .............................................................................................79 Distance between Segments and Rays...................................................................81 CLOSEST POINT OF APPROACH (CPA) ............................................................................83 IMPLEMENTATIONS .........................................................................................................84 REFERENCES .................................................................................................................87 INTERSECTIONS FOR A SET OF SEGMENTS ...........................................................89 A SHORT SURVEY ..........................................................................................................89 THE BENTLEY-OTTMANN ALGORITHM ..............................................................................90 THE SHAMOS-HOEY ALGORITHM ....................................................................................93 APPLICATIONS ...............................................................................................................94 Simple Polygons ......................................................................................................94

Test if Simple ....................................................................................................................94 Decompose into Simple Pieces.........................................................................................94

Polygon Set Operations ...........................................................................................96 Planar Subdivisions .................................................................................................96 IMPLEMENTATIONS .........................................................................................................96 REFERENCES ................................................................................................................101 BOUNDING CONTAINERS ..........................................................................................103 LINEAR CONTAINERS ....................................................................................................104 The Bounding Box .................................................................................................104 The Bounding Diamond .........................................................................................105 The Convex Hull ....................................................................................................107 The Minimal Rectangle ..........................................................................................108 QUADRATIC CONTAINERS .............................................................................................110 The Bounding Ball .................................................................................................110

A Fast Approximate Ball ..................................................................................................112

The Bounding Ellipsoid ..........................................................................................113 IMPLEMENTATIONS .......................................................................................................113 REFERENCES ...............................................................................................................115 CONVEX HULL OF A PLANAR POINT SET ..............................................................117

CONVEX HULLS............................................................................................................117 2D HULL ALGORITHMS .................................................................................................118 The "Graham Scan" Algorithm ..............................................................................118 Andrew's Monotone Chain Algorithm ....................................................................121 IMPLEMENTATIONS .......................................................................................................123 REFERENCES ...............................................................................................................125 CONVEX HULL APPROXIMATION .............................................................................127 THE BFP APPROXIMATE HULL ALGORITHM ...................................................................127 Error Analysis ........................................................................................................129 IMPLEMENTATIONS .......................................................................................................130 REFERENCES ...............................................................................................................133

iii

CONVEX HULL OF A SIMPLE POLYLINE .................................................................135 BACKGROUND ..............................................................................................................135 SIMPLE POLYLINE HULL ALGORITHMS ...........................................................................136 The Basic Incremental Strategy ............................................................................136 The Melkman Algorithm .........................................................................................137 IMPLEMENTATIONS .......................................................................................................140 REFERENCES ...............................................................................................................141 LINE AND CONVEX POLYTOPE INTERSECTION .....................................................143 INTERSECT A SEGMENT AND A 2D CONVEX POLYGON ....................................................143 INTERSECT A SEGMENT AND A 3DCONVEX POLYHEDRON...............................................146 IMPLEMENTATIONS .......................................................................................................149 REFERENCES ...............................................................................................................151 EXTREME POINTS OF CONVEX POLYGONS ..........................................................153 POLYGON EXTREME POINT ALGORITHMS ......................................................................153 Brute Force Search................................................................................................154 Binary Search ........................................................................................................154 DISTANCE OF A POLYGON TO A LINE .............................................................................157 IMPLEMENTATIONS .......................................................................................................158 REFERENCES ...............................................................................................................160 POLYGON TANGENTS ................................................................................................161 TANGENTS: POINT TO POLYGON ...................................................................................161 Brute Force ............................................................................................................163 Binary Search ........................................................................................................163 TANGENTS: POLYGON TO POLYGON ..............................................................................164 Brute Force ............................................................................................................165 Linear Search ........................................................................................................165 Binary Search ........................................................................................................167 IMPLEMENTATIONS .......................................................................................................167 REFERENCES ...............................................................................................................171 POLYLINE DECIMATION .............................................................................................173 OVERVIEW ...................................................................................................................173 VERTEX CLUSTER REDUCTION .....................................................................................174 THE DOUGLAS-PEUCKER ALGORITHM ...........................................................................175 Convex Hull Speed-Up ..........................................................................................178 IMPLEMENTATIONS .......................................................................................................178 REFERENCES ...............................................................................................................181 C++ CODE INDEX.........................................................................................................183 PRIMITIVE FUNCTIONS ..................................................................................................183 APPLICATION FUNCTIONS .............................................................................................185

iv

PREFACE This book presents practical geometry algorithms with computationally fast C++ code implementations. It covers algorithms for fundamental geometric objects, such as points, lines, rays, segments, triangles, polygons, and planes. These determine their basic 2D and 3D properties, such as area, distance, inclusion, and intersections. There are also algorithms t o compute bounding containers for these objects, including a fast bounding ball, various convex hull algorithms, as well as polygon extreme points and tangents. And there is a fast algorithm for polyline simplification using decimation that works in any dimension. These algorithms have been used in practice for several decades, and are robust, easy to understand, code, and maintain. And they execute very rapidly in practice, not just in theory. For example, the winding number point in polygon inclusion test, first developed by the author in 2000, is the fastest inclusion algorithm known, and works correctly even for nonsimple polygons. There is also a fast implementation of the Melkman algorithm for the convex hull of a simple polyline. And much more. If your programming involves geometry, this will be an invaluable reference. Also, all code given in this book can be downloaded in a zip file available at GeometryAlgorithms.com/code.html.

v

INTRODUCTION In 2000, I started the website GeometryAlgorithms.com, which has now been active for 2 decades. Originally, I used it to support master-level courses in Computer Graphics and Computational Geometry that I was teaching in the Johns Hopkins University Engineering for Professionals (JHEP) program. Eventually, that website took on a life of its own and became an international resource with a constant stream of visitors. All the algorithms presented were completed by 2001, although for the next two decades, there was some feedback from users that resulted in improvements. So, basically, these algorithms and the C++ code implementations have withstood the test of time. As a result, I have now (in 2021), decided to convert that website to a book that would be a permanent record of these fundamental algorithms. The website still exists but has reduced content. And all C++ code from that site is in this book can be downloaded from GeometryAlgorithms.com/code.html. Many of the algorithms given here were inspired by the excellent book “Computational Geometry in C” by Joseph O’Rourke (1998), which I used in my classes. This book can be viewed as a supplement for and an extension of O’Rourke’s book, with new improved material. For example, O’Rourke presents a “point in polygon” algorithm that uses the polygon crossing number of a ray from the point. We present a similar algorithm but use the winding number instead by counting signed crossings. This gives the correct result for nonsimple polygons and is implemented with code that executes faster than the crossing number code. Other algorithms we present either extend or improve some of those given by O’Rourke. However, O’Rourke’s book has material that we do not cover, such as the triangulation of polygons. But we present a lot of new material, such as bounding containers, the convex hull of a simple polyline, and polyline decimation. These all have practical fast C++ code implementations. This book starts with a chapter on basic linear algebra that provides the math needed to implement the algorithms. It was not relegated to an appendix since the ideas and notation are integral to the algorithm descriptions. Then, the next eight chapters cover basic geometric objects in 2D and 3D, such as lines, rays, segments, triangles, polygons, and planes. Then, the final eight chapters give algorithms for geometric bounding containers, convex hulls, extreme points and tangents of polygons, and polyline reduction using decimation. There are six chapters are about convex hulls and applications that use hulls to find extreme points and tangents. New algorithms and code are given for constructing hulls, namely, Andrew’s monotone chain, the fast BFP hull approximation, and the Melkman O(n) algorithm for the hull of a simple polyline. Finally, we give a polyline decimation approximation algorithm, with an improved implementation for the Douglas-Peucker algorithm. vi

LINEAR ALGEBRA The algorithms we will present only use basic linear algebra. This will only include points and vectors, but not matrices. However, we occasionally use 2x2 and 3x3 determinants to simplify some formulas.

Notation This book uses the following conventions for notation. Scalars

lower case italic

a, b, x, y

Points

UPPER CASE ITALIC

𝑃, 𝑄, 𝑅 𝑃 𝑝 ,𝑝 ,…,𝑝

Vectors

𝐥𝐨𝐰𝐞𝐫 𝐜𝐚𝐬𝐞 𝐛𝐨𝐥𝐝

𝐚, 𝐛, 𝐮, 𝐯, 𝐰 𝐯 𝑣 ,𝑣 ,…,𝑣

Geometric Objects

𝐔𝐏𝐏𝐄𝐑 𝐂𝐀𝐒𝐄 𝐁𝐎𝐋𝐃

𝐋, 𝐑, 𝐒, 𝐓, 𝚫, 𝛀, 𝚿

Functions

Regular font

Area Ω , f x

Font of the result

𝑃 𝑡 𝑥 𝑡 ,𝑦 𝑡 𝐯 𝑥, 𝑦

Coordinate Systems Points are positions in space. When first introduced in Greek geometry, there was no formal method for measuring where a point was located. Points were primitive entities. Much later in history, in the early seventeenth century, Fermat and Descartes introduced the idea of using a linear coordinate system to specify point locations, using algebraic equations to describe geometric objects (such as lines), and using algebra to solve geometric problems (such as computing the intersection point of two lines). We will only use rectangular linear coordinates, and no other methods for referencing points, such as polar or spherical coordinates.

1

A (rectangular linear) coordinate system has an origin as an absolute reference point whose location is fixed, and non-zero axes as a set of direction vectors that determine the directions in which to make measurements. A coordinate system can specify points in n-dimensional space as an ordered n-tuple of numbers 𝑥 , 𝑥 , …, 𝑥 and the numeric rule: start at the origin, go distance 𝑥 in the direction of the first axis, stop, now go distance 𝑥 in the direction of the second axis, stop, and so on until done with 𝑥 . The final location that one reaches is the point specified. This is much like finding the treasure on a pirate's map; for example, start at the old oak tree as the origin, first go east 10 paces, second go north 20 paces, and third dig down 3 feet to locate the treasure. The ordered set of numbers 𝑥 , 𝑥 , …, 𝑥 is called the coordinate of the point it specifies. And a coordinate system is said to span the set of points that it can specify. The set of all these points is called the coordinate space. A specific set of axes spanning a coordinate space is called a coordinate frame of reference or a basis for the space. Different coordinate systems can span the same coordinate space, just as the pirate may have used any of several origin trees or direction axes for his treasure map. The axes are said to be independent if they do not depend on each other, meaning that none of them can written as a combination of the others. When independent, they are a minimal set of axes for the coordinate space, and the number of axes in the set is the dimension of the space.

2

Points and Vectors Basic Definitions A scalar represents magnitude and is given by a real number a, b, x, y. A point in n-dimensional space is given by an n-tuple 𝑃 𝑝 , 𝑝 ,…,𝑝 where each coordinate 𝑝 is a scalar number. We will write 𝑃 𝑝 as a shorthand for this n-tuple. This position of a point is relative to a coordinate system with an origin 0 = (0,0,…,0) and unit axes u1 = (1,0,…,0), u2 = (0,1,…,0), ..., and un = (0,0,…,0,1). So, a 3-dimensional (3D) point is given by a triple 𝑃 𝑝 , 𝑝 , 𝑝 whose coordinates are relative to the axes (1,0,0), (0,1,0), and (0,0,1) which are commonly referred to as the x, y, and z-axes. Because of this established convention, we sometimes write 𝑃 𝑥, 𝑦 for 2D points and 𝑃 𝑥, 𝑦, 𝑧 for 3D points. A vector represents magnitude and direction in space and is given by an n-tuple 𝐯 𝑣 , 𝑣 , … , 𝑣 where each coordinate 𝑣 is a scalar. We also write 𝐯 𝑣 as a shorthand for the vector's n-tuple. The vector 𝐯 can be viewed as the magnitude and direction of the line segment going from the origin 0 = (0,0,…,0) to the point 𝑉 𝑣 , 𝑣 , … , 𝑣 . However, the vector 𝐯 is not this point, which only gives a standard way of visualizing the vector. But we can also visualize the vector as a directed line segment from any initial point 𝑃 𝑝 to a second point 𝑄 𝑞 . Then, the vector from P to Q is given by: Point Difference Definition

𝐯

𝑄

𝑃

𝑞

𝑝

showing that the difference of any two points is considered to be a vector. So, vectors do not have a fixed position in space, but can be located at any initial base point P. For example, a traveling vehicle can be said to be going east (direction) at 50 mph (magnitude) no matter where it is located. We could even visualize a field of vectors, one at each point of a geometric object, such as vectors for the wind direction and speed at each point on the surface of the earth.

Vector Addition The sum of two vectors is given by adding their corresponding coordinates. That is, for two vectors 𝐯 𝑣 and 𝐰 𝑤 , we have: Vector Addition Definition

𝐯

3

𝐰

𝑣

𝑤

Also, one can add a vector 𝐯 given by:

𝑣 to a point 𝑃

Point+Vector Addition Definition

𝑝 to get another point,

𝑄

𝑃

𝐯

𝑝

𝑣

The resulting point Q is considered to be the displacement, or “translation”, of the point P in the direction of and by the magnitude of the vector 𝐯 𝑄 𝑃. Vector addition satisfies the following properties: 𝐮

𝐯

𝐰

𝐯

𝐰

𝐰

𝑃

𝐯

𝐰

𝐮

𝐯

𝐰

[Association]

𝐯

[Commutation] 𝑃

𝐯

𝐰

[Point+Vector Association]

The property of “Point+Vector Association” means that result of translating a point by two sequentially applied vector displacements is the same as a single translation by the sum of those two vectors.

Scalar Multiplication Multiplication of a vector 𝐯

𝑣 by a scalar number 𝑎 is given by

Scalar Multiply Definition

𝑎𝐯

𝑎𝑣

This represents scaling the size of a vector by a magnification factor of a. So, for example, 2𝐯 is twice the size of 𝐯, and 𝐯⁄2 is half of 𝐯. Scalar multiplication has the properties: 𝑎 𝑏𝐯

𝑎𝑏 𝐯

[Scalar Association]

𝑎

𝑏 𝐯

𝑎𝐯

𝑏𝐯

[Scalar Distribution]

𝑎 𝐯

𝐰

𝑎𝐯

𝑎𝐰

[Vector Distribution]

4

Scalar multiplication can be used to interpolate positions between two points P and Q. To get an intermediate point R between P and Q, given by a ratio r, one first scales the vector 𝐯 𝑄 𝑃 to r 𝐯, and then adds it to P to get 𝑅 𝑃 𝑟𝐯 𝑃 𝑟 𝑄 𝑃 1 𝑟 𝑃 𝑟 𝑄. For example, to get the midpoint M 𝑃 𝑄 ⁄2. between P and Q, use 𝑟 1⁄2 to compute 𝑀 This interpolation equation is also used to represent the line through P and Q as a function of a scalar parameter, with the parametric line equation 𝑃 𝑡

1

𝑡 𝑃

𝑡𝑄

which is valid because one can use “affine addition” to combine the points in a coordinate-free manner. Affine Addition We have already seen that the difference between two points can be considered as a vector. However, in general, it makes no sense to add two points together. Points denote an absolute position in space independent of any coordinate system describing them. Blindly adding individual coordinates together would give different answers for different coordinate reference frames. Nevertheless, there is one special case, known as affine addition, where one can add points together as a weighted sum. In fact, in the previous section on scalar multiplication, we did just that to represent the points on a line going through two fixed points P and Q. More generally, given m points P0 , …, Pm-1, one can define: Affine Sum Definition

𝑃

𝑎 𝑃 where

𝑎

1

where the coefficients, which can be any real number (positive or negative), must add up to 1. One can interpret this sum as the center of mass for weights ai located at the points Pi. A negative coefficient can be thought of as a negative mass, like a helium balloon. This center of mass is uniquely determined in absolute space regardless of what coordinate system and frame of reference are being used. The affine sum has the property: 𝑃

𝐯

∑ 𝑎 𝑃

𝐯

∑ 𝑎 𝑃 v

5

[Translation Invariance]

Since the line equation is an affine sum, given equal weights 𝑎 𝑎 1⁄2, we get that 𝑃 1⁄2 𝑃 𝑃 𝑃 𝑃 /2 is the midpoint of the line segment from P0 to P1. Further, every point on the line through P0 and P1 is uniquely represented by a pair of numbers 𝑎 , 𝑎 with 𝑎 𝑎 1. Putting 𝑎 𝑡 results in the parametric line equation: 𝑃 𝑡

1

𝑡 𝑃

𝑡𝑃

where each point on the line is represented by a unique real number t. Similarly, in 3D space, the affine sum of three non-collinear points 𝑃 , 𝑃 , 𝑃 defines a point in the plane going through these points. So, every point P in the plane of the triangle Δ𝑃 𝑃 𝑃 is uniquely represented by a triple 𝑎 , 𝑎 , 𝑎 with 𝑎 𝑎 𝑎 1. This triple is called the barycentric coordinate relative to 𝑎 𝑃 𝑎 𝑃 on the plane. Δ𝑃 𝑃 𝑃 . of its associated point 𝑃 𝑎 𝑃 Setting 𝑎 𝑠 and 𝑎 𝑡, then 𝑎 parametric plane equation. 𝑃 𝑠, 𝑡

1

𝑠

𝑡 𝑃

1

𝑠 𝑠𝑃

𝑡, and we get the following 𝑡𝑃

𝑃

𝑠𝐮

𝑡𝐯

where 𝐮 𝑃 𝑃 and 𝐯 𝑃 𝑃 are independent vectors spanning the plane. The pair 𝑠, 𝑡 is called the parametric coordinate of a point P relative to 𝚫𝑃 𝑃 𝑃 , and there is a unique parametric coordinate for each point of the plane. It is good to know that the parametric line and plane equations are valid in any n-dimensional space, and they can represent any linear or planar subspace. Similarly, any m-dimensional subspace 0 𝑚 𝑛 can be represented by a parametric equation with one base point 𝑃 and m independent vectors 𝐯𝒊 that span the subspace. Vector Length The length of a vector 𝐯 is denoted by |𝐯|, and is defined as Vector Length Definition

|𝐯|

𝑣

This gives the standard Euclidean geometry (Pythagorean) length for a line segment representing the vector. For a 2D vector 𝐯 𝑣 , 𝑣 , one has |𝐯|𝟐 𝑣 𝑣 , which is the Pythagorean theorem for the diagonal of a rectangle.

6

Vector length has the following properties: |𝑎𝐯|

|𝑎||𝐯|

[Scalar magnification]

|𝐯

𝐰|

|𝐯|

|𝐰|

[Triangle Inequality]

|𝐯

𝐰|

|𝐯|

|𝐰|

[Reverse Triangle Inequality]

|𝐯

𝐰|𝟐

|𝐯|𝟐 2|𝐯||𝐰| cos 𝜃 where 𝜃 ∠ 𝐯, 𝐰

|𝐰|𝟐

[The Cosine Law]

A unit vector is one whose length = 1. One can scale any vector 𝐯 to get a unit vector 𝐮 that points in the same direction as 𝐯 by computing 𝐮 𝐯⁄|𝐯|. The process of scaling 𝐯 to a unit vector 𝐮 is called normalization, and one says that 𝐯 has been normalized. One can think of 𝐮 as the direction of 𝐯 since 𝐯 |𝐯|𝐮 simply scales 𝐯 to the magnitude |𝐯|.

7

Vector Operations Determinants In most linear algebra texts, determinants are introduced in the context of matrices. But historically determinants appeared long before matrices. Initially, they were used to solve simultaneous linear equations. Eventually, in the 18th and 19th centuries, they evolved into matrix theory. We do not use matrices explicitly in our algorithms, so only describe the notation for determinants and how to compute their value. A determinant is represented as a 2-dimensional square array of variables or numbers with n rows and n columns surrounded by vertical bars, from which a scalar quantity gets computed. In effect, the determinant is a function mapping the array to a single scalar value. Originally, the array elements were the coefficients for a collection of n linear equations in n variables, and the determinant was used in solving those equations. When matrices are introduced, an 𝑛 𝑛 matrix array M defines a linear transformation M(𝐯) of n-dimensional vectors. Then, the determinant of M gives the amount by which M expands or contracts the volume of a transformed region. We will only use the determinants for n = 2 or 3. They are defined as follows. 2x2 Determinant

𝑎 𝑐

𝑏 𝑑

3x3 Determinant

𝑎 𝑑 𝑔

𝑏 𝑒 ℎ

ad

𝑐 𝑓 𝑖

bc

𝑎

𝑓 𝑖

𝑒 ℎ

𝑎𝑒𝑖

𝑏

𝑏𝑓𝑔

𝑑 𝑔 𝑐𝑑ℎ

𝑓 𝑖

𝑐 𝑐𝑒𝑔

𝑑 𝑔

𝑒 ℎ 𝑏𝑑𝑖

𝑎𝑓ℎ

The Dot Product The dot product (aka inner product or scalar product) of two vectors 𝑤 , is defined as the (scalar) number given by the sum of 𝐯 𝑣 and 𝐰 the products of their corresponding coordinates. This operation is denoted by a dot • and defined by Dot Product Definition

𝐯•𝐰

8

𝑣 𝑤

For example, if 𝐯 𝑣 ,𝑣 𝐯•𝐰 𝑣 𝑤 𝑣 𝑤 .

and 𝐰

𝑤 ,𝑤

are 2D vectors, then

The dot product has the following properties. 𝐯•𝐯

|𝐯|𝟐

[Vector Length]

𝑎𝐯 • 𝑏𝐰

𝑎𝑏 𝐯 • 𝐰

𝐯•𝐰

𝐰•𝐯

𝐮• 𝐯

𝐰

|𝐯 • 𝐰|

[Scalar Association] [Commutation]

𝐮•𝐯

𝐮•𝐰

[Additive Distribution]

|𝐯||𝐰|

[Cauchy-Schwarz Inequality]

An amazing mathematical formula for the dot product is: |𝐯||𝐰| cos 𝜃

𝐯•𝐰

where 𝜃 ∠ 𝐯, 𝐰 is the angle between the vectors v and w. This formula is used extensively in computer graphics since it speeds up computation in many situations by avoiding direct usage of an inefficient trigonometric function. Further, to compute cos 𝜃 of the angle between two vectors, the following product of two normalized unit vectors is convenient: 𝐯 𝐰 • |𝐯| |𝐰|

cos 𝜃 It is useful to note that when |𝐯|

|𝐰|

1, then cos 𝜃

𝐯 • 𝐰.

Interestingly, the dot product cosine formula is equivalent to the well-known trigonometric identity known as “The Cosine Law”. Say we have a triangle with vertices A, B, C, and the side opposite each vertex has length 𝑎, 𝑏, 𝑐 respectively. If we know 𝑎, 𝑏, and the angle θ between them, as shown in the diagram, then we can calculate 𝑐. Define the vectors 𝐯 𝐵 𝐶 and 𝐰 𝐴 𝐶, corresponding to a and b. Then, the side c corresponds to the vector 𝐯 𝐰 𝐵 𝐴, and we can calculate: 𝑐

|𝐯 𝐰| 𝐯•𝐯 2 𝐯•𝐰 |𝐯| |𝐰| 2|𝐯||𝐰| cos 𝜃 𝑎 𝑏 2𝑎𝑏 cos 𝜃 9

𝐰•𝐰

Similarly, given the Cosine Law, one can derive the vector dot product cosine formula. Amazingly, the early Greeks knew the Cosine Law [Euclid’s Elements, Book 2, Props 12 and 13], even though they did not have algebra and trigonometry at the time. For the acute angle case, it was stated in purely geometric terms by Proposition 13. In acute-angled triangles, the square on the side opposite the acute angle is less than the sum of the squares on the sides containing the acute angle by twice the rectangle contained by one of the sides about the acute angle, namely that on which the perpendicular falls, and the straight line cut off within by the perpendicular towards the acute angle. Another useful fact about the dot product cosine formula (implicitly used in Euclid’s Prop 2-13) is that it can be interpreted geometrically as the projection of one vector onto the other. So, if 𝐮 is a unit vector, then 𝐮 • 𝐰 is the length of the perpendicular projection of 𝐰 onto 𝐮, as shown in this diagram.

|𝑃

𝑃|

|𝐰| cos 𝜃

𝐮•𝐰

Additionally, when two vectors v and w are perpendicular, they are said to be normal to each other, and this is equivalent to their dot product being zero, that is, 𝐯 • 𝐰 0. This is a remarkably simple and efficient perpendicularity test. Because of this, for any vector 𝐯 𝑣 , 𝑣 , … , 𝑣 one can easily construct perpendicular vectors by zeroing all components except 2, flipping those two, and reversing the sign of one of them, for example, 𝑣 , 𝑣 , 0, … 0 , 0, 𝑣 , 𝑣 , 0, … ,0 , etc. The dot product of any of these with the original vector 𝐯 is always 0, and when these vectors are nonzero, they are all perpendicular to 𝐯. For example, in 3D space with 𝐯 𝑣 , 𝑣 , 𝑣 , the two vectors 𝐰𝟏 𝑣 , 𝑣 , 0 , and 𝐰𝟐 0, 𝑣 , 𝑣 , when nonzero, are a basis for the unique plane through the origin and perpendicular to 𝐯. Another important and useful consequence of the dot product formula is that, for |𝜃| 180°, we know the following.

10

90°

They are perpendicular

𝐯•𝐰

0 ⟺ |𝜃| 0 ⟺ |𝜃|

90°

𝜃 is an acute angle

𝐯•𝐰

0 ⟺ |𝜃|

90°

𝜃 is an obtuse angle

𝐯•𝐰

The 2D Perp Operator We can define an operator on the 2D plane that gives a counterclockwise (ccw) normal (i.e., perpendicular) vector of v to be 2D Perp Operator Definition

𝐯

𝑣 ,𝑣

𝑣 ,𝑣

This operator is called the perp operator. The perp vector 𝐯 is the normal vector pointing to the left (ccw) side of the vector 𝐯 as shown in the diagram.

The perp operator has the following properties. 𝐯 •𝐯 |𝐯 |

0

[Perpendicular]

|𝐯|

[Preserves length] 11

𝑎𝐯

𝑎 𝐯

𝑎𝐯

𝑏𝐰

𝐯

𝑎𝐯 𝑎𝐯

𝐯

[Scalar Association] 𝑏𝐰

[Linear]

𝐯

[Anti-potent]

The 2D Perp Product Also, in 2D space, there is another useful scalar product of two vectors 𝐯 and 𝐰, the perp product (aka the 2D exterior product or outer product), which is denoted with a ⊥ , and defined by 2D Perp Product Definition

𝐯⊥𝐰

𝐯 •𝐰

𝑣 𝑤

𝑣 𝑤

𝑣 𝑤

𝑣 𝑤

The perp product has the following properties. 𝐯⊥𝐯

0

𝑎𝐯 ⊥ 𝑏𝐰 𝐯⊥𝐰 𝐮⊥ 𝐯 𝐯⊥𝐰

[Nilpotent] 𝑎𝑏 𝐯 ⊥ 𝐰

[Scalar Association]

𝐰⊥𝐯 𝐰

[Antisymmetric]

𝐮⊥𝐯 𝐯•𝐰

𝐮⊥𝐰 |𝐯||𝐰|

[Additive Distribution] [Lagrange Identity]

Also, for the 2D perp product, we have another useful formula: 𝐯⊥𝐰

|𝐯||𝐰| sin 𝜃

which can be used to compute sin 𝜃 from 𝐯 and 𝐰. And if |𝐯| sin 𝜃 𝐯 ⊥ 𝐰.

|𝐰|

𝟏, then

Moreover, geometrically the perp product gives the (signed) area of the 2D parallelogram spanned by 𝐯 and 𝐰, as shown in the diagram: Area ▱

𝑏ℎ |𝐯||𝐰||sin 𝜃 | 𝐯⊥𝐰

12

So, to compute the area of a 2D triangle with vertices 𝑃 𝑃 𝑃 , define the edge vectors at 𝑃 as 𝐯 𝑃 𝑃 and 𝐰 𝑃 𝑃 . Then, since a triangle is half of a parallelogram, we get the (signed) area of 𝚫𝑃 𝑃 𝑃 as Area 𝚫𝑃 𝑃 𝑃

𝐯 ⊥ 𝐰 /2

which is a very efficient formula for area. This signed area is positive when the vertices 𝑃 𝑃 𝑃 are oriented counterclockwise and it is negative when they are oriented clockwise, so it can be used to test for the orientation of a triangle. This can also be used to test for which side of the directed line through 𝑃 𝑃 the point 𝑃 lies on. It is left side of 𝑃 𝑃 when the area is positive; it is on the line when the area = 0, and it is on the right side when the area is negative. If one only wants to test the sign of the area, dividing by 2 is not necessary. Similarly, the 2D perp product can be used to determine which side (left or right) of one vector another vector is pointing, since for |𝜃| 180°, we know the following. 𝐯⊥𝐰

0⟺𝜃

0 or 180°

They are collinear

𝐯⊥𝐰

0⟺0

𝜃

𝐰 is left of 𝐯

𝐯⊥𝐰

0⟺0

𝜃

180° 180°

𝐰 is right of 𝐯

The 3D Cross Product The 3D cross product (aka 3D outer product or vector product) is defined for two 3D vectors, say 𝐯 𝑣 , 𝑣 , 𝑣 and 𝐰 𝑤 , 𝑤 , 𝑤 , and it is another 3D vector. 3D Cross Product Definition

𝐯

𝑣 𝑤

𝐰

13

𝑣 𝑣 𝑤 , 𝑤

𝑣 𝑣 𝑤 , 𝑤

𝑣 𝑤

The cross product has the following properties. 𝐯

𝐯

𝟎

𝑎𝐯

𝑏𝐰

𝐯

𝐰

𝐮

𝐯

𝐯 |𝐯

0,0,0 𝑎𝑏 𝐯 𝐰

𝐰

𝐰

[Scalar Association]

𝐯

[Antisymmetric]

𝐮

𝐰 •𝐯 𝐰|

[Nilpotent]

𝐯

𝐮

𝐯 𝐰 •𝐰

𝐰

[Additive Distribution]

0

[Normality]

|𝐯||𝐰|

𝐯•𝐰

[Lagrange Identity]

However, the cross product is not associative with itself, and it is not distributive with the dot product. Instead, one has the following formulas. These are not often used in computer graphics but sometimes can streamline computations since dot products are easier to compute than cross products. Note that the formulas for left and right association are different. 𝐮 𝐮

𝐯

𝐰

𝐮•𝐰 𝐯

𝐯•𝐰 𝐮

[Left Association]

𝐮•𝐯 𝐰

[Right Association]

𝐯

𝐰

𝐮•𝐰 𝐯

𝐮• 𝐯

𝐰

𝐮

𝐚 𝐮

𝐯 •𝐰

𝐛 • 𝐯 𝐰 𝐚•𝐯 𝐛•𝐰 𝐯

𝐰

𝐯

𝐰

[• Association] [Binet-Cauchy Identity] 𝐚•𝐰 𝐛•𝐯

𝐮

𝐰

𝐮

𝐯

𝟎

[Jacobi Identity]

Using the Lagrange Identity, we can compute that: |𝐯

𝐰|𝟐

𝟐

|𝐯||𝐰|

𝐯•𝐰

|𝐯|𝟐 |𝐰|𝟐 1

𝟐

cos 𝜃

|𝐯|𝟐 |𝐰|𝟐 sin 𝜃 which demonstrates the cross product formulas: |𝐯

𝐰|

|𝐯||𝐰||sin 𝜃 |

𝐯

𝐰

|𝐯||𝐰| sin 𝜃 𝐮, with |𝐮|

1 and 𝐮 • 𝐯

𝐮•𝐰

0

where 𝜃 ∠ 𝐯, 𝐰 . The vector 𝐮 is perpendicular to both 𝐯 and 𝐰, and geometrically points outward from the 𝐯𝐰-plane using a right-hand rule. 14

Further, the magnitude |𝐯 𝐰| is the area of the parallelogram spanned by 𝐯 and 𝐰 as shown in the diagram.

Area ▱

𝑏ℎ |𝐯||𝐰||sin 𝜃 | |𝐯 𝐰|

This fact makes the cross product useful for doing 3D area computations. For example, for a 3D triangle 𝚫𝑃 𝑃 𝑃 , with edge vectors 𝐯 𝑃 𝑃 and 𝐰 𝑃 𝑃 , one can compute its area as Area 𝚫𝑃 𝑃 𝑃

|𝐯 | 𝑃

𝐰| 𝑃

𝑃

𝑃 |

Another important consequence of the cross product formula is that if 𝐯 and 𝐰 are perpendicular unit vectors, then |𝐯 𝐰| is also a unit vector. And the three vectors 𝐯, 𝐰, and 𝐯 𝐰 form an orthogonal coordinate frame of reference (or basis) for 3D space. This is used in 3D graphics to simplify perspective calculations from different observer viewpoints. Further, in 2D space, there is a relationship between the embedded cross product and the 2D perp product. One can embed a 2D vector 𝐯 𝑣 , 𝑣 in 3D space by appending a third coordinate equal to 0, namely 𝐯, 0 𝑣 , 𝑣 , 0 . Then, for two 2D vectors 𝐯 and 𝐰, the embedded 3D cross product is 𝐯, 0

𝐰, 0

0,0, 𝑣 𝑤

𝑣 𝑤

0,0, 𝐯 ⊥ 𝐰

whose only non-zero component is equal to the perp product 𝐯 ⊥ 𝐰. The 3D Triple Product Another useful geometric computation is the 3D (scalar) triple product, which is defined as

15

3D Triple Product Definition

𝐮𝐯𝐰

𝐮• 𝐯

𝐰

𝑢 𝑣 𝑤

𝑢 𝑣 𝑤

𝑢 𝑣 𝑤

This product has the properties: 𝐮𝐯𝐰

𝐯𝐰𝐮

𝐰𝐮𝐯

𝐮𝐯𝐰

𝐮𝐰𝐯

𝐮𝐯𝐰 𝐮

𝐮

𝐯

[Even-Parity Invariant] [Anti-Symmetric]

𝐮

𝐰

Geometrically, the triple product is equal to the volume of the parallelepiped (the 3D analog of a parallelogram) defined by the three vectors 𝐮, 𝐯 and 𝐰 starting from the same corner point as shown.

Volume ▱

𝐮𝐯𝐰

To understand this, recall that |𝐯 𝐰| is the area of the base (parallelogram), and the projection of 𝐮 onto the normal vector 𝐯 𝐰 gives a perpendicular altitude with height |𝐮| cos 𝜃 . The volume is then the product of the base area with this height, which yields the formula. Further, this is a signed volume, whose sign depends on the orientation of the “coordinate frame” basis vectors 𝐮, 𝐯 and 𝐰. Using this formula, we can also get the volume of a 3D tetrahedron 𝚫 𝑃 𝑃 𝑃 𝑃 with 4 vertices 𝑃 𝑥 ,𝑦 ,𝑧 for i=0,3. The volume of this tetrahedron is 1/6 that of the parallelepiped spanned by the vectors 𝐮 𝑃 𝑃, 𝐯 𝑃 𝑃 , and 𝐰 𝑃 𝑃 . And then Vol 𝚫 𝑃 𝑃 𝑃 𝑃

𝐮𝐯𝐰

16

456789 ÿ9ÿÿ5ÿÿ7 ÿ75 5 ÿ ÿÿ ÿ 569ÿ89 5 ÿ ÿ ÿ 58 ÿ ÿ6 ÿ 95895ÿ99ÿ5ÿ9ÿÿÿ  9ÿ695ÿ5 56789 ÿ7 ÿÿ7  ÿ5 ÿ9ÿ 569 5 ÿ 

13!"#2$

0!%2!&ÿ13!"#2$

(5ÿ)9 5ÿ9ÿÿ5ÿ9ÿ75 6ÿ* 8 ÿ9ÿ9 ÿ ÿ9ÿ+8, ÿ ÿ- 5 ÿ95ÿ+8ÿ9ÿ7589ÿ5ÿ 9ÿÿ9 6ÿ 9ÿ 9ÿ.89ÿ95ÿ57 ÿ5 9ÿ6ÿ9  ÿ79ÿ95 9ÿ95ÿ56ÿÿ75 6ÿ ÿ98ÿ9ÿÿ5ÿÿ9  

ÿÿ5ÿ 9ÿÿ/ÿ9 6ÿ 9ÿ 9ÿ0ÿ15ÿ5ÿ9ÿ 67ÿ89ÿ5665 ÿ58 ÿÿ2 3313##2#4"1356ÿ 13!"#26ÿ 5ÿ79ÿ ÿ7 ÿ 989 5 ÿ  ÿ9ÿ 9ÿ5ÿÿ9  ÿ9ÿ ÿ 9 5  99 5 ÿ88ÿ+8 ÿ5ÿ56789 ÿ9ÿ77  8ÿ 9 ÿ5ÿ9ÿ957ÿ9 56ÿ9ÿ .5ÿ67ÿ ÿ5 ÿ- 5ÿ9ÿ 9ÿ5ÿ95ÿ ÿ7ÿ ÿ/ÿ5ÿÿ9  ÿ ÿ5ÿ9  ÿÿ9 ÿ96ÿ9 ÿ9 ÿ ÿ 58 ÿ95ÿ96 ÿ9ÿ9  ÿ ÿ 9ÿÿ8 ÿ ÿ98 9 5 569ÿ9ÿ 9ÿ5ÿ9ÿ9  ÿ5ÿ9ÿÿ/ÿ ÿ  ÿÿ 9ÿÿ 2

9 59ÿ+8 9ÿ8ÿ567899 5 ÿ ÿ ÿ56ÿ9ÿ9ÿ99ÿ9  ÿ 9ÿ+8  ÿÿ5 8 9ÿ ÿ98ÿÿ9ÿ6ÿÿ: ÿ59 5 ÿ56ÿ;8 ÿ*> (4,ÿ86 9ÿ ÿ5 ?ÿ568ÿ*ÿ9A,ÿ5ÿÿÿÿ8 9 5 ÿ5ÿ9ÿ 9ÿ5ÿ 9 9ÿ ÿBC592ÿ56ÿ 95  ÿ99 89ÿ9 ÿ89ÿ95ÿ9 6ÿ*ÿ(4,EF 62 17

01232ÿ56768ÿ932ÿ 12ÿ 2 1ÿÿ 12ÿ26ÿ9 ÿÿÿ 12ÿ2232 23ÿ1232ÿ932ÿ 232  9 239ÿ939  ÿÿ 1ÿ3 9ÿ1ÿ9 011ÿ22 ÿ9ÿ9  9  ÿ 12ÿÿ932ÿ3 ÿ ÿ2!  ÿ 2 ÿ 12 2 1ÿ56768ÿ3ÿ 12ÿ 39 2#ÿ23 2!ÿ3 9 2 12ÿ329  ÿ 99 ÿ 39 2ÿ 32 2ÿÿ012 ÿ 0ÿ9 2ÿ9 ÿ 2ÿ2ÿ932ÿ$ 0  % 0 ÿ 0ÿ9 2ÿ 2ÿ9 ÿ 13226ÿÿ02ÿ9 ÿ92ÿ 12ÿ9 2ÿÿ9 ÿÿ932ÿ 1 9&92 ÿ ÿ 12ÿ$ 0 ÿ92ÿ7ÿ12 ÿ 12ÿ3 9ÿ3ÿ9329ÿ ÿ

'()*+,ÿ.+/0,12*3

432ÿ322 6ÿ 93  ÿ ÿ 12ÿ567 1ÿ2 3ÿ0 1ÿ8293 2ÿ9 ÿ9239 6ÿ  293ÿ9 239 32ÿ 20ÿ 2ÿ3 9ÿ3ÿ9329ÿ: ÿÿ2  9 ÿ92ÿ;8ÿ1ÿ3ÿ9ÿ8ÿ 39 2ÿ0 1ÿ23 2ÿ ÿ

 ÿ 6ÿ 2ÿ 2 

?ÿ@8ÿ2 3ÿ;A6ÿB646"B?Cÿ*64 1ÿD=ÿ 6 6ÿ4ÿ 1   9ÿ ÿEFEGHEÿJKLMNHGLOPNLGQ566ÿ7 ÿ ÿ 6469ÿ 6ÿ 1ÿ456ÿ976ÿ 6ÿR ÿ7ÿ   72 7467 ÿ ÿ 64ÿ456ÿ 61459ÿ ÿ456ÿ ÿ9269ÿ86ÿSÿUÿVÿWÿ712ÿ456ÿ966646 86ÿXÿYÿ#SZUZVZW$[ÿ561ÿ456ÿ767ÿ ÿ ÿ9ÿ 61ÿ8\ 55ÿ9ÿ71ÿ7761ÿ964ÿ  7ÿ:ÿ 16ÿ926ÿ9ÿ66 ÿ 6145ÿ97ÿWÿYÿ'ÿ4561ÿ6 57 6ÿ7ÿ471 6ÿ#55ÿ9ÿ7 79ÿ $ÿ712ÿ459ÿ  7ÿ62 69ÿ4 ÿ6 1)9ÿ 16 :1ÿ 261ÿ 167ÿ7 687ÿ79ÿ7 672ÿ1 462ÿ456ÿ767ÿ ÿ7ÿ 717ÿ77 6 7ÿ9ÿ456 714 26ÿ ÿ456ÿ 99ÿ 2 4ÿ ÿ4 ÿ727614ÿ626ÿ 64 9ÿ* ÿ ÿ71ÿD@ÿ 717 77 6 7ÿ ÿ6ÿ57 6\ 19

01ÿ345ÿ6789ÿ 87 ÿ

ÿ ÿ

5ÿ897ÿ  

697 9ÿ7ÿ71ÿÿÿ 5ÿ8ÿÿ6 ÿ9ÿ ÿ8 71 ÿ08ÿÿ717 8 ÿ 7 18871 ! "85ÿ ÿ1ÿ#$%&'$#$(ÿ*+#,$&-#'.$#-5ÿ1 ÿ 1ÿ /8 ÿ78ÿ ÿ71ÿÿ/    7  ÿ0ÿ17 ÿ2 711ÿ37 8ÿ/79 ÿ71ÿ45647ÿ08ÿ7ÿ871ÿ898ÿ89 ÿ9 : 7 ÿ2 711;ÿ7/ ÿ 8ÿ697 9ÿ6ÿ7  ÿ3?ÿ@7AB6CÿD>EF75=9>

G1ÿ235ÿ17ÿ53ÿ6617ÿH>ÿ6215ÿ14ÿ1ÿ7ÿ055167ÿ6ÿ53ÿE>ÿ6215ÿ70ÿ3 53ÿ3ÿ303ÿ42617ÿ23ÿÿ#3623ÿ56ÿ703ÿ341ÿ43 IJKLMLNÿPIQRSIÿTUVIÿWXÿJYZÿ[\UVIY ÿ ]V^[V[\_J`ÿ[\UVIÿ[Xÿ[\UVIÿabcXÿUVIÿVÿd T ÿÿÿÿUVIÿÿÿÿ]VÿeÿfYÿÿÿÿggÿIhLÿÿ]UVMUViÿVRjkLQÿS\RVILQ 45

ÿ ÿÿÿÿ11ÿ2334ÿ5673896ÿ 22ÿ 9 ÿ3ÿ56 ÿ43293 ÿÿÿÿ37ÿ 6ÿ 9 ÿÿ3ÿ56 ÿ43293ÿ ÿÿÿÿÿÿÿÿÿÿ73

ÿ84 7 ÿ 2 ÿ82 ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿ 5752ÿ2 5ÿ3ÿÿÿÿÿ11ÿ82 ÿ! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿÿ11ÿ ÿ# 2 ÿ84ÿ5 7 5ÿ7965ÿ3ÿ $% ÿÿÿÿÿÿÿÿ& ÿÿÿÿÿÿÿÿ 2 ÿÿÿÿÿÿÿÿÿÿ73

ÿ 3 7 ÿ 2 ÿ82 ÿÿ'ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿ 5752ÿ7965ÿ3ÿÿÿÿ11ÿ82 ÿ! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(("ÿÿÿ11ÿ ÿ# 2 ÿ 3ÿ5 7 5ÿ7965ÿ3ÿ $% ÿÿÿÿÿÿÿÿ& ÿÿÿÿ& ÿÿÿÿ7 587ÿ"ÿÿÿÿ11ÿ)*ÿ+),ÿ ÿ ÿ385  ÿ56 ÿ43293 ÿ &

-./01.23ÿ5678ÿ97:;7:?/1ÿ0.ÿ608ÿ56/ÿ80>/ÿ/AA7B7/:B2ÿ08ÿ56/ÿ0:0.@?/1ÿ0.CÿD6=83ÿ87:B/ÿ75ÿ78ÿ>@1/ÿ0BB=105/ÿ7:ÿ/56@;ÿ5@ÿ;/5/1>7:/ÿ7:B.=87@:ÿ@Aÿ0ÿE@7:5ÿ7:ÿ0:ÿ01?751012ÿ[email protected]@I/;ÿA=156/1ÿ?2ÿ1/0110:/:5057@:ÿ@Aÿ9:JK:[email protected]ÿ?@*ÿ0224ÿ'6ÿ; ;ÿ ÿA4ÿ 516ÿ #112765ÿ ÿ1ÿ ÿ52ÿ51ÿÿ72#16ÿ#16ÿ1ÿÿ56(ÿ5ÿ )#12ÿ ÿ85Bÿ'ÿÿ!"5C*ÿ+77165$4ÿ8ÿÿ6ÿÿ267#52ÿ756# 218ÿÿ12(6ÿ,1ÿÿ564ÿ5ÿ'ÿ'ÿ1'ÿ6ÿÿ6Cÿ#16*

DEFEGHIFJKÿLMNEIJO

+1ÿ6ÿ56$ÿ786164ÿ852ÿ1ÿÿ52582#ÿ6ÿ5164ÿ16ÿ#56ÿ25#ÿ2ÿ12 :1ÿ1ÿÿ'1ÿ#7ÿ16ÿAÿ567ÿPÿ:$ÿ72#16ÿ)#12ÿ ÿ567ÿ *ÿ964ÿ()6ÿ16ÿ16ÿÿ16ÿ%ÿÿ567ÿ'1ÿ616525ÿ6ÿ72#16 )#12ÿNÿ567ÿQ4ÿ2ÿÿ5ÿ6525ÿR6465>140Sÿ>T.6103/ÿ12ÿ16ÿ16ÿÿ56ÿ%ÿU 658$ '2ÿVÿ567ÿWÿ52ÿ25ÿ68:2ÿ'#ÿ52ÿ#112765ÿ'6ÿÿ56ÿ25)ÿ1 ÿ340X0/ÿÿ567ÿÿY6Z0Zÿ[>S134ZÿNÿ567ÿQ*ÿ+674ÿ'6ÿ 4ÿ 4ÿ567ÿ 4ÿ6ÿ ÿÿ67ÿÿ256(ÿ\ÿ ÿ *

9ÿ52ÿ1ÿ52582ÿ V]Wÿÿ2227ÿ1ÿ5ÿÿR6465>140SÿS334?0/61>ÿ1ÿ ÿ25)ÿ1ÿ\*ÿ9ÿ16ÿ^ÿÿ16ÿ56ÿ7(ÿ1ÿ\ÿ'6)2ÿ16ÿ1ÿÿ#16716ÿVÿ ÿ4ÿWÿ

4ÿ12ÿVÿ_ÿWÿ ÿAÿÿ2ÿ 5#ÿ#16716ÿ#122167ÿ1ÿ16ÿ7(*ÿ+674ÿÿ)2# 1ÿ\ÿ52ÿ()6ÿ:$ÿ 4ÿ 4ÿ567ÿ * 53

01234567284ÿ 2 86175

ÿÿÿÿÿÿÿ!"#$%&'"($ÿ$**"+(&!'%,ÿ-./0ÿ12324ÿ5ÿ ÿ6ÿÿÿÿÿ7ÿ8ÿ 9ÿ:ÿ;ÿ?0>10>@A Bÿÿ?0ÿ>10ÿ;ÿ>@ÿ10>@Aÿÿ!#3?$"(>!#""=$ 5@A"@)="9 ( 5B#!=" #"3C  ( ("5 (@%B2 @A@)5B@%B2."#3(BD "%@A(@%B22E"%@A(@)23'!(BFA@%B2!"@A"(" BG)@%B2!"@)"3

H5#==$9 " =5!#"=($(3

75 588380123

(

####5"#$5"##(#$55  " ##$#"IDJK#!=J3' " (## #!J(  3?67(5 " ##L3>!#"## (MNOMMOPQRST&4##()**U," 5 (MNOMPMNOVTPO("!#I3"$5 W!#"####5$="!#" 3X!(5"#""##3 59

01234256346ÿ28ÿ6982 ÿ4 64 65ÿ ÿ6823ÿ2ÿ9ÿ123ÿ13ÿ136ÿ 236ÿ89 ÿÿ9 81ÿ 268ÿ13ÿ 6ÿ1 6

236ÿÿ 9ÿ28ÿ 66ÿ6288ÿ9ÿ36ÿÿ84 ÿ 9ÿÿ!ÿÿ!ÿÿ"ÿ#ÿ$ÿ%ÿ!ÿ'(ÿ!ÿÿ) ÿÿ 63ÿ 28ÿ28ÿ6*2+9 63ÿ1ÿ 6ÿ41352213ÿ 9ÿ%ÿ!ÿ#ÿ1ÿ816ÿÿ, 24 ÿ28ÿ 6ÿ896ÿ98ÿ ÿ1ÿ9

ÿ(ÿ$3ÿ-.ÿ 28ÿ28ÿ931 6ÿ6ÿ154ÿ41352213ÿ ÿ$  28ÿ41352213ÿ 1 58ÿ136ÿ 98ÿ ÿ935ÿ 6ÿ232326ÿ 2368ÿ96ÿ412342563ÿ/35ÿ2ÿ136ÿ 236 ÿ31ÿ 6ÿ1 6ÿ28ÿ9ÿ2326ÿ8663ÿ 63ÿ2ÿ28ÿ 6ÿ412342563ÿ236864213ÿ01,6+6ÿ2ÿ1

2368ÿ96ÿ2326ÿ86638ÿ 63ÿ 6 ÿ9 ÿ1ÿ9 ÿ31ÿ1+6 9ÿ$3ÿ 28ÿ4986ÿ81 +6 1ÿÿ935ÿ184 ÿ 9ÿÿ!ÿÿ935ÿ1ÿ!ÿ1ÿ$ÿ 6ÿ8663ÿ236+9 8ÿ213ÿ935ÿ213ÿ96 5284123ÿ 66ÿ28ÿ31ÿ236864213ÿ5 6,286ÿ236864ÿ 6ÿ236+9 8ÿ823ÿ9ÿ935ÿ23 1692138ÿ1ÿ6ÿ ÿ 63ÿ 6ÿ236864213ÿ8663ÿ28ÿ ÿ 28ÿ,1 8ÿ23ÿ93 ÿ52638213

6789:;=ÿ?@8>A

B 63ÿ 6ÿ,1ÿ 2368ÿ1ÿ86638ÿ96ÿ31ÿ99

6 ÿ 6 ÿ2 ÿ236864ÿ23ÿ9ÿ32*6ÿ123ÿ$3ÿ-. C4 25693ÿ8946ÿ232326ÿ 2368ÿ9 ,9 8ÿ236864ÿ$3ÿ 2 6ÿ526382138ÿ 6 ÿ89

ÿ288ÿ694 1 6ÿ935ÿ51ÿ31ÿ236864ÿDÿ2ÿ 6 ÿ236864ÿ 63ÿ 62ÿ 2369ÿ14642138ÿ131ÿ9ÿ-.ÿ 936ÿ,2

9 81ÿ236864ÿE1ÿ136ÿ493ÿ82 ÿ6824ÿ1ÿ,1ÿ411523968ÿ1ÿ, 24 ÿFÿ935ÿ#ÿ96ÿ31ÿ99

6  416ÿ 6ÿ-.ÿ236864213ÿ123ÿGÿ9ÿH$ÿ935ÿ$ÿ1ÿ 186ÿ,1ÿ411523968ÿ935ÿ 63ÿ68 2ÿH$ÿ!ÿ$ÿ1ÿ9

ÿ411523968ÿ1ÿ416ÿ 6ÿ-.ÿ236864213ÿ123ÿ4138256ÿ 6ÿ,1ÿ 2368 935ÿ 6ÿ988142965ÿ+6418ÿ23ÿ 6ÿ5299

ÿ, 66ÿ 1ÿ566236ÿH$ÿ,6ÿ 9+6ÿ 6ÿ+641ÿ6*9 2 ÿ ÿ/ÿ 6 236864213ÿ 6ÿ+641ÿ ÿ28ÿ663524 9ÿ1ÿ ÿ935ÿ 28ÿ28ÿ6*2+9 63ÿ1ÿ 6ÿ6 154ÿ41352213ÿ 9ÿ ÿE1 +23ÿ 28ÿ6*9213ÿ,6ÿ6

I16ÿ 9ÿ 6ÿ56312391ÿ ÿ13 ÿ, 63ÿ 6ÿ 2368ÿ96ÿ99

6 ÿ98ÿ6+218 ÿ52848865 E22 9 ÿ81 +23ÿ1ÿ$ÿ,6ÿ6

60

012ÿ42567859 6 ÿ9 2ÿ 12ÿ 972ÿ ÿ 6ÿ 85ÿ 852ÿ ÿ954ÿ 16 4ÿ65ÿ2ÿ67 24 652ÿ8ÿ2ÿ95 ÿ 6ÿ56ÿ6 1ÿÿ954ÿÿ622 ÿ5685ÿ28 12 ÿ8 ÿ256 1ÿ 6ÿ2 ÿ 12 85 2 2 865ÿ685 ÿÿÿ!"ÿÿ#!" $ 12 ÿ8ÿ652ÿ6ÿ 12ÿ 6ÿ852 ÿ8 ÿ9ÿ858 2ÿ 2725 ÿ!6 ÿ9ÿ 9"ÿ 9ÿ% &ÿ 125ÿ 12ÿ85 2 2 ÿ685 ÿ8 85ÿ 12ÿ 2725 ÿ65ÿ125ÿ ÿ!6 ÿ ÿ6 ÿ9ÿ 9"ÿÿ6 1ÿ852 ÿ9 2ÿ 2725 ÿ 125ÿ6 1 6 865ÿ9 972 2 ÿ954ÿÿ7 ÿ2ÿ85ÿ 12ÿ'%&(ÿ85 2 9ÿ6 ÿ 12ÿ 2725 ÿ 6ÿ85 2 2 ÿ) 16 1

18 ÿ 6 54 ÿ 872ÿ256 1ÿ 12ÿ642ÿ6 ÿ 12ÿ85 2 2 865ÿ6ÿ 6ÿ 2725 ÿ8 ÿ9ÿ8 ÿ4289 2ÿ 852 795ÿ 289ÿ9 2 ÿ5224ÿ 6ÿ2ÿ1224ÿ! 22ÿ6 ÿ872725 9 865ÿ85 2 2 *+,*-2725 !""

./012ÿ4152672859:17 ;912ÿÿ6 ÿ85 2 2 ÿ8 ÿ85ÿ9ÿ 852ÿ685 ÿ?2 ÿ;ÿ2ÿ825ÿ ÿ954ÿ 12ÿ952ÿ>ÿÿ2ÿ825ÿÿ9

12ÿ9 972 8ÿ2@ 9 865Aÿ 685 ÿB%ÿ65ÿ8 ÿ954ÿ9ÿ56 79ÿ2 6 ÿ ÿC2ÿ8 ÿ12ÿ8ÿ;ÿ8 ÿ9 92ÿ 6ÿ>ÿÿÿ 2 85ÿ8ÿ ÿ181ÿ7295 ÿ 19 ÿ 12ÿ852ÿ48 2 865ÿ2 6 ÿDÿ8 ÿ2 2548 9 ÿ 6ÿ 12ÿ952ÿ56 79ÿ1ÿ

18 ÿ8 ÿ 2ÿ 125ÿ;ÿ954ÿ>ÿ9 2ÿ9 92ÿ954ÿ28 12 ÿ522 ÿ85 2 2 ÿ6 ÿ2 2ÿ;ÿ82 ÿ 6 9ÿ85ÿ 12 952ÿ>ÿÿ+8 E685 52 ÿ6 ÿ68584252ÿ95ÿ2ÿ42 2 78524ÿÿ 2 85ÿ12 12 ÿ95ÿ652ÿ 288 685 ÿ6ÿ;ÿ 9ÿ%ÿ8 ÿ65 98524ÿ85ÿ>ÿFÿ 19 ÿ8 ÿ12 12 ÿ8 ÿ 9 8 82 ÿ 12ÿ8788 ÿ852ÿ2@ 9 865Aÿ  ÿ 12ÿ852ÿ954ÿ952ÿ9 2ÿ56 ÿ9 92ÿ 125ÿ;ÿ954ÿ>ÿÿ85 2 2 ÿ85ÿ9ÿ 58@ 2ÿ685 ÿ!"ÿ181ÿ8 67 24ÿ 85ÿ9ÿ72 164ÿ 8789 ÿ 6ÿ 12ÿ652ÿ6 ÿ 12ÿ85 2 2 865ÿ6ÿ 6ÿ852 ÿ85ÿ*+ÿG65 842 ÿ 12 489 97A

) ÿ 12ÿ85 2 2 ÿ685 ÿ 12ÿ2 6 ÿ ÿ8 ÿ2 2548 9 ÿ 6ÿ1Fÿ12 2ÿ 018 ÿ8 ÿ2@ 8925 ÿ 6ÿ 12ÿ46 ÿ 64  ÿ6548 865Aÿ ÿ-685ÿ2ÿ2 A

61



01ÿ345ÿ6785ÿ9ÿ7 ÿ ÿ178735ÿ 5 583ÿ1 ÿÿ3ÿÿ3458ÿ85ÿ 3ÿ4 ÿ3ÿ45ÿ34 3ÿ ÿ3ÿ571 34 3ÿ3455ÿ7 ÿ 8ÿ7835 5378ÿ53558ÿ345ÿ 5 583ÿ 8ÿ345ÿ6 85ÿÿ ÿ 7375ÿ ÿ3455ÿ7 ÿ 8 7835 5378ÿ734ÿ345ÿ6 85ÿ458ÿ 

!"#$%#&"'(!ÿ(*ÿ+ÿ,-.!#%

08ÿ/0ÿ3ÿ6 85 ÿ1ÿ 8ÿ12ÿ 5ÿ57345ÿ  6656ÿÿ345ÿ7835 53ÿ78ÿ ÿ 78 65ÿ 3 7 43ÿ6785ÿ9 353ÿ1ÿ5ÿ65ÿ8ÿ29ÿ5ÿ 758ÿÿ ÿ783ÿ:5ÿ 8ÿ ÿ8 6ÿ53ÿ!5ÿ 8ÿ4 5ÿ 8ÿ7 6773 5; 378ÿ5ÿ8ÿÿ455ÿÿ8ÿ6?ÿ@ÿA9ÿB45ÿ6 85 ÿ1ÿ 8ÿ12ÿ 5ÿ  6656ÿ45855ÿ3457 8 6ÿ53 ÿ!ÿ 8ÿ!2ÿ 5ÿ  6656ÿ 8ÿ347 ÿ7 ÿ5;7 6583ÿ3ÿ345ÿ87378ÿ34 3ÿHÿ 637675 9ÿ3ÿ166ÿ535 785ÿ345ÿ7835 5378ÿ6785ÿ5ÿ 3766 ÿ34 3ÿ675 ÿ78 855ÿ3ÿ178ÿ ÿ 5717ÿ783ÿ8ÿ73ÿB4 3ÿ7 ÿ5ÿ855ÿ3ÿ178ÿ ÿ783ÿ 34ÿ6 85 ÿD5ÿ 8ÿÿ347 ÿÿ17878 ÿ ÿ

8ÿ 6378ÿ1ÿ345ÿ7 6773ÿ5; 378

1ÿ1ÿ 8ÿ12ÿJ3ÿ3455ÿ 5ÿ86ÿ3ÿ5; 378 ÿ78ÿ345ÿ/ÿ888 ÿ 785ÿ345ÿ783ÿÿ 8ÿ675 8455ÿ8ÿ345ÿK7 58 78 6ÿ6785ÿ9ÿLÿ5ÿ855ÿ 8345ÿ8 3 783ÿ3ÿ 65ÿ1ÿ ÿ 5717ÿ B455ÿ 5ÿ ÿ8 5ÿ1ÿ  ÿ347 ÿ6ÿ5ÿ85< MNOÿP'$#&"ÿ9'!#.$ÿQRE."'(!SÿT85ÿ6ÿ 53ÿ85ÿ78 35ÿ3ÿU5ÿ ÿAÿ8ÿÿ 8ÿ3458ÿ 65 1ÿ345ÿ345ÿ3ÿJ3ÿ347 ÿ766ÿ86ÿÿ458ÿ9ÿ7835 53 ÿ345ÿ6 85ÿAÿ8ÿÿB47 ÿ7 ÿ766ÿ5ÿ35 ÿ7 ÿ88U5ÿLÿ85ÿ  3ÿ17 3ÿ 5653ÿ ÿ88U5 458ÿ345ÿAK78 35ÿVA1ÿ 78 35ÿ1ÿEÿ 8ÿ3458ÿ 53ÿ345ÿ5 878 ÿ78 35ÿ1ÿÿ3ÿÿ345ÿ85ÿ 46 4 5ÿ345ÿ78 35ÿ734ÿ345ÿ6  5 3ÿ  635ÿ 65ÿ ÿ347 ÿ766ÿ 75ÿ345ÿ  3ÿ 3  3 378 ÿL 5ÿ34 3ÿ ÿ3458ÿ ÿ675 ÿ8ÿ9ÿL678 ÿ345ÿ3ÿ5; 378 +++++++,ÿÿ)"ÿ/>HIB=ÿS;>ÿBA?NÿO;LPFÿHILÿBAPÿHKBA;>ÿ;Sÿ?BÿOHII;B 88ÿRPÿAPTLÿT?HRTPÿS;>ÿHI=ÿ>PHTÿ;>ÿ?QH@?IPLÿLHQH@PÿS>;Qÿ?BNÿKNPW 88ÿXNP>Nÿ;SÿBA?NÿO;LPÿQKNBÿUP>?S=ÿO;>>POBIPNNÿS;>ÿBAP?>ÿHPHL=ÿ@?UPIÿS;>ÿBAPÿ;RZPOBN[ 88ÿÿÿÿ\]^_`ÿHILÿabc`]dÿV?BA 88ÿÿÿÿÿÿÿÿO;;>L?IHBPNÿeST;HBÿfFÿ=Fÿghi 88ÿÿÿÿÿÿÿÿ;

HB;>NÿS;>[ 88ÿÿÿÿÿÿÿÿÿÿÿÿj;?IBÿÿÿkÿj;?IBÿlÿmPOB;> 88ÿÿÿÿÿÿÿÿÿÿÿÿmPOB;>ÿkÿÿj;?IBÿnÿj;?IB 88ÿÿÿÿÿÿÿÿÿÿÿÿmPOB;>ÿkÿÿmPOB;>ÿlÿmPOB;> 88ÿÿÿÿÿÿÿÿÿÿÿÿmPOB;>ÿkÿÿJOHTH>ÿoÿmPOB;> 88ÿÿÿÿp^_bÿHILÿqbrsb_`ÿV?BAÿLPS?I?I@ÿÿUhi 88kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

ÿ

wLPS?IPÿJxYyyz{XxÿÿÿDWDDDDDDDEÿ88ÿB;ÿHU;?LÿL?U?N?;Iÿ;UP>ST;V 88ÿL;Bÿ;LKOBÿ|}G~ÿVA?OAÿHTT;VNÿUPOB;>ÿ;

HB?;INÿ?IÿH>@KQPIBN wLPS?IPÿL;B|KFU~ÿÿÿ||K~Wfÿoÿ|U~Wfÿÿ|K~W=ÿoÿ|U~W=ÿÿ|K~Wgÿoÿ|U~Wg~ wLPS?IPÿI;>Q|U~ÿÿÿÿN€>B|L;B|UFU~~ÿÿ88ÿI;>QÿkÿTPI@BAÿ;SÿÿUPOB;> wLPS?IPÿL|KFU~ÿÿÿÿÿI;>Q|KnU~ÿÿÿÿÿÿÿ88ÿL?NBHIOPÿkÿI;>Qÿ;SÿL?SSP>PIOP wLPS?IPÿHRN|f~ÿÿÿÿÿ||f~ÿkÿDÿ‚ÿ|f~ÿ[ÿn|f~~ÿÿÿ88ÿÿHRN;TKBPÿUHTKP

ÿ

88ÿƒ^„`…†‡p^_b‡`]‡p^_bˆ‰[ÿ@PBÿBAPÿQ?I?QKQÿL?NBHIOPÿRPBVPPIÿCÿT?IPN 88ÿÿÿÿŠII[ÿBAPÿNA;>BPNBÿL?NBHIOPÿRPBVPPIÿyEÿHILÿyC ST;HB L?NB}Gzy?IPzB;zy?IP|ÿy?IPÿyEFÿy?IPÿyC~ 84

0 ÿÿÿÿ234567ÿÿÿ8ÿ9ÿ ÿÿ  ÿÿÿÿ234567ÿÿÿÿ9ÿ  ÿÿ   ÿÿÿÿ234567ÿÿÿÿ9ÿ ÿÿ   ÿÿÿÿ65ÿÿÿÿÿ9ÿ6588ÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ4ÿ9ÿ65ÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ3ÿ9ÿ65 ÿÿÿÿ65ÿÿÿÿ ÿ9ÿ!4ÿÿ!ÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿ4ÿ54 ÿÿÿÿÿ46"#853ÿ5$3ÿ%&3ÿ#7"3537ÿ6ÿ5$3ÿ56ÿ4635ÿ#6%&5 ÿÿÿÿ%ÿ ÿ'ÿ()*

+,-)ÿ0ÿÿÿÿÿÿÿÿÿÿÿ5$3ÿ%&3ÿ73ÿ"65ÿ#73 ÿÿÿÿÿÿÿÿ4ÿ9ÿ  ÿÿÿÿÿÿÿÿ54ÿ9ÿ4ÿ.ÿÿ/ÿ34ÿÿÿÿ83ÿ5$3ÿ7035ÿ3&6"%&567 ÿÿÿÿ1 ÿÿÿÿ33ÿ0 ÿÿÿÿÿÿÿÿ4ÿ9ÿ!3ÿÿ4!ÿÿ  ÿÿÿÿÿÿÿÿ54ÿ9ÿ!3ÿÿ!ÿÿ  ÿÿÿÿ1 ÿÿÿÿÿ035ÿ5$3ÿ%373&43ÿ6ÿ5$3ÿ56ÿ4635ÿ#6%&5 ÿÿÿÿ234567ÿÿÿ ÿ9ÿÿ2ÿ4ÿ!ÿ8ÿÿ54ÿ!ÿÿÿÿ9ÿÿ 4ÿÿ 54 ÿÿÿÿ73587&ÿ&67" ÿÿÿÿ73587&ÿ5$3ÿ4635ÿ%5&43 1 9999999999999999999999999999999999999999999999999999999999999999999 ÿ3456789:;696?9:;6@ABÿ035ÿ5$3ÿ%5&43ÿ3533&ÿÿ30"3&5 ÿÿÿÿDU/ÿÿ56ÿE ÿ%&3ÿ30"3&5ÿ( ÿ&ÿ( ÿÿÿÿF3587&/ÿ5$3ÿ$67535ÿ%5&43ÿ3533&ÿ( ÿ&ÿ( 65 %5E +(30"3&5+56+(30"3&5ÿ(30"3&5ÿ( ÿ(30"3&5ÿ( 0 ÿÿÿÿ234567ÿÿÿ8ÿ9ÿ( ÿÿ(  ÿÿÿÿ234567ÿÿÿÿ9ÿ( ÿÿ(  ÿÿÿÿ234567ÿÿÿÿ9ÿ( ÿÿ(  ÿÿÿÿ65ÿÿÿÿÿ9ÿ6588ÿÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ4ÿ9ÿ65ÿÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿÿ9ÿ658 ÿÿÿÿ65ÿÿÿÿ3ÿ9ÿ65 ÿÿÿÿ65ÿÿÿÿ ÿ9ÿ!4ÿÿ!ÿÿÿÿÿÿÿÿÿÿ9ÿ ÿÿÿÿ65ÿÿÿÿ4ÿ,ÿ ÿ9ÿ ÿÿÿÿÿÿÿÿ4ÿ9ÿ, ÿ385ÿ 9 ÿ9ÿ ÿÿÿÿ65ÿÿÿÿ54ÿ5,ÿ5 ÿ9ÿ ÿÿÿÿÿÿÿÿ54ÿ9ÿ5,5 ÿ385ÿ5 9 ÿ9ÿ ÿÿÿÿÿ46"#853ÿ5$3ÿ%&3ÿ#7"3537ÿ6ÿ5$3ÿ56ÿ4635ÿ#6%&5 ÿÿÿÿ%ÿ ÿ'ÿ()*

+,-)ÿ0ÿÿ5$3ÿ%&3ÿ73ÿ"65ÿ#73 ÿÿÿÿÿÿÿÿ,ÿ9ÿ ÿÿÿÿÿÿÿÿÿÿ6743ÿ8%&0ÿ#6%&5ÿ ÿ6&ÿ30"3&5ÿ( ÿÿÿÿÿÿÿÿ ÿ9ÿ ÿÿÿÿÿÿÿÿÿÿ56ÿ#733&5ÿ#6%3ÿ%%%6&ÿÿÿ537 ÿÿÿÿÿÿÿÿ5,ÿ9ÿ3 85

ÿÿÿÿÿÿÿÿ12ÿ3ÿ45 ÿÿÿÿ6 ÿÿÿÿ7897ÿ ÿÿÿÿÿÿÿÿÿÿ ÿ 71ÿ1 7ÿ489791ÿ19ÿÿ1 7ÿ17ÿ879 ÿÿÿÿÿÿÿÿ9ÿ3ÿ7ÿÿ45 ÿÿÿÿÿÿÿÿ1ÿ3ÿ7ÿÿ5 ÿÿÿÿÿÿÿÿÿ9ÿÿÿ ÿÿÿÿÿÿÿ ÿ94ÿÿÿ3ÿ1 7ÿ93ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ1ÿ3ÿ75 ÿÿÿÿÿÿÿÿÿÿÿÿ12ÿ3ÿ45 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿÿÿÿÿ7897ÿÿ9ÿÿ92ÿ ÿÿÿ ÿ94ÿÿ ÿÿ3ÿ1 7ÿ93 ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ925 ÿÿÿÿÿÿÿÿÿÿÿÿ1ÿ3ÿ7ÿ!ÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ12ÿ3ÿ45 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿ6 ÿÿÿÿÿ1ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿ14ÿÿÿ3ÿ1 7ÿ13ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿ1ÿ3ÿ5 ÿÿÿÿÿÿÿÿ ÿ"74#$17ÿ94ÿ"ÿ1 9ÿ7 7 ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿ7897ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ925 ÿÿÿÿÿÿÿÿ7897ÿ

ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ92ÿ3ÿ5 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿ6 ÿÿÿÿ7897ÿÿ1ÿÿ12ÿ ÿÿÿÿÿÿ ÿ14ÿÿ ÿÿ3ÿ1 7ÿ13 ÿ7 7ÿ9ÿ987 ÿÿÿÿÿÿÿÿ1ÿ3ÿ125 ÿÿÿÿÿÿÿÿ ÿ"74#$17ÿ94ÿ"ÿ1 9ÿ7 7 ÿÿÿÿÿÿÿÿÿÿ!ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ5 ÿÿÿÿÿÿÿÿ7897ÿÿÿ!ÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿ925 ÿÿÿÿÿÿÿÿ7897ÿ

ÿÿÿÿÿÿÿÿÿÿÿÿ9ÿ3ÿÿ!ÿÿ5 ÿÿÿÿÿÿÿÿÿÿÿÿ92ÿ3ÿ5 ÿÿÿÿÿÿÿÿ6 ÿÿÿÿ6 ÿÿÿÿ ÿ88%ÿÿ1 7ÿ9ÿ1ÿ 71ÿ94ÿÿ14 ÿÿÿÿ94ÿ3ÿ99ÿÿ&'())*+'ÿ,ÿÿ-ÿ9ÿ ÿ925 ÿÿÿÿ14ÿ3ÿ91ÿÿ&'())*+'ÿ,ÿÿ-ÿ1ÿ ÿ125 ÿÿÿÿ ÿ 71ÿ1 7ÿ7"747ÿÿ1 7ÿ1.ÿ489791ÿ19 ÿÿÿÿ/741"ÿÿÿ0ÿ3ÿ.ÿ!ÿ94ÿÿ$ÿÿ14ÿÿ5ÿÿ ÿ3ÿÿ& 94ÿÿ&114 ÿÿÿÿ"71$"ÿ"#05ÿÿÿ ÿ"71$"ÿ1 7ÿ489791ÿ9147 6 3333333333333333333333333333333333333333333333333333333333333333333 86

00ÿ23456789 ÿÿÿÿÿÿÿÿ 00ÿÿÿÿ !"ÿÿÿÿ#$ÿ!%ÿ#& 00ÿÿÿÿ'!"ÿÿÿÿÿÿÿÿÿ( ( )*ÿ#ÿ#$+ÿ#ÿ#&ÿ, ÿÿÿÿ.ÿÿÿ%/ÿ0ÿ#$1/ÿ2ÿ#&1/3 ÿÿÿÿ(ÿÿÿÿ%/&ÿ0ÿ%*%/+%/,3 ÿÿÿÿÿ*%/&ÿ4ÿ5677)896,ÿÿÿÿÿÿ00ÿÿÿÿÿ(ÿ((( ÿÿÿÿÿÿÿÿ!ÿ:1:3ÿÿÿÿÿÿÿÿÿÿÿ00ÿ!;ÿÿÿ1ÿÿ9ÿÿ:1 ÿÿÿÿ.ÿÿÿ:ÿ0ÿ#$1:ÿ2ÿ#&1:3 ÿÿÿÿ(ÿÿÿÿÿ0ÿ2%*:+%/,ÿ0ÿ%/&3 ÿÿÿÿ!ÿ3ÿÿÿÿÿÿÿÿÿÿÿ00ÿÿÿ < 000000000000000000000000000000000000000000000000000000000000000000000 00ÿ2345=7>64?29 ÿÿÿ%!ÿÿÿÿÿ 00ÿÿÿÿ !"ÿÿÿÿ#$ÿ!%ÿ#& 00ÿÿÿÿ'!"ÿÿ%!ÿÿÿÿÿÿÿ( ( )%!*ÿ#ÿ#$+ÿ#ÿ#&ÿ, ÿÿÿÿ(ÿÿÿÿÿ0ÿ)*ÿ#$+ÿ#&,3 ÿÿÿÿ!ÿÿÿÿ$ÿ0ÿ#$1:ÿ@ÿ*ÿAÿ#$1/,3 ÿÿÿÿ!ÿÿÿÿ&ÿ0ÿ#&1:ÿ@ÿ*ÿAÿ#&1/,3 ÿÿÿÿ!ÿ%*$+&,3ÿÿÿÿÿÿÿÿÿÿÿÿ00ÿ%!ÿÿ < 000000000000000000000000000000000000000000000000000000000000000000000

BCDCECFGCH

IJKLMÿOPQRSTUÿVILWXJYZQÿ[QX\]MWVÿLYÿ^Iÿ_J`QÿOYaLYQÿIQWLaYÿbcddef gQX\ÿhQSSQRUÿSLYQiSLYQiZS]WQWXij]LYXW^MbfÿbcdddfÿZLXQMÿLYÿX\Qÿ_RJj\LZWÿÿkSa]RLX\`Wÿlkm bcddnf

87

88

! "#$%%!"&'( "#)""(* +#,(-(./&!" "#0.(.(&% (-(./#  1#0&!""#$ )'2"&#3!%(. .2%#  4#0!!"#0.!&5(" !#0!!"!&6 !!"#3".!(#  7#8!"#0.6& )&".((9 #  3"%")(!(( ".,38.("..(%.#

: ;842 8 012345362781:?8472;5

@".A".)( . %!"%!".&()  #@&.(&(5( "#0B)( B"&(! ". .#0("#C&%.& !&.!()-/. "# @.))%)!B((9%B"&! )(((D#C( A".((  E(.&EFA1&.)(((!( #3!"GHC!.+IJKL&& M  )!B&"B%" #NM".GO!H$.+IJIL"%"( E  #3!.&9 6&BPQRSTQUVWSSXYRRZT[\]^S_XB( -GO(6.`Ha.+IIJL.GO".1bbbL.GC))!.+IIIL.G$2c(6. +IIdL.GeH.+IdfL/%!!)( 89

0123414567ÿ9 4 4 ÿ640 ÿ3

061ÿ0ÿ5 6ÿ04 4ÿ64ÿ64

4603ÿ3 4 ÿ 5ÿ5ÿ6ÿ 

53ÿ64ÿ0 6ÿ ÿ15ÿ 62645060 4ÿ3

061ÿ

ÿ 3 05ÿ64ÿ41456ÿ0564 460 5ÿ2 3417 ÿ44ÿ364 ÿ4334ÿÿ43 554 ÿ!"##ÿ5ÿ!""$%ÿ0 4 4ÿ5ÿ 26013ÿ ÿ6014ÿ3

0617ÿ&6ÿ640 ÿ3

061ÿ6033ÿ544ÿ ÿ6

4ÿ24ÿ5ÿ06ÿ0ÿ0036ÿ6

0123414567ÿ'4(456ÿ

)ÿ14ÿ 64 ÿ012 41456ÿ5ÿ&35ÿ!""*%ÿ 5ÿ5ÿ ÿ6014ÿ5ÿ ÿ24ÿ464 105060ÿ3

0617ÿ+4 4ÿ 4ÿ3 ÿ445ÿÿ514 ÿ  ÿ 5505ÿ60147ÿ+4ÿ4 3046ÿ ÿ644ÿ , 5 104,ÿ3

061ÿ 06ÿ-./-01-2ÿ 34 ÿ!"#*%ÿ4ÿ ÿ247ÿ9 4 4 ÿ64ÿ364 ÿ 54ÿÿ3 ) 5ÿÿ'

ÿ!"#"%ÿ4

53ÿ ÿ247 060 533ÿ012 4ÿ3

061ÿ 4ÿ445ÿ 5ÿ

ÿ64ÿ1

4ÿ 46 060 4ÿ, 434 0564 460 5,ÿ2 3417ÿ94 4ÿ64 4ÿ 4ÿ6 ÿ42 64ÿ46ÿ ÿ41456ÿ64ÿ, 4,ÿ46ÿ ÿ5ÿ64 ,34,ÿ46ÿ 7ÿ454ÿ 56ÿ6 ÿ05ÿ0564 460 5ÿ46 445ÿ64ÿ46ÿ6ÿ5 6ÿ 0605ÿ64ÿ14ÿ46ÿ66 0ÿ 434ÿ0564 460 5ÿ6ÿ5 6ÿ 4 4ÿ

ÿ3434ÿ 547ÿÿ01234ÿ464 105060ÿ ÿ6014ÿ5ÿ ÿ24ÿ,6 24 0ÿ 442,ÿ3

061ÿ ÿ4 43 24ÿÿ5 !""5%ÿ4ÿ 5ÿ4 304 ÿ

)ÿ ÿ30  5ÿÿ'6 30ÿ!"##%7ÿ+44ÿ3

061ÿ5ÿ4ÿ4ÿ6

24 

1ÿ

345ÿ46ÿ 24 60 5ÿ30)4ÿ0564 460 5ÿ

ÿ50 5ÿ46 445ÿ6 ÿ04 456ÿ01234 2 3 5ÿ

ÿ235 ÿ0 00 5ÿ 27 64 4 6434ÿ64ÿ'1 9 4ÿ5ÿ&45634466155ÿ3

061ÿ 4105ÿ64ÿ351 )ÿ ÿ64 0437ÿ6 64ÿ 4 4 ÿ66ÿ 45ÿ7ÿ0ÿ3 4ÿ ÿ

4 ÿ ÿ64ÿ&45634466155ÿ3

061ÿ6)4ÿ ÿ6014ÿ 0ÿ0ÿ

4ÿ65ÿ64ÿ ÿ 64

4ÿ3

0618ÿ3 ÿ64ÿ1

4  123064ÿ 26013ÿ3

061ÿ 4ÿ 0ÿ0ÿ64ÿ14ÿÿ64ÿ01234ÿ 64

4ÿ 547ÿ'  45ÿ7ÿ0ÿ492464ÿ6 ÿ4ÿ1ÿ3 4 ÿ65ÿ ÿ 54ÿ106ÿÿ 433ÿ4ÿ64ÿ46 012341456  64

4ÿ3

0617ÿ&6ÿ 45ÿ7ÿ0ÿ492464ÿ6 ÿ4ÿ34ÿ65ÿ

ÿ4(3ÿ6 ÿ ÿ&45634 ÿ6014ÿ5ÿ ÿ24ÿ3

0617 466155ÿ0ÿ64ÿ012346ÿ492464ÿ

:;