From:	IN%"xhuang@email.gc.cuny.edu"  2-OCT-1996 04:07:55.22To:	IN%"VPAN@lcvax.lehman.cuny.edu"  "Victor Pan"CC:	Subj:	Paper " Newton's Iteration......."Return-path: <xhuang@email.gc.cuny.edu>Received: from vice1.lehman.cuny.edu by lcvax.lehman.cuny.edu (PMDF #12809) id <01IA5JWMI1KG00055W@lcvax.lehman.cuny.edu>; Wed, 2 Oct 1996 04:07 ESTReceived: from gaudi.gc.cuny.edu by vice1.lehman.cuny.edu (5.51/SMI-3.0DEV3) id AA02550; Wed, 2 Oct 96 03:46:17 EDTReceived: from broadway.gc.cuny.edu (broadway.gc.cuny.edu) by GAUDI.GC.CUNY.EDU (PMDF V5.0-5 #13310) id <01IA5CP197V400AVUR@GAUDI.GC.CUNY.EDU> for VPAN@lcvax.lehman.cuny.edu; Wed, 02 Oct 1996 00:40:56 -0400 (EDT)Received: from localhost (xhuang@localhost) by broadway.gc.cuny.edu (8.7.6/ank-osf96) with SMTP id AAA14663 for <VPAN@lcvax.lehman.cuny.edu>; Wed, 02 Oct 1996 00:38:17 -0400 (EDT)Date: Wed, 02 Oct 1996 00:38:17 -0400 (EDT)From: xhuang@email.gc.cuny.eduSubject: Paper " Newton's Iteration......."To: Victor Pan <VPAN@lcvax.lehman.cuny.edu>Message-id: <Pine.OSF.3.93.961002003647.25595A-200000@broadway.gc.cuny.edu>Content-type: MULTIPART/MIXED; BOUNDARY="0-1593265712-843887875=:19412"Content-transfer-encoding: 7BITX-Sender: xhuang@broadway.gc.cuny.eduContent-Id: <Pine.OSF.3.93.961002003647.25595B@broadway.gc.cuny.edu>Mime-Version: 1.0  This message is in MIME format.  The first part should be readable text,  while the remaining parts are likely unreadable without MIME-aware tools.  Send mail to mime@docserver.cac.washington.edu for more info.--0-1593265712-843887875=:19412Content-Type: TEXT/PLAIN; CHARSET=US-ASCIIContent-ID: <Pine.OSF.3.93.961002003647.25595C@broadway.gc.cuny.edu>\documentstyle[11pt]{article}\topmargin  -0.4in\oddsidemargin 0.05in\evensidemargin 0.05in\textheight 9.6in\textwidth  6.7in\headheight 0in\headsep    0in\footskip   0.5in\footheight 0in\renewcommand{\baselinestretch}{1.55}\newtheorem {prop}{\sc \bf Proposition}[section]\newtheorem {defs}{\sc \bf Definition}[section]\newtheorem {lemma}{\sc \bf Lemma}[section]\newtheorem{remark}{\sc \bf Remark}[section]\newtheorem{cor}{\sc \bf Corollary}[section]\newtheorem{fact}{\sc \bf Fact}[section]\newtheorem{theorem}{\sc \bf Theorem}[section]\title{\bf Newton's Iteration for Inversion of Cauchy-like and Other Structured Matrices~~\thanks{This work was supported by NSF Grant CCR 9020690 and PSC CUNY Awards 665301 and 666327, and has been presented in Copper MountainConference on Iterative Methods, Copper Mountain, Colorado, USA, April 9-13, 1996.}}\author{Victor Y. ${\rm Pan^{[1,3,a]},~~~~Ailong~ Zheng^{[2,b]},~~~~Xiaohan~ Huang^{[2,c]},~~~~Olen~ Dias^{[2]}}$\\\and\\$^{[1]~~}$Department of Mathematics and Computer Science \\Lehman College, City University of New York\\Bronx, NY 10468, USA\\$^{[a]~~}$Internet: vpan@lcvax.lehman.cuny.edu\\\and\\$^{[2]~~}$Ph.D. Program in Mathematics,\\$^{[3]~~}$Ph.D. Program in Computer Science,\\$^{[2],~[3]~~}$Graduate School and University Center\\City University of New York\\33 West 42nd Street, New York, NY 10036, USA\\$^{[b]~~}$Internet: azheng@email.gc.cuny.edu\\$^{[c]~~}$Internet: xhuang@email.gc.cuny.edu}\begin{document}\maketitle\newpage\begin{abstract}We specify some initial assumptions that guarantee rapid refinement of a rough initial approximation to the inverse of a Cauchy-like matrix, by means of our new modification of Newton's iteration, where the input, output, and all theauxiliary matrices are represented with their short generators defined by theassociated scaling operators. The computations are performed fast sincethey are confined to operations with short generators of the given and computedmatrices. Because of the known correlations among various structuredmatrices, the algorithm is immediately extended to rapid refinement of roughinitial approximations to the inverses of Vandermonde--like, Chebyshev--Vandermonde--like and Toeplitz--like matrices, where again, the computations areconfined to operations with short generators of the involved matrices.\end{abstract}{\bf Key Words:} structured matrices, Cauchy matrices, Toeplitz matrices,Vandermonde matrices, matrix computations, Newton's iteration, matrix inversion.{\bf 1991 Math. Subject Classification:} 15A09, \, 65F10, \, 47B35.\section{Introduction}Computations with structured matrices ( such as Toeplitz, Cauchy, and Vandermonde matrices ) can be facilitated ( so that the computational time andmemory space decrease dramatically ) by means of representing these  matriceswith their "short" {\em generators} associated with some operators of displacement( shift )  and/or scaling \cite{kvm}, \cite{kkm}, \cite{ckl-a}, \cite{gkk},\cite{gkkl}, \cite{hr}, \cite{p90}, \cite{go}, \cite{bp}, \cite{h}, \cite{gko}, \cite{go1}, \cite{ko}, \cite{ks}.Such a generator is a pair $(G, H)$ of matrices associated witha given structured $n\times n$ matrix $A$, satisfying the following matrix equations,$$\Delta_{\{R,S\}}(A)=A-RAS=GH^T \eqno{(1.1)}$$or$$\nabla_{\{R,S\}}(A)=RA-AS=GH^T,\eqno{(1.2)}$$for a fixed natural $\alpha$, called the {\em length} of the generator, for two fixed matrices $R$ and $S$, representing scaling and/or displacement,and for some $n \times \alpha$ matrices $G$ and $H$.  Here and hereafter, $W^T$denotes the transpose of a vector or a matrix $W$,  and we note that the rank of the matrix $GH^T$ does notexceed the length $\alpha$ of the generator $G$, $H$.We also note that the operators $\Delta_{\{R,S\}}(A)$ and$\nabla_{\{R,S\}}(A)$ are closely related to each otherif the matrices $R$ and/or $S$ are nonsingular.In this paper, we will only deal with $\nabla_{\{R,S\}}$-generators of $A$, of theform $(1.2)$, except for one case in section 6,and will specify $R$ and $S$ according to the equations$(1.3)-(1.5)$ below. Scaling is represented by diagonal matrices$$D_x =diag(\ x_1, x_2, \cdots, x_n\ ), \eqno{(1.3)}$$for fixed $x_1, x_2, \cdots, x_n,$ whereas such matrices as $$Z_f=\pmatrix{&0&0&\cdots&0&f&\cr&1&0&\cdots&0&0&\cr&\vdots&\vdots&\ddots&\vdots&\vdots&\cr&0&0&\cdots&0&0&\cr&0&0&\cdots&1&0&}\ ,\eqno{(1.4)}$$or $$ aZ_f+bZ_\varphi^T+cZ_\psi^{-1}\ ,\eqno{(1.5)}$$for some fixed scalars $a,\ b,\ c,\ f,\ \varphi$, and $\psi \neq 0$, represent displacement.The key-idea is that the original matrix $A$ can be easily recovered from itsgenerators (1.1) or (1.2); moreover, the basic operations ( such asmultiplication, addition, subtraction, and inversion ) with $n\times n$structured matrices of certain classes can be reduced to operations with their generators that are represented by $O(\alpha n)$ parameters. This leads to adramatic saving of the computational time and memory space, if $\alpha$ is much less than $n$. For Toeplitz, Cauchy ( generalized Hilbert ), and Vandermonde matrices, the  length $\alpha$ of the associated generators (1.1) and (1.2), for someappropriate choices of the matrices $R$ and $S$ among the matrices of the classes (1.3) and (1.4), is as small as $1$ or $2$. The three classes ofmatrices are naturally extended to Toeplitz-like, Cauchy-like, and Vandermonde-like matrices, for which $\alpha$ is bounded by a fixed ( and not too large ) constant. ( These classes include or are closely related tosome other well-known classes of structured matrices, such as circulant, Sylvester,subresultant, Hankel, Hankel-like, Lowener, Bezout, and Chebyshev-Vandermondematrices \cite{hr},  \cite{bp}, \cite{h}, \cite{go1}, \cite{ko}. )   It wasobserved in \cite{p90} that some  correlations among the operators associated with the matrices of the three cited classes can be exploited inorder to reduce the computations for matrices of any of the three classes tocomputations with matrices of the class for which most effective algorithmsare available. In their original form, the reductions proposed in \cite{p90} were not convenientfor practical implementation because they involved operations with Vandermonde matrices, and such matricesare generally known to be ill-conditioned \cite{gi}.On the other hand, in the important case of the transition fromToeplitz-like and Vandermonde-like matrices to Cauchy-like matrices,the reduction is dramatically simplified and becomes practically effective because, in this case, the Vandermonde matrices turn into    the matrices of the discrete Fourier transforms,  \cite{h} and \cite{gko}, and the reduction to Cauchy-like computations is performedvia FFT, that is, in a fast and numerically stableway (cf. \cite{bp} ). Thus,effective algorithms for computations with Cauchy-like matrices should play most fundamental role.In the present paper, we consider the solution of a nonsingular Cauchy-like linearsystem, $C \vec{x}=\vec{v}\ ,$ and the inversion of a nonsingular Cauchy-like matrix $C$. These operations can be immediately extended to the Vandermonde-like and Toeplitz-like cases,as well as to the Chebyshev-Vandermonde cases ( see our section 5 or \cite{gko}, \cite{go1},  \cite{h} and \cite{ko}).It is well-known that Newton's iteration rapidly improves a rough initialapproximation to the matrix inverse ( cf. e.g. \cite{bp}\ ), but such aniteration also rapidly destroys the structure of Cauchy-like, Toeplitz-like,and Vandermonde-like matrices. In \cite{p92}, \cite{p93}, and \cite{p93a}, Newton's iteration has been modified so as to preserve the initialdisplacement structure of a Toeplitz-like input matrix during the iteration.The idea was to control the growth of the length of short displacement generators by periodically chopping-off their components corresponding to thesmallest singular values in the SVDs of the displacement matrices defined by suchgenerators. This made all theiteration steps of the resulting algorithms computationally simple; moreover,such a simplification was achieved with no significant slowdown of the convergence, except for the initial stages, where the increase of the approximation errors due to the latter chopping posed additional serious requirements on the quality of the initial approximation.In the present paper, we consider a similar problem  of controlling the length of the associated generators in a modification of Newton's iteration,where the inverse of a fixed Cauchy-like input matrix $C$ is sought. Our solution of the problem is substantially simplified in this case ( in particular, we do notneed to involve the SVD ), due to the formula for the inverse matrix $C^{-1}$available from \cite{h}. In particular,we do not need to compute the SVDs of theauxiliary matrices and to chop-off the smallest singular values. Besides the resultingcomputational saving at each Newton's stage, this enables us to relax the respectiveconstraints on the choice of the initial approximation. The cited advantages should motivate the reduction of the Toeplitz-likecase to the Cauchy-like case ( by means of FFTs ) and applying the techniquesof the present paper, instead of the inversion of Toeplitz-like matrices byapplying the techniques of \cite{p92},     \cite{p93}, and \cite{p93a}.In spite of some facilitation of the choice of the initial approximation thatwe achieved in the Cauchy-like case( versus the Toplitz-like case ), such a choice remains anopen problem for the general Cauchy-like input, and we discuss this problem in our last section 7.Otherwise, we present our results in the following order. In the next section, we describeour modification of a Newton's iteration for the refinement of an initialapproximation to the inverse of a Cauchy-like matrix. In short section 3, weestimate the computational cost of each iteration step, performed by operating  with short displacement generators of matrices, rather than with the matrices themselves. In section 4, we quantitatively  specify the assumptions about the error norm of the initialapproximation to the inverse that guarantee rapid convergence of ourmodification of Newton's iteration, and we also specify the number of iteration steps sufficient for convergenceto an approximation within a fixed output error bound. In section 5, we recall the reduction of the inversion  of Toeplitz-like, Vandermoode-like, and Chebyshev-Vandermonde-like matrices to the inversion of Cauchy-like matrices, which enables us to extend our resultsfor a Cauchy-like input to ones for Toeplitz-like, Vandermonde-like, andChebyshev-Vandermonde-like inputs.In section 6, we recall an alternativeapproach to approximating $C^{-1}$, based on reduction of the problem to Toeplitz-like computations, and point out some majordeficiences of this approach.\vspace{0.1in}{\bf Acknowledgements} The authors are grateful to George Heinig, Thomas Kailath, Vadim Olshevsky, and Ali H. Sayed for supplying the (p)reprints of \cite{go}, \cite{go1}, \cite{gko}, \cite{h}, \cite{ko},and \cite{ks}, and to the referee for helpful comments.\section{Modified Newton's Iteration for the Inversion of Cauchy-like Matrices}Let $C$ be an $n\times n$ nonsingular Cauchy-like matrix with the associatedscaling operator$$\nabla_{\{D_t,D_s\}}(C)=D_tC-CD_s=ZY^T\ ,\eqno{(2.1)}$$$$C=\left[\ {z_i^Ty_j\over t_i-s_j} \ \right],\hspace{.25in}Z^T=[\ z_1, \cdots, z_n\ ],\hspace{.25in} Y^T=[\ y_1, \cdots, y_n\ ]\ ,\eqno{(2.2)}$$where $z_i,\ y_j \in {\bf C}^{\alpha \times 1}$, $D_t=diag(\ t_1, \cdots, t_n\ )$,$D_s=diag(\ s_1, \cdots, s_n\ )$, $t_i \ne s_j$, for all $i,\ j=1,2,\cdots,n$(cf. \cite{h} and \cite{gko}). Then, we have the following fundamental result,showing that the inverse matrix $C^{-1}$is also a Cauchy-like matrix and relating its scaling generator to one  of $C$. \begin{theorem} {\cite {h}}For a Cauchy-like matrix C satisfying $(2.1)$and $(2.2)$, we have$$C^{-1}=-\left[\ {u_i^Tw_j \over s_i-t_j} \ \right]\ ,\eqno{(2.3)}$$$$U=[\ u_1^T,\cdots, u_n^T\ ]^T=C^{-1}Z\ ,\qquadW^T=[\ w_1,\cdots,w_n\ ]=Y^TC^{-1}\ ,\eqno{(2.4)}$$where \quad $Z^T=[\ z_1,\cdots,z_n\ ]\quad and\quad Y^T=[\ y_1,\cdots,y_n\ ]$. \\\end{theorem}Note the reversion of the order of scaling operators:the opereator $\nabla_{\{D_t,D_s\}}$,which we associate to the matrix $C$ corresponds to the operator $\nabla_{\{D_s,D_t\}}$,which we associate to the inverse $C^{-1}$.Assume that an initial approximation $X_0$ to$C^{-1}$ is available with its $\nabla_{\{D_s,D_t\}}$-generator of a length atmost $\alpha$. Then, we recursively define matrices $X_1^*,\ X_1,\ X_2^*,\ X_2,\ \cdots$ as follows:$$X_{k+1}^*=X_k\ (\ 2I-CX_k\ ),\qquad k=0, 1,\cdots, \eqno{(2.5)}$$$$X_{k+1}=-\left[\ {(u_i^{k+1})^T w_j^{k+1}\over s_i-t_j}\  \right]_{i,j=1}^n,\qquad k=0,1,\cdots, \eqno{(2.6)}$$where the vectors $u_i^{k+1},\ w_j^{k+1} \in {\bf C}^{\alpha \times 1}$ are definedby $$U_{k+1}=\pmatrix{\ (u_1^{k+1})^T \cr \vdots \cr (u_n^{k+1})^T\ }=X_{k+1}^*Z\ ,\qquad  Z=\pmatrix{\ z_1^T \cr \vdots \cr z_n^T\ }\ ,\eqno{(2.7)}$$$$W_{k+1}^T=[\ w_1^{k+1},\cdots,w_n^{k+1}\ ]=Y^TX_{k+1}^*\ ,\qquadY^T=[\ y_1,\cdots,y_n\ ]\ .\eqno{(2.8)}$$Equation (2.5) represents a step of Newton's iteration for matrix inversion( cf. e.g. \cite{bp} ), and equation (2.6) ''corrects'' the results $X_{k+1}^*$ of (2.5), so as to turn $X_{k+1}^*$ into a Cauchy-like matrix, associated with $\nabla_{\{D_s,D_t\}}$, that is , with the same scaling operator as $C^{-1}$. Namely, $$\nabla_{\{D_s,D_t\}}(X_{k+1})=-U_{k+1}W^T_{k+1}\ ,$$that is, $X_{k+1}$ is a Cauchy-like matrix whose $\nabla_{\{D_s,D_t\}}$-generator has a length of at most $\alpha$. Furthermore, we have\begin{prop}For all $k=0,1,\cdots$, the matrices $X^*_{k+1}=2X_k-X_kCX_k$ are Cauchy-likematrices whose $\nabla_{\{D_s,D_t\}}$-generatorshave lengths of at most $3\alpha$.\end{prop}{\bf Proof:} By the definition of the $\nabla$- operator, we have $$\nabla_{\{D_s,D_t\}}(X_kCX_k)=D_sX_kCX_k- X_kCX_kD_t~~,     \eqno{(2.9)}$$$$\nabla_{\{D_s,D_t\}}(X_k)CX_k=(D_sX_k-X_kD_t)CX_k=D_sX_kCX_k-X_kD_tCX_k~~,  \eqno{(2.10)}$$$$X_k{\nabla}_{\{D_t,D_s\}}(C)X_k=X_k(D_tC-CD_s)X_k=X_kD_tCX_k-X_kCD_sX_k~~,  \eqno{(2.11)}$$$$X_kC{\nabla}_{\{D_s,D_t\}}(X_k)=X_kC(D_sX_k-X_kD_t)=X_kCD_sX_k-X_kCX_kD_t~~.   \eqno{(2.12)}$$By combining $(2.10)$, $(2.11)$ and $(2.12)$, we obtain that$$\nabla_{\{D_s,D_t\}}(X_kCX_k)=\nabla_{\{D_s,D_t\}}(X_k)CX_k+X_k\nabla_{\{D_t,D_s\}}(C)X_k+X_kC\nabla_{\{D_s,D_t\}}(X_k)\ .$$Therefore,\begin{eqnarray}& &\nabla_{\{D_s,D_t\}}(X_{k+1}^*) \ =\ \nabla_{\{D_s,D_t\}}(\ 2X_k-X_kCX_k\ ) \cr&=&2\nabla_{\{D_s,D_t\}}(X_k)-\nabla_{\{D_s,D_t\}}(X_kCX_k) \cr&=&2\nabla_{\{D_s,D_t\}}(X_k)-\nabla_{\{D_s,D_t\}}(X_k)CX_k-X_k\nabla_{\{D_t,D_s\}}(C)X_k-X_kC\nabla_{\{D_s,D_t\}}(X_k) \cr&=&\nabla_{\{D_s,D_t\}}(X_k)(2I-CX_k)-X_k\nabla_{\{D_t,D_s\}}(C)X_k-X_kC\nabla_{\{D_s,D_t\}}(X_k)\ .\nonumber\end{eqnarray}We have $$\nabla_{\{D_s,D_t\}}(X_k)=G_kH_k^T\ ,\qquad \nabla_{\{D_t,D_s\}}(C)=GH^T\ ,$$where \quad $G_k,\ H_k,\ G,\ H\ \in {\bf C}^{n\times \alpha}$\ . Therefore,\quad $\nabla_{\{D_s,D_t\}}(X_{k+1}^*)=G_{k+1}^*(H_{k+1}^*)^T\ ,$\quad where \begin{eqnarray}G_{k+1}^*&=&[\ G_k,\ -X_kG,\ -X_kCG_k\ ]\in {\bf C}^{n\times 3\alpha},\crH_{k+1}^*&=&[\ (\ 2I-CX_k\ )^TH_k,\ X_k^TH,\ H_k\ ]\in {\bf C}^{n\times 3\alpha}.\hspace{0.6in} \Box \nonumber\end{eqnarray}\section{Computational Complexity of an Iteration Step}Next, we will estimate the arithmetic cost of computing the matrices$X_{k+1}$, $U_{k+1}$, and$W_{k+1}$ (the latter pair of matrices being the $\nabla_{\{D_s,D_t\}}$-generator for $X^*_{k+1}$), based on the equations (2.5)--(2.8). Given Cauchy--like matrices $C$ and $X_k$, the computation of the$\nabla_{\{D_s,D_t\}}$-generator of length $3\alpha$ for $X^*_{k+1}$[\ according to (2.5)\ ] uses $O(\alpha^2n\log^2n)$ ops (\ see e.g. \cite{go} or \cite{bp}, chapter $2$, sections $4$, $11$, and $12$\ ).  (Here and hereafter, "{\em ops}" stands for "arithmetic operations". ) Therefore,  (2.7) and (2.8) together  enable us to  compute the $n\times \alpha$ matrices   $U_{k+1}$ and $W_{k+1}$   by using $O(\alpha^2n\log^2n)$ ops.    An additional attractive feature   of this computation is the economization    of computer memory,that is, representation of all involved matrices by means of their shortgenerators requires only $O(\alpha n)$ words of memory. We also refer the reader to \cite{bp}, pages 130, 261--262, on some alternative methods for faster numerical approximation of the product of a Cauchy matrix $C$ by a vector, which may lead to a further decrease of the computational cost of ouriteration steps.\section{Estimating Convergence Rate of Newton's Iteration}In the following, we will estimate how fast $X_k$ approaches $C^{-1}$.We recall from (2.6)--(2.8) and (2.4) that\begin{eqnarray}X_k&=&-\left[\begin{array}{c} (u_i^k)^Tw_j^k \over s_i-t_j \end{array} \right]\ ,\crU_k&=&X_k^*Z=(\ X_k^*-C^{-1}\ )Z+C^{-1}Z=(\ X_k^*-C^{-1}\ )Z+U\ ,\crW_k^T&=&Y^TX_k^*=Y^T(\ X_k^*-C^{-1}\ )+W^T\ .\nonumber\end{eqnarray}Then, we obtain the following matrix equation:$$U_kW_k^T=(X_k^*-C^{-1})ZY^T(X_k^*-C^{-1})+UW^T+UY^T(X_k^*-C^{-1})+(X_k^*-C^{-1})ZW^T.$$We deduce from this equation and (2.4) that \begin{eqnarray}E_k&=&U_kW_k^T-UW^T \cr&=&(X_k^*-C^{-1})ZY^T(X_k^*-C^{-1})+C^{-1}ZY^T(X_k^*-C^{-1})+(X_k^*-C^{-1})ZY^TC^{-1}.\nonumber \end{eqnarray}\begin{flushright}(4.1)\end{flushright}Hereafter, we will use the column-norm of matrices, writing$$\|W\|=\|W\|_1=\max_j\sum_i|w_{ij}|\ ,$$where $W=(w_{ij})\in C^{m\times n}$\ (\ see \cite{gl}, p.~57\ ).\begin{prop}Let $e_k^*=\|\ X_k^*-C^{-1}\ \|$. Then $$\|E_k\|=\|\ U_kW_k^T-UW^T\ \|\le \|ZY^T\|e_k^*(e_k^*+2\|C^{-1}\|)\ .$$\end{prop}{\bf Proof:} Proposition 4.1 immediately follows from (4.1)\ .\qquad $\Box$\begin{prop}Let $e_k=\|\ X_k-C^{-1}\ \|$, for a nonsingular matrix $C$, and let $X_{k+1}^*$be defined by $(2.5)$, for $k=0,1,2,\cdots$. Then we have $$e_{k+1}^*\le \|C\|e_k^2\ .\eqno{(4.2)}$$\end{prop}{\bf Proof:} Due to $(2.5)$, we have$$I-CX_{k+1}^*=(\ I-CX_k\ )^2,\qquad k=0,1,2,\cdots.$$It follows that\begin{eqnarray}e_{k+1}^*&=&\|X_{k+1}^*-C^{-1}\|\cr&=&||C^{-1}(I-CX_{k+1}^*)||\cr&=&||C^{-1}(I-CX_k)^2|| \cr&=&||C^{-1}(I-CX_k)CC^{-1}(I-CX_k)||\cr&=&||(C^{-1}-X_k)C(C^{-1}-X_k)||\cr&\le&||C||e_k^2\ .\hspace{1in} \Box \nonumber\end{eqnarray}\begin{prop}For any $k=1,2,\cdots$, we have \quad $e_k\le h_k\ e_k^*$\ ,\quad $e_{k+1}^*\le (h_ke_k^*)^2||C||\ ,$where $$h_k=\rho ||ZY^T||(e_k^*+2||C^{-1}||),\qquad \rho =\max_{i,j}{1\over |s_i-t_j|}\ .\eqno{(4.3)}$$\end{prop}{\bf Proof:} We recall $(2.3), (2.4), (2.6), (4.1)$, and proposition 4.1 and obtainthat\begin{eqnarray}e_k&=&||X_k-C^{-1}||\cr&=&\max_j\sum_i{|(u_i^k)^Tw_j^k-u_i^Tw_j|\over |s_i-t_j|}\cr&\le&\rho\max_j\sum_i|(u_i^k)^Tw_j^k-u_i^Tw_j|\cr&=&\rho ||E_k||\cr&\le& \rho ||ZY^T||(e_k^*+2||C^{-1}||)e_k^*\cr&=&h_ke_k^*\ ,\nonumber\end{eqnarray}for $h_k$ of $(4.3)$. Combining the latter bound on $e_k$ with $(4.6)$ givesus proposition $4.3$.$\qquad \Box$\begin{prop}If $$e_1^*\le 1\  \eqno{(4.4)}$$and if$$(e_1^*)^\theta ||C||h_1^2\le1\ ,\eqno{(4.5)}$$for $\theta \le 1$ and for $h_1$ of proposition $4.3$, then$$e_{k+1}^*\le (e_k^*)^{2-\theta}\le \cdots \le (e_1^*)^{(2-\theta)^k}\ ,\qquad {\rm for}\quad k=1,2,\cdots.\eqno{(4.6)}$$\end{prop}{\bf Proof:} By the virtue of propositon 4.3, we have $$e_2^*\le (e_1^*)^2||C||h_1^2\ .$$Combine this bound with (4.5) and obtain that $$e_2^*\le (e_1^*)^{2-\theta}\ . \eqno{(4.7)}$$Combine the latter inequality and $(4.4)$, andsince $\theta\le 1,\  2-\theta\ge 1$, obtain the bounds $$e_2^*\le e_1^*\le 1\ ,\eqno{(4.8)}$$which extend (4.4)\ .Substitute the first inequality of (4.8) into (4.3) and obtain that $h_2\le h_1$. Substitute the latter bound and the bound $e_2^*\le e_1^*$ of (4.8) into (4.5) and obtain that $(e_2^*)^\theta ||C||h_2^2\le 1$, which extends (4.5).Inductive application of this argument enables us to extend (4.4), (4.5),  and (4.7) to the bounds$$e_k^*\le 1\ ,\qquad (e_k^*)^\theta ||C||h_k^*\le 1\ ,\qquad e_k^*\le (e_{k-1}^*)^{2-\theta}$$for $k=3,4,\cdots,$ and we arrive at (4.6).\qquad $\Box$We will next restate proposition 4.4, by replacing $e^*_1$ by $e_0^2||C||$,\ based on proposi- \\ tion 4.2 \ for\  $k=0$.\begin{prop}If $e_0\sqrt{||C||}\le 1$ and if $$e_0^{2\theta}||C||^{1+\theta}h^2\le 1\ ,\eqno{(4.9)}$$for $\theta \le 1$, for $h=\rho||ZY^T||(e_0^2||C||+2||C^{-1}||)$, and for$\rho$ of $(4.3)$, then$$e_{k+1}^*\le (e_0^2||C||)^{(2-\theta)^k}\ ,\qquad {\rm for}\quadk=0,1,\cdots.$$\end{prop}{\bf Proof:} Proposition 4.2 for $k=0$ implies that $$e_1^*\le ||C||e_0^2\ .\eqno{(4.10)}$$Therefore, the bound $e_1^*\le 1$ of (4.4) holds if $e_0\sqrt{||C||}\le 1$,and we also have that $h_1\le h$ for $h_1$ of (4.3). Combining the latterbound, (4.9), and (4.10) gives us (4.5). Therefore, the assumptions of proposition 4.5 imply the ones of proposition 4.4 and, consequently, imply (4.6). Substitute (4.10) into (4.6) and obtain proposition 4.5.\qquad $\Box$We are not supposed to have the values $e_0$ and $||C^{-1}||$ readilyavailable, when we are given the matrices $C$ and $X_0$, but we may use morereadily available  parameters. Indeed,$$e_0\le r_0||C^{-1}||\ ,\quad {\rm where}\quad r_0=||I-X_0C||\ ,$$and $$||C^{-1}||\le {||X_0||\over 1-r_0}\quad {\rm if}\quad r_0<1\ .$$(\ The latter implication immediately follows from the next inequalities:$$||C^{-1}||-||X_0||\le ||C^{-1}-X_0||\le ||C^{-1}||r_0 \ .\ )$$Computation of $X_0C$ amounts to $n$ multiplications of aCauchy-like matrix by vectors, which takes $O((\alpha^2n\log n)^2)$ops (cf. [GO] or [BP], section 4, 11 and 12 of chapter 2).For any vector $v\ne 0$, we may compute a lower bound$n(v)=||(I-X_0C)v||/||v||$ in $O(\alpha^2n\log^2n)$ ops, where$n(v)\le ||I-X_0C||$. (For a random choice of one or severalvectors $v$, such lower bounds may give us a reasonably goodapproximation to $||I-X_0C||$.)Next, we are going to substitute the above estimate for $e_0$ into the statement of proposition 4.5. We write$$e_0^+={r_0||X_0||\over 1-r_0}\ ,\eqno{(4.11)} $$$$h_{k+1}^+=\rho ||ZY^T||\ [\ (\ (e_0^+)^2||C||\ )^{(2-\theta)^k}+{2||X_0||\over 1-r_0}\ ]\ ,\quad k=0,1,\cdots\ ,\eqno{(4.12)}$$so that $e_0^+\ge e_0$ and $h_{k+1}^+\ge h_{k+1}$ if $h_{k+1}^*\le(\ (e_0^+)^2||C||\ )^{(2-\theta)^k}\ $, and$$h_{k+1}^+\le \rho||ZY^T||\ (\ 1+{2||X_0||\over 1-r_0}\ )\ ,\quad {\rm for\ all}\ k,\quad  {\rm if}\quad e_0^+\sqrt{||C||}\le 1\ .\eqno{(4.13)} $$We now summarize our results, including the bound $e_{k+1}\le h_{k+1}e_{k+1}^*$ (\ from  proposition 4.3\ ), which enables us to estimate $e_{k+1}$ as soon as we estimate $e_{k+1}^*\ .$\begin{cor}Let $$r_0=||I-CX_0||<1,\quad e_0^+\sqrt{||C||}\le 1,\quad \theta \le 1,\eqno{(4.14)}$$$$(e_0^+)^{2\theta}||C||^{1+\theta}\ (h_1^+)^2\le 1,\eqno{(4.15)}$$for $e_0^+$ of $(4.11)$ and $h_1^+$ of $(4.12)$. Then we have$$e_{k+1}^*\le (\ (e_0^+)^2||C||\ )^{(2-\theta)^k},\qquad k=0,1,\cdots,$$$$e_{k+1}\le h_{k+1}^+ e_{k+1}^*, \qquad k=0,1,\cdots.$$\end{cor}Let us write$$k^*=\lceil \ (\log{\log \epsilon \over \log (\ (e_0^+)^2||C||\ )}\ )\ /\log (2-\theta)\ \rceil \ ,\eqno{(4.16)}$$where $\theta < 1,\ e_0^+ $ and $h_{k+1}^+$ are defined by (4.11) and (4.12), so that (4.13) holds.Then, under the assumptions (4.14) and (4.15) of corollary 4.1, it sufficesto perform $k+1\ge k^*+1$ recursive steps of the iteration (2.5), (2.6)in order to ensure that $$e_{k+1}^*=||\ X_{k+1}^*-C^{-1}\ ||\le \epsilon\ , $$$$e_{k+1}=||\ X_{k+1}-C^{-1}\ ||\le \epsilon h_{k+1}^+\ .$$[\ Note that (4.14) implies, in particular, the bounds of (4.13).\ ]%\newpage%\begin {thebibliography}{CKL-A}%\bibitem[BP]{bp} D. Bini and V. Y. Pan,%{\em Polynomial and Matrix Computations, %Volume 1: Fundamental Algorithms},%Birkhauser, Boston, 1994.%\bibitem[CKL-A]{ckl-a} J. Chun, %T. Kailath, and H. Lev-Ari,%Fast Parallel Algorithm for %QR-factorization of Structured Matrices,%{\em SIAM J. Sci. Stat. Comput.}, %8, 6, pp.~899-913, 1987.%\bibitem[GKK]{gkk} I. Gohberg, T. Kailath, %and I. Koltracht,%Efficient Solution of Linear Systems of %Equations with Recursive Structure, %{\em Linear Algebra Appl.,} 80, pp.~81-113, 1986.%\bibitem[GKKL]{gkkl} I. Gohberg, T. %Kailath, I. Koltracht, and P. Lancaster,%Linear Complexity Parallel Algorithms %for Linear Systems of Equations with %Recursive Structure, {\em Linear Algebra %Appl.,} 88/89, pp.~271-315, 1987.%\bibitem[GI]{gi} W. Gautschi and G.Inglese, Lower %Bounds for the Condition Number of Vandermonde%Matrices, {\em Numerische Math., } 52, 241-250, 1988.%\bibitem[GKO]{gko}  I. Gohberg, T. Kailath, %and V. Olshevsky, %Fast Gaussian Elimination with Partial %Pivoting for Matrices with %Displacement Structure, {\em submitted %for publication}, 1994.%\bibitem[GL]{gl} G. H. Golub and C. F. Van Loan,%{\em Matrix Computations}, Johns Hopkins %Univ. Press, Baltimore, Maryland,%1989.%\bibitem[GO]{go} I. Gohberg and V. Olshevsky,%Complexity of Multiplication with Vectors for %Structured Matrices,%{\em Linear Algebra Appl.}, 202, pp.~163-192, 1994.%\bibitem[GO1]{go1} I. Gohberg and V. Olshevsky,%Fast Inversion of Chebyshev-Vandermonde Matrices,%{\em Numer. Math.}, 67, 1, pp.~71-92, 1994.%\bibitem[H]{h} G. Heinig, %Inversion of Generalized Cauchy Matrices %and the Other Classes of Structured%Matrices,%{\em Linear Algebra for Signal Processing, %IMA Volume in Math. and %Its Applications}, 69, pp.~95-114, Springer, 1994.%\bibitem[HR]{hr} H. Heinig and K. Rost,%{\em Algebraic Methods for Toeplitz-like %Matrices and Operators, %Operator Theory}, 13, Birkhaeuser, 1984.%\bibitem[KKM]{kkm} T. Kailath, S.-Y. Kung, and M. Morf,%Displacement Ranks of Matrices and Linear Equations,%{\em J. Math. Anal. Appl.}, 68, 2, pp.~395-407, 1979.%\bibitem[KO]{ko}  T. Kailath and V. Olshevsky,%Displacement Structure Approach to %Chebyshev-Vandermonde and Related Matrix,%{\em submitted for publication}, 1994.%\bibitem[KS]{ks} T. Kailath and A. Sayed,%Displacement Structure: Theory and Applications,%{\em SIAM Review}, 37, 3, 297-386, 1995.%\bibitem[KVM]{kvm} T. Kailath, A. Viera, %and M. Morf,%Inverses of Toeplitz Operators, Innovations, %and Orthogonal Polynomials,%{\em SIAM Review}, 20, 1, pp.~106-119, 1978.%\bibitem[P90]{p90} V. Y. Pan,%Computations with Dense Structured Matrices,%{\em Math. of Computation}, 55, pp.179-190, 1990.%\bibitem[P92]{p92} V. Y. Pan,%Parallel Solution of Toeplitz-like Linear Systems,%{\em J. of Complexity}, 8, pp.~1-21, 1992.%\bibitem[P93]{p93} V. Y. Pan,%Concurrent Iterative Algorithms for %Toeplitz-like Linear Systems,%{\em IEEE Trans. on Parallel and Distributive Systems}, %4, 5, pp.~592-600, 1993.%\bibitem[P93a]{p93a} V. Y. Pan,%Decreasing the Displacement Rank of a Matrix,%{\em SIAM J. Matrix Anal. Appl.}, 14, 1, pp.~118-121, 1993.%\bibitem[W]{w} D. H. Wood,%Product Rules for the Displacement of Near-Toeplitz Matrices,%{\em Linear Algebra Appl.}, 188, 189, pp.~641-663, 1993.%\end {thebibliography}%\newpage%\appendix%$\renewcommand{\thesection}{Appendix.}\section{Extension to the Inversion of Toeplitz-like, Vandermonde-like, and\ Chebyshev-Vandermonde-like Matrices}Let $V$ be an $n\times n$ Vandermonde-like matrix such that$$\nabla_{\{D_{1/x},Z_1^T\}}(V)=D_{1/x}V-VZ_1^T=GB^T\ ,$$where $G\in {\bf C}^{n\times \beta},\ B\in {\bf C}^{n\times \beta}$. Then, due to a resultfrom \cite{gko}, $C=VF^*$ is a Cauchy-like matrix such that$$\nabla_{\{D_{1/x},D_1^*\}}(VF^*)=GH^T\ ,$$where  $Z_1 $ is defined by (1.4) for $f=1$, $$Z_1=\pmatrix{&0&1&0&\cdots&0&\cr&0&0&1&\cdots&0&\cr&\vdots&\vdots&\vdots&\ddots&\vdots&\cr&0&0&0&\cdots&1&\cr&1&0&0&\cdots&0&}\ ,$$$$H^T=B^TF^*\ ,\qquadD_{1/x}=diag \pmatrix{\ {1\over x_1},\cdots,{1\over x_n}\ },$$$$D_1^*=diag \pmatrix{\ 1,e^{-{2\pi i\over n}},\cdots,e^{-{2\pi i\over n}(n-1)}\ }\ ,\qquadF={1\over \sqrt{n}}\left[\begin{array}{c} e^{{2\pi i\over n}(k-1)(j-1)}\end{array} \right]_{k,j=1}^n\ ,$$ so that $F$ stands for the ( normalized ) matrix of Discrete Fourier Transform( DFT ), and $F^*$ is the Hermitian transpose of the matrix $F$, $F^*=F^{-1}$, $||F||=||F^*||=\sqrt{n}.$Let $X_0,\ C,$ and $\theta$ satisfy the assumptions of corollary 4.1. Let $\epsilon=\epsilon^*/ \sqrt{n}$ and let $X_{k^*}^*$ denote the matrix obtained in $k^*+1$ steps (2.5), (2.6) [ for $k^*$ defined by (4.16) ] at the arithmetic computational cost $O(k^*\beta^2 n\log^2 n).$Then we have$$||\ (VF^*)^{-1}-X_{k^*+1}^*\ ||<\epsilon \sqrt{n}.$$Similarly, consider a Chebyshev-Vandermonde-like matrix $R$, which has generators $G,\ B$ such that$$\nabla_{\{2D_x,Z_1+Z_1^T\}}(R)=2D_xR-R(Z_1+Z_1^T)=GB^T,\qquad G,\ B\in C^{\beta \times n}.$$By the virtue of a result from \cite{ko}, $C=RF^*$ is a Cauchy-like matrixsuch that$$\nabla_{\{2D_x,D_{cos}\}}(RF^*)=2D_xRF^*-RF^*D_{cos}=GB^TF^*,$$where $F,\ D_x$, and \ $Z_1$ are as above, and$$D_{cos}=diag\pmatrix{\ 2,2cos({\pi\over n}),\cdots,2cos({(n-1)\pi\over n})\ }.$$By using the latter equations, we may extend the inversion of $C$ to the inversion of $R$, similarly to the case of a Vandermonde-like matrix $V$.Finally, we recall how to reduce the inversion of Toeplitz-like matrices to the Cauchy-like case. \\{\bf Proposition 5.1} \cite{gko}. {\em Let $T\in {\bf C}^{n\times n}$ be a Toeplitz-like matrix, such that$$\nabla_{\{Z_1,Z_{-1}\}}(T)=Z_1T-TZ_{-1}=GB^T,$$where $G\in {\bf C}^{n\times  \beta}$ and $B\in {\bf C}^{n\times \beta}$. Then,$C=FTD_0^{-1}F^*$ is a Cauchy-like matrix:$$\nabla_{\{D_1,D_{-1}\}}(FTD_0^{-1}F^*)=D_1(FTD_0^{-1}F^*)-(FTD_0^{-1}F^*)D_{-1}=\hat{G} H^T.$$Here, $D_{-1},\ F,\ F^*$, and $Z_1$ are defined above,}$$D_1=diag(\ 1, e^{2\pi i \over n},\cdots, e^{{2\pi i\over n}(n-1)}\ ),\qquad D_0=diag(\ 1, e^{\pi i\over n}, \cdots, e^{(n-1)\pi i\over n}\ ),$$$$\hat{G}=FG\ ,\quad and \quad \hat{H}^T=B^TD_0^{-1}F^*\ .$$Suppose that $X_0,\ C=FTD_0^{-1}F^*$, and $\theta $ satisfy the assumptions of corollary 4.1, let $\epsilon=\epsilon^*/ \sqrt{n}$, and let $X_{k^*+1}^*$ denote the matrixobtained in $k^*+1$ steps (2.5), (2.6), for $k^*$ of (4.16) and such that$$||\ C^{-1}-X_{k^*}^*\ ||\le \epsilon / n.$$ Then, we have$$||\ (\ FTD_0^{-1}F^*\ )^{-1}-X_{k^*+1}^*\ ||\le \epsilon /n.$$ We have $\qquad (FTD_0^{-1}F^*)^{-1}=FD_0T^{-1}F^*\ ,$$$F^*D_0^{-1}\ [\ (FTD_0^{-1}F^*)^{-1}-X_{k^*+1}^*\ ]\ F=T^{-1}-F^*D_0^{-1}X_{k^*+1}^*F\ .$$Therefore, by writing $\hat{X}_{k^*+1}=F^*D_0^{-1}X_{k^*+1}^*F$, we obtain that$$||\ T^{-1}-\hat{X}_{k^*+1}\ ||\le ||F^*||\ ||D_0^{-1}||\ ||F||\ \epsilon/n=\epsilon\ ,\ {\rm since}\ ||D_0^{-1}||=1,\ ||F||=||F^*||=\sqrt{n}\ .$$Thus, in $k^*+1$ steps (2.5), (2.6) , at the arithmetic computational cost $O(k^*\beta^2n\log^2 n)$, we will arrive at a desired matrix $\hat{X}_{k^*+1}=F^*D_0^{-1}X_{k^*}^*F$ approximating $T^{-1}$ withinthe error norm bound $\epsilon$.In fact, the algorithm of the present paper for Cauchy-like inversion extends the algorithm of [P93] for Toeplitz-likeinversion. Application of our present algorithm to Toeplitz-like inversion based on proposition 5.1 has someadvantages over the direct solution, by means ofthe algorithm of [P93]. Namely, modification of Newton'siteration of (2.5)-(2.8) in the Toeplitz-like case requiresan additional nonrational stage of computing the singular value decompositions of the product $GH^T$ of the generatormatrices $G$ and $H$ followed by the truncation by zeroing thesmaller singular values (cf. [P93a]). Such a nonrationalstage involves some additional computations and implies anincrease of the approximation error norm bound by factorsof order $\beta n$ at each recursive step, where $\beta$denotes the length of the displacement generator ofthe input matrix. To compensate for such an error norm increase, one needs to perform some extra Newton's steps,and this may substantially slow down or even ruin theconvergence unless the required bound on the initialapproximation error is strengthened, respectively.Our new Cauchy-like modification is free of such additionalrestrictions.\section{Reduction from Cauchy-like to Toeplitz-like Inversion}By following [P90], one may reduce inversion of any Cauchy-likematrix $C$ of (2.2) to the inversion of Vandermonde and Toeplitz-like matrices. Let us recall such a reduction (cf. [P90], [BP94], [GO]). We have that$$C=V(t^{-1})TV^T(s)~,\eqno(6.1)$$where$$V(q)=\pmatrix{&1&q_0&\cdots&q_0^{n-1}&\cr                &\vdots&\vdots&\vdots&\vdots&\cr                &1&q_0&\cdots&q_0^{n-1}&}$$(for $q=(q_i)_{i=0}^{n-1}$) is a Vandermonde matrix,$T$ is a Toeplitz-like matrix, such that $$\Delta_{\{Z_{\varphi},Z_{1/\varphi}\}}(T)=T-Z_{\varphi}TZ_{1/\varphi}^T=\overline{G}\overline{H}^T=[\overline{g}_1,\cdots,\overline{g}_{\alpha+2}][\overline{h}_1,\cdots,\overline{h}_{\alpha+2}]^T~,$$[cf. (1.1)];$$\overline{g}_m=V^{-1}({1\over t})g_m,~~~~\overline{h}_m=V^{-1}(s)h_m,~~~~m=1,2,\cdots,\alpha;$$$$[g_1,\cdots,g_{\alpha}]=D_{1\over t}[z_1,\cdots,z_n]^T;$$$$[h_1,\cdots,h_{\alpha}]=[y_1,\cdots,y_n]^T,$$$$\overline{g}_{\alpha+1}=-v-\varphi e_0,~~~~\overline{h}_{\alpha+1}=\Phi_{\gamma}V^{-1}(s)C^{-1}V^{-T}({1\over t})e_{n-1}~,$$$$\overline{g}_{\alpha+2}=Z_{\varphi}V^{-1}({1\over t})CV^{-T}(s) e_{n-1},~~~~\overline{h}_{\alpha+2}=-\gamma-{1\over \varphi}e_0~~,$$$$P(\lambda)=\prod_{i=0}^{n-1}(\lambda-s_i)=\lambda^n+\sum_{i=0}^{n-1}\gamma_i \lambda^i,~~~~\gamma=(\gamma_i)_{i=0}^{n-1}~,$$$$U(\lambda)=\prod_{i=0}^{n-1}(\lambda-{1\over t_i})=\lambda^n+\sum_{i=0}^{n-1} v_i \lambda^i,~~~~v=(v_i)_{i=0}^{n-1}~,$$$$\Phi_{\gamma}=\pmatrix{&0&0&\cdots&0&-\gamma_0&\cr                         &1&0&\cdots&0&-\gamma_1&\cr                         &\vdots&\ddots&\ddots&\vdots&\vdots&\cr                         &0&0&\cdots&1&-\gamma_{n-1}&}$$is the Frobenius (companion) matrix of the polynomial$P(\lambda)$, with coefficients $\gamma_i,~i=0,1,\cdots,n-1$.Due to (6.1), we have$$C^{-1}=V^{-T}(s)T^{-1}V^{-1}(t^{-1})~,\eqno(6.2)$$which, in principle, reduces Cauchy-like inversion toToeplitz-like inversion and Vandermonde computations,as promised. In the previous section, however, we commentedon some advantages of our present modification ofNewton's iteration in the Cauchy-like case over the knownone in the Toeplitz-like case. Involvement of operations withVandermonde matrices is an additional burden in the lattercase; furthermore, numerical implementation of the Vandermonde inversion stage is hard since Vandermonde matricesare known to be ill-conditioned (cf. [GI] and [GO], equation (3.5)),unlike the Fourier transform matrices $F$ of section 5 (cf. [BP], proposition 3.4.1).\section{Discussion}The proposed algorithms for Cauchy-like inversion are not complete;they should be complemented by some recipes for obtaining initialapproximations $X_0$, which should be good enough in order toguarantee sufficiently fast convergence, as we estimated in section 4.In some cases, a good initial approximation is readily available,for instance, if the original matrix arises from discretization ofdynamically varying input parameters and if the objective is tomaintain the originally available solution. Presently, however,we have no recipes for rapid computation of the initialapproximations for the general case input, so that our presentpaper only supplies one half of a solution, leaving the initialguess problem open. A possible direction towards filling thisgap is by extending the homotopy approach of [P92], originallydeveloped for the Toeplitz-like case. According to this approach,one first approximates the inverse of a nearby Toeplitz-like matrix whose inversion is simple. Then, one recursively usesthe computed approximations as the initial approximations $X_0$ to the inverses of the nearby matrices in their homotopictransformation to the original matrix. In [P92], this approachwas specified and made effective for any well-conditionedToeplitz-like input matrix.\newpage\begin {thebibliography}{CKL-A}\bibitem[BP]{bp} D. Bini and V. Y. Pan,{\em Polynomial and Matrix Computations, Volume 1: Fundamental Algorithms},Birkhaeuser, Boston, 1994.\bibitem[CKL-A]{ckl-a} J. Chun, T. Kailath, and H. Lev-Ari,Fast Parallel Algorithm for QR-factorization of Structured Matrices,{\em SIAM J. Sci. Stat. Comput.}, 8, 6, pp.~899-913, 1987.\bibitem[GKK]{gkk} I. Gohberg, T. Kailath, and I. Koltracht,Efficient Solution of Linear Systems of Equations with Recursive Structure, {\em Linear Algebra Appl.,} 80, pp.~81-113, 1986.\bibitem[GKKL]{gkkl} I. Gohberg, T. Kailath, I. Koltracht, and P. Lancaster,Linear Complexity Parallel Algorithms for Linear Systems of Equations with Recursive Structure, {\em Linear Algebra Appl.,} 88/89, pp.~271-315, 1987.\bibitem[GI]{gi} W. Gautschi and G. Inglese, Lower Bounds for the Condition Number of VandermondeMatrices, {\em Numerische Math., } 52, 241-250, 1988.\bibitem[GKO]{gko}  I. Gohberg, T. Kailath, and V. Olshevsky, Fast Gaussian Elimination with Partial Pivoting for Matrices with Displacement Structure, {\em submitted for publication}, 1994.\bibitem[GL]{gl} G. H. Golub and C. F. Van Loan,{\em Matrix Computations}, Johns Hopkins Univ. Press, Baltimore, Maryland,1989.\bibitem[GO]{go} I. Gohberg and V. Olshevsky,Complexity of Multiplication with Vectors for Structured Matrices,{\em Linear Algebra Appl.}, 202, pp.~163-192, 1994.\bibitem[GO1]{go1} I. Gohberg and V. Olshevsky,Fast Inversion of Chebyshev-Vandermonde Matrices,{\em Numer. Math.}, 67, 1, pp.~71-92, 1994.\bibitem[H]{h} G. Heinig, Inversion of Generalized Cauchy Matrices and the Other Classes of StructuredMatrices,{\em Linear Algebra for Signal Processing, IMA Volume in Math. and Its Applications}, 69, pp.~95-114, Springer, 1994.\bibitem[HR]{hr} H. Heinig and K. Rost,{\em Algebraic Methods for Toeplitz-like Matrices and Operators, Operator Theory}, 13, Birkhaeuser, 1984.\bibitem[KKM]{kkm} T. Kailath, S.-Y. Kung, and M. Morf,Displacement Ranks of Matrices and Linear Equations,{\em J. Math. Anal. Appl.}, 68, 2, pp.~395-407, 1979.\bibitem[KO]{ko}  T. Kailath and V. Olshevsky,Displacement Structure Approach to Chebyshev-Vandermonde and Related Matrix,{\em submitted for publication}, 1994.\bibitem[KS]{ks} T. Kailath and A. Sayed,Displacement Structure: Theory and Applications,{\em SIAM Review}, 37, 3, 297-386, 1995.\bibitem[KVM]{kvm} T. Kailath, A. Viera, and M. Morf,Inverses of Toeplitz Operators, Innovations, and Orthogonal Polynomials,{\em SIAM Review}, 20, 1, pp.~106-119, 1978.\bibitem[P90]{p90} V. Y. Pan,Computations with Dense Structured Matrices,{\em Math. of Computation}, 55, pp.179-190, 1990.\bibitem[P92]{p92} V. Y. Pan,Parallel Solution of Toeplitz-like Linear Systems,{\em J. of Complexity}, 8, pp.~1-21, 1992.\bibitem[P93]{p93} V. Y. Pan,Concurrent Iterative Algorithms for Toeplitz-like Linear Systems,{\em IEEE Trans. on Parallel and Distributive Systems}, 4, 5, pp.~592-600, 1993.\bibitem[P93a]{p93a} V. Y. Pan,Decreasing the Displacement Rank of a Matrix,{\em SIAM J. Matrix Anal. Appl.}, 14, 1, pp.~118-121, 1993.\bibitem[W]{w} D. H. Wood,Product Rules for the Displacement of Near-Toeplitz Matrices,{\em Linear Algebra Appl.}, 188, 189, pp.~641-663, 1993.\end {thebibliography}\end{document}--0-1593265712-843887875=:19412Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="iterref2.tex"Content-Transfer-Encoding: BASE64Content-ID: <Pine.OSF.3.93.960928011755.19412B@broadway.gc.cuny.edu>Content-Description: XGRvY3VtZW50c3R5bGVbMTFwdF17YXJ0aWNsZX0NClx0b3BtYXJnaW4gIC0wLjRpbg0KXG9kZHNpZGVtYXJnaW4gMC4wNWluDQpcZXZlbnNpZGVtYXJnaW4gMC4wNWluDQpcdGV4dGhlaWdodCA5LjZpbg0KXHRleHR3aWR0aCAgNi43aW4NClxoZWFkaGVpZ2h0IDBpbg0KXGhlYWRzZXAgICAgMGluDQpcZm9vdHNraXAgICAwLjVpbg0KXGZvb3RoZWlnaHQgMGluDQpccmVuZXdjb21tYW5ke1xiYXNlbGluZXN0cmV0Y2h9ezEuNTV9DQpcbmV3dGhlb3JlbSB7cHJvcH17XHNjIFxiZiBQcm9wb3NpdGlvbn1bc2VjdGlvbl0NClxuZXd0aGVvcmVtIHtkZWZzfXtcc2MgXGJmIERlZmluaXRpb259W3NlY3Rpb25dDQpcbmV3dGhlb3JlbSB7bGVtbWF9e1xzYyBcYmYgTGVtbWF9W3NlY3Rpb25dDQpcbmV3dGhlb3JlbXtyZW1hcmt9e1xzYyBcYmYgUmVtYXJrfVtzZWN0aW9uXQ0KXG5ld3RoZW9yZW17Y29yfXtcc2MgXGJmIENvcm9sbGFyeX1bc2VjdGlvbl0NClxuZXd0aGVvcmVte2ZhY3R9e1xzYyBcYmYgRmFjdH1bc2VjdGlvbl0NClxuZXd0aGVvcmVte3RoZW9yZW19e1xzYyBcYmYgVGhlb3JlbX1bc2VjdGlvbl0NClx0aXRsZXtcYmYgTmV3dG9uJ3MgSXRlcmF0aW9uIGZvciBJbnZlcnNpb24gb2YgQ2F1Y2h5LWxpa2UgDQphbmQgT3RoZXIgDQpTdHJ1Y3R1cmVkIE1hdHJpY2Vzfn5cdGhhbmtze1RoaXMgd29yayB3YXMgc3VwcG9ydGVkIA0KYnkgTlNGIEdyYW50IENDUiA5MDIwNjkwIGFuZCANClBTQyBDVU5ZIEF3YXJkcyA2NjUzMDEgYW5kIDY2NjMyNywgYW5kIA0KaGFzIGJlZW4gcHJlc2VudGVkIGluIENvcHBlciBNb3VudGFpbg0KQ29uZmVyZW5jZSBvbiBJdGVyYXRpdmUgTWV0aG9kcywgQ29wcGVyIE1vdW50YWluLCANCkNvbG9yYWRvLCBVU0EsIEFwcmlsIDktMTMsIDE5OTYufX0NCg0KXGF1dGhvcntWaWN0b3IgWS4gJHtccm0gUGFuXntbMSwzLGFdfSx+fn5+DQpBaWxvbmd+IFpoZW5nXntbMixiXX0sfn5+flhpYW9oYW5+IEh1YW5nXntbMixjXX0sDQp+fn5+T2xlbn4gRGlhc157WzJdfX0kXFwNClxhbmRcXA0KJF57WzFdfn59JERlcGFydG1lbnQgb2YgTWF0aGVtYXRpY3MgYW5kIENvbXB1dGVyIFNjaWVuY2UgXFwNCkxlaG1hbiBDb2xsZWdlLCBDaXR5IFVuaXZlcnNpdHkgb2YgTmV3IFlvcmtcXA0KQnJvbngsIE5ZIDEwNDY4LCBVU0FcXA0KJF57W2Fdfn59JEludGVybmV0OiB2cGFuQGxjdmF4LmxlaG1hbi5jdW55LmVkdVxcDQpcYW5kXFwNCiRee1syXX5+fSRQaC5ELiBQcm9ncmFtIGluIE1hdGhlbWF0aWNzLFxcDQokXntbM11+fn0kUGguRC4gUHJvZ3JhbSBpbiBDb21wdXRlciBTY2llbmNlLFxcDQokXntbMl0sflszXX5+fSRHcmFkdWF0ZSBTY2hvb2wgYW5kIFVuaXZlcnNpdHkgQ2VudGVyXFwNCkNpdHkgVW5pdmVyc2l0eSBvZiBOZXcgWW9ya1xcDQozMyBXZXN0IDQybmQgU3RyZWV0LCBOZXcgWW9yaywgTlkgMTAwMzYsIFVTQVxcDQokXntbYl1+fn0kSW50ZXJuZXQ6IGF6aGVuZ0BlbWFpbC5nYy5jdW55LmVkdVxcDQokXntbY11+fn0kSW50ZXJuZXQ6IHhodWFuZ0BlbWFpbC5nYy5jdW55LmVkdX0NCg0KXGJlZ2lue2RvY3VtZW50fQ0KXG1ha2V0aXRsZQ0KDQoNCg0KXG5ld3BhZ2UNCg0KXGJlZ2lue2Fic3RyYWN0fQ0KV2Ugc3BlY2lmeSBzb21lIGluaXRpYWwgYXNzdW1wdGlvbnMgdGhhdCBndWFyYW50ZWUgDQpyYXBpZCByZWZpbmVtZW50IG9mIGEgcm91Z2ggDQppbml0aWFsIGFwcHJveGltYXRpb24gdG8gdGhlIGludmVyc2Ugb2YgDQphIENhdWNoeS1saWtlIG1hdHJpeCwgYnkgbWVhbnMgb2Ygb3VyIA0KbmV3IG1vZGlmaWNhdGlvbiBvZiBOZXd0b24ncyBpdGVyYXRpb24sIA0Kd2hlcmUgdGhlIGlucHV0LCBvdXRwdXQsIGFuZCBhbGwgdGhlDQphdXhpbGlhcnkgbWF0cmljZXMgYXJlIHJlcHJlc2VudGVkIHdpdGggDQp0aGVpciBzaG9ydCBnZW5lcmF0b3JzIGRlZmluZWQgYnkgdGhlDQphc3NvY2lhdGVkIHNjYWxpbmcgb3BlcmF0b3JzLiBUaGUgY29tcHV0YXRpb25zIA0KYXJlIHBlcmZvcm1lZCBmYXN0IHNpbmNlDQp0aGV5IGFyZSBjb25maW5lZCB0byBvcGVyYXRpb25zIHdpdGggc2hvcnQgDQpnZW5lcmF0b3JzIG9mIHRoZSBnaXZlbiBhbmQgY29tcHV0ZWQNCm1hdHJpY2VzLiBCZWNhdXNlIG9mIHRoZSBrbm93biBjb3JyZWxhdGlvbnMgDQphbW9uZyB2YXJpb3VzIHN0cnVjdHVyZWQNCm1hdHJpY2VzLCB0aGUgYWxnb3JpdGhtIGlzIGltbWVkaWF0ZWx5IGV4dGVuZGVkIA0KdG8gcmFwaWQgcmVmaW5lbWVudCBvZiByb3VnaA0KaW5pdGlhbCBhcHByb3hpbWF0aW9ucyB0byB0aGUgaW52ZXJzZXMgb2YgVmFuZGVybW9uZGUtLWxpa2UsIA0KQ2hlYnlzaGV2LS1WYW5kZXJtb25kZS0tbGlrZSBhbmQgVG9lcGxpdHotLWxpa2UgbWF0cmljZXMsIA0Kd2hlcmUgYWdhaW4sIHRoZSBjb21wdXRhdGlvbnMgYXJlDQpjb25maW5lZCB0byBvcGVyYXRpb25zIHdpdGggc2hvcnQgZ2VuZXJhdG9ycyBvZiANCnRoZSBpbnZvbHZlZCBtYXRyaWNlcy4NClxlbmR7YWJzdHJhY3R9DQoNCntcYmYgS2V5IFdvcmRzOn0gc3RydWN0dXJlZCBtYXRyaWNlcywgDQpDYXVjaHkgbWF0cmljZXMsIFRvZXBsaXR6IG1hdHJpY2VzLA0KVmFuZGVybW9uZGUgbWF0cmljZXMsIG1hdHJpeCBjb21wdXRhdGlvbnMsIA0KTmV3dG9uJ3MgaXRlcmF0aW9uLCBtYXRyaXggaW52ZXJzaW9uLg0KDQp7XGJmIDE5OTEgTWF0aC4gU3ViamVjdCBDbGFzc2lmaWNhdGlvbjp9IA0KMTVBMDksIFwsIDY1RjEwLCBcLCA0N0IzNS4NCg0KXHNlY3Rpb257SW50cm9kdWN0aW9ufQ0KQ29tcHV0YXRpb25zIHdpdGggc3RydWN0dXJlZCBtYXRyaWNlcyANCiggc3VjaCBhcyBUb2VwbGl0eiwgQ2F1Y2h5LCBhbmQgDQpWYW5kZXJtb25kZSBtYXRyaWNlcyApIGNhbiBiZSBmYWNpbGl0YXRlZCANCiggc28gdGhhdCB0aGUgY29tcHV0YXRpb25hbCB0aW1lIGFuZA0KbWVtb3J5IHNwYWNlIGRlY3JlYXNlIGRyYW1hdGljYWxseSApIA0KYnkgbWVhbnMgb2YgcmVwcmVzZW50aW5nIHRoZXNlICBtYXRyaWNlcw0Kd2l0aCB0aGVpciAic2hvcnQiIHtcZW0gZ2VuZXJhdG9yc30gYXNzb2NpYXRlZCANCndpdGggc29tZSBvcGVyYXRvcnMgb2YgZGlzcGxhY2VtZW50DQooIHNoaWZ0ICkgIGFuZC9vciBzY2FsaW5nIFxjaXRle2t2bX0sIA0KXGNpdGV7a2ttfSwgXGNpdGV7Y2tsLWF9LCBcY2l0ZXtna2t9LA0KXGNpdGV7Z2trbH0sIFxjaXRle2hyfSwgXGNpdGV7cDkwfSwgDQpcY2l0ZXtnb30sIFxjaXRle2JwfSwgXGNpdGV7aH0sIA0KXGNpdGV7Z2tvfSwgXGNpdGV7Z28xfSwgXGNpdGV7a299LCBcY2l0ZXtrc30uDQoNClN1Y2ggYSBnZW5lcmF0b3IgaXMgYSBwYWlyICQoRywgSCkkIG9mIG1hdHJpY2VzIGFzc29jaWF0ZWQgd2l0aA0KYSBnaXZlbiBzdHJ1Y3R1cmVkICRuXHRpbWVzIG4kIG1hdHJpeCAkQSQsIA0Kc2F0aXNmeWluZyB0aGUgZm9sbG93aW5nIA0KbWF0cml4IGVxdWF0aW9ucywNCiQkXERlbHRhX3tce1IsU1x9fShBKT1BLVJBUz1HSF5UIFxlcW5veygxLjEpfSQkDQpvcg0KJCRcbmFibGFfe1x7UixTXH19KEEpPVJBLUFTPUdIXlQsXGVxbm97KDEuMil9JCQNCmZvciBhIGZpeGVkIG5hdHVyYWwgJFxhbHBoYSQsIA0KY2FsbGVkIHRoZSB7XGVtIGxlbmd0aH0gb2YgdGhlIGdlbmVyYXRvciwgDQpmb3IgdHdvIGZpeGVkIG1hdHJpY2VzICRSJCBhbmQgJFMkLCANCnJlcHJlc2VudGluZyBzY2FsaW5nIGFuZC9vciBkaXNwbGFjZW1lbnQsDQphbmQgZm9yIHNvbWUgJG4gXHRpbWVzIFxhbHBoYSQgbWF0cmljZXMgDQokRyQgYW5kICRIJC4gIEhlcmUgYW5kIGhlcmVhZnRlciwgJFdeVCQNCmRlbm90ZXMgdGhlIHRyYW5zcG9zZSBvZiBhIHZlY3RvciBvciBhIG1hdHJpeCAkVyQsICANCmFuZCB3ZSBub3RlIHRoYXQgdGhlIHJhbmsgb2YgdGhlIG1hdHJpeCAkR0heVCQgZG9lcyBub3QNCmV4Y2VlZCB0aGUgbGVuZ3RoICRcYWxwaGEkIG9mIHRoZSBnZW5lcmF0b3IgJEckLCAkSCQuDQpXZSBhbHNvIG5vdGUgdGhhdCB0aGUgb3BlcmF0b3JzICRcRGVsdGFfe1x7UixTXH19KEEpJCBhbmQNCiRcbmFibGFfe1x7UixTXH19KEEpJCBhcmUgY2xvc2VseSByZWxhdGVkIHRvIGVhY2ggb3RoZXINCmlmIHRoZSBtYXRyaWNlcyAkUiQgYW5kL29yICRTJCBhcmUgbm9uc2luZ3VsYXIuDQpJbiB0aGlzIHBhcGVyLCB3ZSB3aWxsIG9ubHkgZGVhbCB3aXRoIA0KJFxuYWJsYV97XHtSLFNcfX0kLWdlbmVyYXRvcnMgb2YgJEEkLCBvZiB0aGUNCmZvcm0gJCgxLjIpJCwgZXhjZXB0IGZvciBvbmUgY2FzZSBpbiBzZWN0aW9uIDYsDQphbmQgd2lsbCBzcGVjaWZ5ICRSJCBhbmQgJFMkIA0KYWNjb3JkaW5nIHRvIHRoZSBlcXVhdGlvbnMNCiQoMS4zKS0oMS41KSQgYmVsb3cuIFNjYWxpbmcgaXMgcmVwcmVzZW50ZWQgDQpieSBkaWFnb25hbCBtYXRyaWNlcw0KJCREX3ggPWRpYWcoXCB4XzEsIHhfMiwgXGNkb3RzLCB4X25cICksIA0KXGVxbm97KDEuMyl9JCQNCmZvciBmaXhlZCAkeF8xLCB4XzIsIFxjZG90cywgeF9uLCQgDQp3aGVyZWFzIHN1Y2ggbWF0cmljZXMgYXMgDQokJFpfZj1ccG1hdHJpeHsmMCYwJlxjZG90cyYwJmYmXGNyDQomMSYwJlxjZG90cyYwJjAmXGNyDQomXHZkb3RzJlx2ZG90cyZcZGRvdHMmXHZkb3RzJlx2ZG90cyZcY3INCiYwJjAmXGNkb3RzJjAmMCZcY3INCiYwJjAmXGNkb3RzJjEmMCZ9XCAsXGVxbm97KDEuNCl9JCQNCm9yICQkIGFaX2YrYlpfXHZhcnBoaV5UK2NaX1xwc2leey0xfVwgLFxlcW5veygxLjUpfSQkDQpmb3Igc29tZSBmaXhlZCBzY2FsYXJzICRhLFwgYixcIGMsXCBmLFwgXHZhcnBoaSQsIA0KYW5kICRccHNpIFxuZXEgMCQsIHJlcHJlc2VudCANCmRpc3BsYWNlbWVudC4NCg0KVGhlIGtleS1pZGVhIGlzIHRoYXQgdGhlIG9yaWdpbmFsIG1hdHJpeCAkQSQgDQpjYW4gYmUgZWFzaWx5IHJlY292ZXJlZCBmcm9tIGl0cw0KZ2VuZXJhdG9ycyAoMS4xKSBvciAoMS4yKTsgbW9yZW92ZXIsIA0KdGhlIGJhc2ljIG9wZXJhdGlvbnMgKCBzdWNoIGFzDQptdWx0aXBsaWNhdGlvbiwgYWRkaXRpb24sIHN1YnRyYWN0aW9uLCANCmFuZCBpbnZlcnNpb24gKSB3aXRoICRuXHRpbWVzIG4kDQpzdHJ1Y3R1cmVkIG1hdHJpY2VzIG9mIGNlcnRhaW4gY2xhc3NlcyANCmNhbiBiZSByZWR1Y2VkIHRvIG9wZXJhdGlvbnMgd2l0aCANCnRoZWlyIGdlbmVyYXRvcnMgdGhhdCBhcmUgcmVwcmVzZW50ZWQgDQpieSAkTyhcYWxwaGEgbikkIHBhcmFtZXRlcnMuIFRoaXMgbGVhZHMgdG8gYQ0KZHJhbWF0aWMgc2F2aW5nIG9mIHRoZSBjb21wdXRhdGlvbmFsIA0KdGltZSBhbmQgbWVtb3J5IHNwYWNlLCBpZiAkXGFscGhhJCBpcyANCm11Y2ggbGVzcyB0aGFuICRuJC4gDQoNCkZvciBUb2VwbGl0eiwgQ2F1Y2h5ICggZ2VuZXJhbGl6ZWQgSGlsYmVydCApLCANCmFuZCBWYW5kZXJtb25kZSBtYXRyaWNlcywgdGhlICANCmxlbmd0aCAkXGFscGhhJCBvZiB0aGUgYXNzb2NpYXRlZCBnZW5lcmF0b3JzIA0KKDEuMSkgYW5kICgxLjIpLCBmb3Igc29tZQ0KYXBwcm9wcmlhdGUgY2hvaWNlcyBvZiB0aGUgbWF0cmljZXMgJFIkIGFuZCANCiRTJCBhbW9uZyB0aGUgbWF0cmljZXMgb2YgdGhlIA0KY2xhc3NlcyAoMS4zKSBhbmQgKDEuNCksIGlzIGFzIHNtYWxsIGFzICQxJCANCm9yICQyJC4gVGhlIHRocmVlIGNsYXNzZXMgb2YNCm1hdHJpY2VzIGFyZSBuYXR1cmFsbHkgZXh0ZW5kZWQgdG8gVG9lcGxpdHotbGlrZSwgDQpDYXVjaHktbGlrZSwgYW5kIA0KVmFuZGVybW9uZGUtbGlrZSBtYXRyaWNlcywgZm9yIHdoaWNoICRcYWxwaGEkIA0KaXMgYm91bmRlZCBieSBhIGZpeGVkICggYW5kIA0Kbm90IHRvbyBsYXJnZSApIGNvbnN0YW50LiAoIFRoZXNlIGNsYXNzZXMgDQppbmNsdWRlIG9yIGFyZSBjbG9zZWx5IHJlbGF0ZWQgdG8NCnNvbWUgb3RoZXIgd2VsbC1rbm93biBjbGFzc2VzIG9mIHN0cnVjdHVyZWQgDQptYXRyaWNlcywgc3VjaCBhcyBjaXJjdWxhbnQsIFN5bHZlc3RlciwNCnN1YnJlc3VsdGFudCwgSGFua2VsLCBIYW5rZWwtbGlrZSwgTG93ZW5lciwgDQpCZXpvdXQsIGFuZCBDaGVieXNoZXYtVmFuZGVybW9uZGUNCm1hdHJpY2VzIFxjaXRle2hyfSwgIFxjaXRle2JwfSwgXGNpdGV7aH0sIA0KXGNpdGV7Z28xfSwgXGNpdGV7a299LiApICAgSXQgd2FzDQpvYnNlcnZlZCBpbiBcY2l0ZXtwOTB9IHRoYXQgc29tZSAgDQpjb3JyZWxhdGlvbnMgYW1vbmcgdGhlIG9wZXJhdG9ycyANCmFzc29jaWF0ZWQgd2l0aCB0aGUgbWF0cmljZXMgb2YgdGhlIA0KdGhyZWUgY2l0ZWQgY2xhc3NlcyBjYW4gYmUgZXhwbG9pdGVkIGluDQpvcmRlciB0byByZWR1Y2UgdGhlIGNvbXB1dGF0aW9ucyBmb3IgDQptYXRyaWNlcyBvZiBhbnkgb2YgdGhlIHRocmVlIGNsYXNzZXMgdG8NCmNvbXB1dGF0aW9ucyB3aXRoIG1hdHJpY2VzIG9mIHRoZSBjbGFzcyANCmZvciB3aGljaCBtb3N0IGVmZmVjdGl2ZSBhbGdvcml0aG1zDQphcmUgYXZhaWxhYmxlLiBJbiB0aGVpciBvcmlnaW5hbCBmb3JtLCB0aGUgcmVkdWN0aW9ucyANCnByb3Bvc2VkIGluIFxjaXRle3A5MH0gd2VyZSBub3QgY29udmVuaWVudA0KZm9yIHByYWN0aWNhbCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHRoZXkgaW52b2x2ZWQgDQpvcGVyYXRpb25zIHdpdGggVmFuZGVybW9uZGUgbWF0cmljZXMsIGFuZCBzdWNoIG1hdHJpY2VzDQphcmUgZ2VuZXJhbGx5IGtub3duIHRvIGJlIGlsbC1jb25kaXRpb25lZCBcY2l0ZXtnaX0uDQoNCk9uIHRoZSBvdGhlciBoYW5kLCBpbiB0aGUgaW1wb3J0YW50IGNhc2Ugb2YgdGhlIHRyYW5zaXRpb24gDQpmcm9tDQpUb2VwbGl0ei1saWtlIGFuZCBWYW5kZXJtb25kZS1saWtlIA0KbWF0cmljZXMgdG8gQ2F1Y2h5LWxpa2UgbWF0cmljZXMsDQp0aGUgcmVkdWN0aW9uIGlzIGRyYW1hdGljYWxseSBzaW1wbGlmaWVkIGFuZCBiZWNvbWVzIA0KcHJhY3RpY2FsbHkgZWZmZWN0aXZlIGJlY2F1c2UsIGluIHRoaXMgY2FzZSwgDQp0aGUgVmFuZGVybW9uZGUgbWF0cmljZXMgdHVybiBpbnRvICAgIA0KdGhlIG1hdHJpY2VzIG9mIHRoZSBkaXNjcmV0ZSBGb3VyaWVyIHRyYW5zZm9ybXMsICANClxjaXRle2h9IGFuZCBcY2l0ZXtna299LCBhbmQgdGhlIHJlZHVjdGlvbiB0byANCkNhdWNoeS1saWtlIGNvbXB1dGF0aW9ucyBpcyBwZXJmb3JtZWQNCnZpYSBGRlQsIHRoYXQgaXMsIGluIGEgZmFzdCBhbmQgbnVtZXJpY2FsbHkgc3RhYmxlDQp3YXkgKGNmLiBcY2l0ZXticH0gKS4gVGh1cywNCmVmZmVjdGl2ZSBhbGdvcml0aG1zIA0KZm9yIGNvbXB1dGF0aW9ucyB3aXRoIENhdWNoeS1saWtlIA0KbWF0cmljZXMgc2hvdWxkIHBsYXkgbW9zdCBmdW5kYW1lbnRhbCByb2xlLg0KDQpJbiB0aGUgcHJlc2VudCBwYXBlciwgd2UgY29uc2lkZXIgdGhlIHNvbHV0aW9uIG9mIA0KYSBub25zaW5ndWxhciBDYXVjaHktbGlrZSBsaW5lYXINCnN5c3RlbSwgJEMgXHZlY3t4fT1cdmVje3Z9XCAsJCANCmFuZCB0aGUgaW52ZXJzaW9uIG9mIGEgbm9uc2luZ3VsYXIgDQpDYXVjaHktbGlrZSBtYXRyaXggJEMkLiBUaGVzZSBvcGVyYXRpb25zIA0KY2FuIGJlIGltbWVkaWF0ZWx5IGV4dGVuZGVkIHRvIHRoZSANClZhbmRlcm1vbmRlLWxpa2UgYW5kIFRvZXBsaXR6LWxpa2UgY2FzZXMsDQphcyB3ZWxsIGFzIHRvIHRoZSBDaGVieXNoZXYtVmFuZGVybW9uZGUgDQpjYXNlcyAoIHNlZSBvdXIgc2VjdGlvbiA1IG9yIFxjaXRle2drb30sIA0KXGNpdGV7Z28xfSwgIFxjaXRle2h9IGFuZCBcY2l0ZXtrb30pLg0KDQpJdCBpcyB3ZWxsLWtub3duIHRoYXQgTmV3dG9uJ3MgaXRlcmF0aW9uIA0KcmFwaWRseSBpbXByb3ZlcyBhIHJvdWdoIGluaXRpYWwNCmFwcHJveGltYXRpb24gdG8gdGhlIG1hdHJpeCBpbnZlcnNlIA0KKCBjZi4gZS5nLiBcY2l0ZXticH1cICksIGJ1dCBzdWNoIGFuDQppdGVyYXRpb24gYWxzbyByYXBpZGx5IGRlc3Ryb3lzIHRoZSANCnN0cnVjdHVyZSBvZiBDYXVjaHktbGlrZSwgVG9lcGxpdHotbGlrZSwNCmFuZCBWYW5kZXJtb25kZS1saWtlIG1hdHJpY2VzLiBJbiBcY2l0ZXtwOTJ9LCANClxjaXRle3A5M30sIGFuZCBcY2l0ZXtwOTNhfSwgDQpOZXd0b24ncyBpdGVyYXRpb24gaGFzIGJlZW4gbW9kaWZpZWQgc28gDQphcyB0byBwcmVzZXJ2ZSB0aGUgaW5pdGlhbA0KZGlzcGxhY2VtZW50IHN0cnVjdHVyZSBvZiBhIFRvZXBsaXR6LWxpa2UgDQppbnB1dCBtYXRyaXggZHVyaW5nIHRoZSBpdGVyYXRpb24uDQpUaGUgaWRlYSB3YXMgdG8gY29udHJvbCB0aGUgZ3Jvd3RoIG9mIA0KdGhlIGxlbmd0aCBvZiBzaG9ydCBkaXNwbGFjZW1lbnQgDQpnZW5lcmF0b3JzIGJ5IHBlcmlvZGljYWxseSBjaG9wcGluZy1vZmYgDQp0aGVpciBjb21wb25lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlDQpzbWFsbGVzdCBzaW5ndWxhciB2YWx1ZXMgaW4gdGhlIFNWRHMgb2YgDQp0aGUgZGlzcGxhY2VtZW50IG1hdHJpY2VzIGRlZmluZWQgYnkgc3VjaA0KZ2VuZXJhdG9ycy4gVGhpcyBtYWRlIGFsbCB0aGUNCml0ZXJhdGlvbiBzdGVwcyBvZiB0aGUgcmVzdWx0aW5nIA0KYWxnb3JpdGhtcyBjb21wdXRhdGlvbmFsbHkgc2ltcGxlOyBtb3Jlb3ZlciwNCnN1Y2ggYSBzaW1wbGlmaWNhdGlvbiB3YXMgYWNoaWV2ZWQgDQp3aXRoIG5vIHNpZ25pZmljYW50IHNsb3dkb3duIG9mIHRoZSANCmNvbnZlcmdlbmNlLCBleGNlcHQgZm9yIHRoZSBpbml0aWFsIHN0YWdlcywgDQp3aGVyZSB0aGUgaW5jcmVhc2Ugb2YgdGhlIGFwcHJveGltYXRpb24gZXJyb3JzIA0KZHVlIHRvIHRoZSBsYXR0ZXIgY2hvcHBpbmcgcG9zZWQgYWRkaXRpb25hbCANCnNlcmlvdXMgcmVxdWlyZW1lbnRzIG9uIHRoZSBxdWFsaXR5IG9mIHRoZSANCmluaXRpYWwgYXBwcm94aW1hdGlvbi4NCg0KSW4gdGhlIHByZXNlbnQgcGFwZXIsIHdlIGNvbnNpZGVyIGEgDQpzaW1pbGFyIHByb2JsZW0gIG9mIGNvbnRyb2xsaW5nIHRoZSANCmxlbmd0aCBvZiB0aGUgYXNzb2NpYXRlZCBnZW5lcmF0b3JzIA0KaW4gYSBtb2RpZmljYXRpb24gb2YgTmV3dG9uJ3MgaXRlcmF0aW9uLA0Kd2hlcmUgdGhlIGludmVyc2Ugb2YgYSBmaXhlZCBDYXVjaHktbGlrZSANCmlucHV0IG1hdHJpeCAkQyQgaXMgc291Z2h0LiANCk91ciBzb2x1dGlvbiBvZiB0aGUgDQpwcm9ibGVtIGlzIHN1YnN0YW50aWFsbHkgc2ltcGxpZmllZCBpbiANCnRoaXMgY2FzZSAoIGluIHBhcnRpY3VsYXIsIHdlIGRvIG5vdA0KbmVlZCB0byBpbnZvbHZlIHRoZSBTVkQgKSwgZHVlIHRvIHRoZSANCmZvcm11bGEgZm9yIHRoZSBpbnZlcnNlIG1hdHJpeCAkQ157LTF9JA0KYXZhaWxhYmxlIGZyb20gXGNpdGV7aH0uIEluIHBhcnRpY3VsYXIsDQp3ZSBkbyBub3QgbmVlZCB0byBjb21wdXRlIHRoZSBTVkRzIG9mIHRoZQ0KYXV4aWxpYXJ5IG1hdHJpY2VzIGFuZCB0byBjaG9wLW9mZiB0aGUgDQpzbWFsbGVzdCBzaW5ndWxhciB2YWx1ZXMuIEJlc2lkZXMgdGhlIHJlc3VsdGluZw0KY29tcHV0YXRpb25hbCBzYXZpbmcgYXQgZWFjaCBOZXd0b24ncyBzdGFnZSwgDQp0aGlzIGVuYWJsZXMgdXMgdG8gcmVsYXggdGhlIHJlc3BlY3RpdmUNCmNvbnN0cmFpbnRzIG9uIHRoZSBjaG9pY2Ugb2YgdGhlIGluaXRpYWwgDQphcHByb3hpbWF0aW9uLiBUaGUgY2l0ZWQgYWR2YW50YWdlcyBzaG91bGQgbW90aXZhdGUgDQp0aGUgcmVkdWN0aW9uIG9mIHRoZSBUb2VwbGl0ei1saWtlDQpjYXNlIHRvIHRoZSBDYXVjaHktbGlrZSBjYXNlICggYnkgbWVhbnMgDQpvZiBGRlRzICkgYW5kIGFwcGx5aW5nIHRoZSB0ZWNobmlxdWVzDQpvZiB0aGUgcHJlc2VudCBwYXBlciwgaW5zdGVhZCBvZiB0aGUgDQppbnZlcnNpb24gb2YgVG9lcGxpdHotbGlrZSBtYXRyaWNlcyBieQ0KYXBwbHlpbmcgdGhlIHRlY2huaXF1ZXMgb2YgXGNpdGV7cDkyfSwgICAgIA0KXGNpdGV7cDkzfSwgYW5kIFxjaXRle3A5M2F9Lg0KDQpJbiBzcGl0ZSBvZiBzb21lIGZhY2lsaXRhdGlvbiBvZiB0aGUgDQpjaG9pY2Ugb2YgdGhlIGluaXRpYWwgYXBwcm94aW1hdGlvbiB0aGF0DQp3ZSBhY2hpZXZlZCBpbiB0aGUgQ2F1Y2h5LWxpa2UgY2FzZQ0KKCB2ZXJzdXMgdGhlIFRvcGxpdHotbGlrZSBjYXNlICksIHN1Y2ggYSBjaG9pY2UgcmVtYWlucyBhbg0Kb3BlbiBwcm9ibGVtIGZvciB0aGUgZ2VuZXJhbCBDYXVjaHktbGlrZSBpbnB1dCwgDQphbmQgd2UgZGlzY3VzcyB0aGlzIHByb2JsZW0gaW4gDQpvdXIgbGFzdCBzZWN0aW9uIDcuDQoNCk90aGVyd2lzZSwgd2UgcHJlc2VudCBvdXIgcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIA0Kb3JkZXIuIEluIHRoZSBuZXh0IHNlY3Rpb24sIHdlIGRlc2NyaWJlDQpvdXIgbW9kaWZpY2F0aW9uIG9mIGEgTmV3dG9uJ3MgaXRlcmF0aW9uIA0KZm9yIHRoZSByZWZpbmVtZW50IG9mIGFuIGluaXRpYWwNCmFwcHJveGltYXRpb24gdG8gdGhlIGludmVyc2Ugb2YgYSANCkNhdWNoeS1saWtlIG1hdHJpeC4gSW4gc2hvcnQgc2VjdGlvbiAzLCB3ZQ0KZXN0aW1hdGUgdGhlIGNvbXB1dGF0aW9uYWwgY29zdCBvZiANCmVhY2ggaXRlcmF0aW9uIHN0ZXAsIHBlcmZvcm1lZCBieSBvcGVyYXRpbmcgIA0Kd2l0aCBzaG9ydCBkaXNwbGFjZW1lbnQgZ2VuZXJhdG9ycyBvZiANCm1hdHJpY2VzLCByYXRoZXIgdGhhbiB3aXRoIHRoZSBtYXRyaWNlcw0KIHRoZW1zZWx2ZXMuIEluIHNlY3Rpb24gNCwgd2UgcXVhbnRpdGF0aXZlbHkgDQogc3BlY2lmeSB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgDQp0aGUgZXJyb3Igbm9ybSBvZiB0aGUgaW5pdGlhbA0KYXBwcm94aW1hdGlvbiB0byB0aGUgaW52ZXJzZSB0aGF0IA0KZ3VhcmFudGVlIHJhcGlkIGNvbnZlcmdlbmNlIG9mIG91cg0KbW9kaWZpY2F0aW9uIG9mIE5ld3RvbidzIGl0ZXJhdGlvbiwgDQphbmQgd2UgYWxzbyBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgDQppdGVyYXRpb24gc3RlcHMgc3VmZmljaWVudCBmb3IgY29udmVyZ2VuY2UNCnRvIGFuIGFwcHJveGltYXRpb24gd2l0aGluIGEgZml4ZWQgDQpvdXRwdXQgZXJyb3IgYm91bmQuIEluIHNlY3Rpb24gNSwgd2UNCiByZWNhbGwgdGhlIHJlZHVjdGlvbiBvZiB0aGUgaW52ZXJzaW9uIA0KIG9mIFRvZXBsaXR6LWxpa2UsIFZhbmRlcm1vb2RlLWxpa2UsDQogYW5kIENoZWJ5c2hldi1WYW5kZXJtb25kZS1saWtlIG1hdHJpY2VzIHRvIA0KdGhlIGludmVyc2lvbiBvZiBDYXVjaHktbGlrZSBtYXRyaWNlcywgDQp3aGljaCBlbmFibGVzIHVzIHRvIGV4dGVuZCBvdXIgcmVzdWx0cw0KZm9yIGEgQ2F1Y2h5LWxpa2UgaW5wdXQgdG8gb25lcyBmb3IgDQpUb2VwbGl0ei1saWtlLCBWYW5kZXJtb25kZS1saWtlLCBhbmQNCkNoZWJ5c2hldi1WYW5kZXJtb25kZS1saWtlIGlucHV0cy4NCkluIHNlY3Rpb24gNiwgd2UgcmVjYWxsIGFuIGFsdGVybmF0aXZlDQphcHByb2FjaCB0byBhcHByb3hpbWF0aW5nICRDXnstMX0kLCBiYXNlZCBvbiANCnJlZHVjdGlvbiBvZiB0aGUgcHJvYmxlbSB0byBUb2VwbGl0ei1saWtlIA0KY29tcHV0YXRpb25zLCBhbmQgcG9pbnQgb3V0IHNvbWUgbWFqb3INCmRlZmljaWVuY2VzIG9mIHRoaXMgYXBwcm9hY2guDQoNClx2c3BhY2V7MC4xaW59DQp7XGJmIEFja25vd2xlZGdlbWVudHN9IFRoZSBhdXRob3JzIA0KYXJlIGdyYXRlZnVsIHRvIEdlb3JnZSBIZWluaWcsIA0KVGhvbWFzIEthaWxhdGgsIFZhZGltIE9sc2hldnNreSwgDQphbmQgQWxpIEguIFNheWVkIGZvciBzdXBwbHlpbmcgDQp0aGUgKHApcmVwcmludHMgb2YgXGNpdGV7Z299LCBcY2l0ZXtnbzF9LCANClxjaXRle2drb30sIFxjaXRle2h9LCBcY2l0ZXtrb30sDQphbmQgXGNpdGV7a3N9LCBhbmQgdG8gdGhlIHJlZmVyZWUgZm9yIA0KaGVscGZ1bCBjb21tZW50cy4NCg0KXHNlY3Rpb257TW9kaWZpZWQgTmV3dG9uJ3MgSXRlcmF0aW9uIA0KZm9yIHRoZSBJbnZlcnNpb24gb2YgDQpDYXVjaHktbGlrZSBNYXRyaWNlc30NCkxldCAkQyQgYmUgYW4gJG5cdGltZXMgbiQgbm9uc2luZ3VsYXIgDQpDYXVjaHktbGlrZSBtYXRyaXggd2l0aCB0aGUgYXNzb2NpYXRlZA0Kc2NhbGluZyBvcGVyYXRvcg0KJCRcbmFibGFfe1x7RF90LERfc1x9fShDKT1EX3RDLUNEX3M9WlleVFwgLA0KXGVxbm97KDIuMSl9JCQNCiQkQz1cbGVmdFtcIHt6X2leVHlfalxvdmVyIHRfaS1zX2p9IFwgDQpccmlnaHRdLFxoc3BhY2V7LjI1aW59DQpaXlQ9W1wgel8xLCBcY2RvdHMsIHpfblwgXSxcaHNwYWNley4yNWlufSANClleVD1bXCB5XzEsIFxjZG90cywgeV9uXCBdXCAsXGVxbm97KDIuMil9JCQNCndoZXJlICR6X2ksXCB5X2ogXGluIHtcYmYgQ31ee1xhbHBoYSBcdGltZXMgMX0kLCANCiREX3Q9ZGlhZyhcIHRfMSwgXGNkb3RzLCB0X25cICkkLA0KJERfcz1kaWFnKFwgc18xLCBcY2RvdHMsIHNfblwgKSQsICR0X2kgDQpcbmUgc19qJCwgZm9yIGFsbCAkaSxcIGo9MSwyLFxjZG90cyxuJA0KKGNmLiBcY2l0ZXtofSBhbmQgXGNpdGV7Z2tvfSkuIA0KVGhlbiwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGZ1bmRhbWVudGFsIHJlc3VsdCwNCnNob3dpbmcgdGhhdCB0aGUgaW52ZXJzZSBtYXRyaXggJENeey0xfSQNCmlzIGFsc28gYSBDYXVjaHktbGlrZSBtYXRyaXggYW5kIHJlbGF0aW5nIGl0cyANCnNjYWxpbmcgZ2VuZXJhdG9yIHRvIG9uZSAgb2YgJEMkLiANClxiZWdpbnt0aGVvcmVtfSB7XGNpdGUge2h9fQ0KRm9yIGEgQ2F1Y2h5LWxpa2UgbWF0cml4IEMgc2F0aXNmeWluZyAkKDIuMSkkDQphbmQgJCgyLjIpJCwgd2UgaGF2ZQ0KJCRDXnstMX09LVxsZWZ0W1wge3VfaV5Ud19qIFxvdmVyIHNfaS10X2p9IFwgDQpccmlnaHRdXCAsXGVxbm97KDIuMyl9JCQNCiQkVT1bXCB1XzFeVCxcY2RvdHMsIHVfbl5UXCBdXlQ9Q157LTF9WlwgLFxxcXVhZA0KV15UPVtcIHdfMSxcY2RvdHMsd19uXCBdPVleVENeey0xfVwgLFxlcW5veygyLjQpfSQkDQp3aGVyZSBccXVhZCAkWl5UPVtcIHpfMSxcY2RvdHMsel9uXCBdDQpccXVhZCBhbmRccXVhZCANClleVD1bXCB5XzEsXGNkb3RzLHlfblwgXSQuIFxcDQpcZW5ke3RoZW9yZW19DQoNCk5vdGUgdGhlIHJldmVyc2lvbiBvZiB0aGUgb3JkZXIgb2Ygc2NhbGluZyBvcGVyYXRvcnM6DQp0aGUgb3BlcmVhdG9yICRcbmFibGFfe1x7RF90LERfc1x9fSQsDQp3aGljaCB3ZSBhc3NvY2lhdGUgdG8gdGhlIG1hdHJpeCAkQyQgDQpjb3JyZXNwb25kcyB0byB0aGUgb3BlcmF0b3IgDQokXG5hYmxhX3tce0RfcyxEX3RcfX0kLA0Kd2hpY2ggd2UgYXNzb2NpYXRlIHRvIHRoZSBpbnZlcnNlICRDXnstMX0kLg0KQXNzdW1lIHRoYXQgYW4gaW5pdGlhbCBhcHByb3hpbWF0aW9uICRYXzAkIHRvDQokQ157LTF9JCBpcyBhdmFpbGFibGUgd2l0aCBpdHMgDQokXG5hYmxhX3tce0RfcyxEX3RcfX0kLWdlbmVyYXRvciBvZiBhIGxlbmd0aCBhdA0KbW9zdCAkXGFscGhhJC4gVGhlbiwgd2UgcmVjdXJzaXZlbHkgZGVmaW5lIA0KbWF0cmljZXMgJFhfMV4qLFwgWF8xLFwgWF8yXiosXCBYXzIsDQpcIFxjZG90cyQgYXMgZm9sbG93czoNCiQkWF97aysxfV4qPVhfa1wgKFwgMkktQ1hfa1wgKSxccXF1YWQgaz0wLCANCjEsXGNkb3RzLCBcZXFub3soMi41KX0kJA0KJCRYX3trKzF9PS1cbGVmdFtcIHsodV9pXntrKzF9KV5UIHdfal57aysxfQ0KXG92ZXIgc19pLXRfan1cICBccmlnaHRdX3tpLGo9MX1ebiwNClxxcXVhZCBrPTAsMSxcY2RvdHMsIFxlcW5veygyLjYpfSQkDQp3aGVyZSB0aGUgdmVjdG9ycyAkdV9pXntrKzF9LFwgd19qXntrKzF9IA0KXGluIHtcYmYgQ31ee1xhbHBoYSBcdGltZXMgMX0kIGFyZSBkZWZpbmVkDQpieSAkJFVfe2srMX09XHBtYXRyaXh7XCAodV8xXntrKzF9KV5UIFxjciANClx2ZG90cyBcY3IgKHVfbl57aysxfSleVFwgfQ0KPVhfe2srMX1eKlpcICwNClxxcXVhZCAgWj1ccG1hdHJpeHtcIHpfMV5UIFxjciBcdmRvdHMgDQpcY3Igel9uXlRcIH1cICxcZXFub3soMi43KX0kJA0KJCRXX3trKzF9XlQ9W1wgd18xXntrKzF9LFxjZG90cyx3X25ee2srMX1cIF0NCj1ZXlRYX3trKzF9XipcICxccXF1YWQNClleVD1bXCB5XzEsXGNkb3RzLHlfblwgXVwgLlxlcW5veygyLjgpfSQkDQpFcXVhdGlvbiAoMi41KSByZXByZXNlbnRzIGEgc3RlcCBvZiBOZXd0b24ncyANCml0ZXJhdGlvbiBmb3IgbWF0cml4IGludmVyc2lvbg0KKCBjZi4gZS5nLiBcY2l0ZXticH0gKSwgYW5kIGVxdWF0aW9uICgyLjYpIA0KJydjb3JyZWN0cycnIHRoZSByZXN1bHRzIA0KJFhfe2srMX1eKiQgb2YgKDIuNSksIHNvIGFzIHRvIHR1cm4gJFhfe2srMX1eKiQgDQppbnRvIGEgQ2F1Y2h5LWxpa2UgbWF0cml4LCANCmFzc29jaWF0ZWQgd2l0aCAkXG5hYmxhX3tce0RfcyxEX3RcfX0kLCB0aGF0IGlzICwgDQp3aXRoIHRoZSBzYW1lIHNjYWxpbmcgb3BlcmF0b3IgDQphcyAkQ157LTF9JC4gTmFtZWx5LCANCiQkXG5hYmxhX3tce0RfcyxEX3RcfX0oWF97aysxfSk9LVVfe2srMX1XXlQNCl97aysxfVwgLCQkDQp0aGF0IGlzLCAkWF97aysxfSQgaXMgYSBDYXVjaHktbGlrZSBtYXRyaXggDQp3aG9zZSAkXG5hYmxhX3tce0RfcyxEX3RcfX0kLQ0KZ2VuZXJhdG9yIGhhcyBhIGxlbmd0aCBvZiBhdCBtb3N0ICRcYWxwaGEkLiANCkZ1cnRoZXJtb3JlLCB3ZSBoYXZlDQpcYmVnaW57cHJvcH0NCkZvciBhbGwgJGs9MCwxLFxjZG90cyQsIHRoZSBtYXRyaWNlcyANCiRYXipfe2srMX09Mlhfay1YX2tDWF9rJCBhcmUgQ2F1Y2h5LWxpa2UNCm1hdHJpY2VzIHdob3NlICRcbmFibGFfe1x7RF9zLERfdFx9fSQtZ2VuZXJhdG9ycw0KaGF2ZSBsZW5ndGhzIG9mIGF0IG1vc3QgJDNcYWxwaGEkLg0KXGVuZHtwcm9wfQ0Ke1xiZiBQcm9vZjp9IEJ5IHRoZSBkZWZpbml0aW9uIG9mIHRoZSAkXG5hYmxhJC0gb3BlcmF0b3IsIA0Kd2UgaGF2ZSAkJFxuYWJsYV97XHtEX3MsRF90XH19KFhfa0NYX2spPQ0KRF9zWF9rQ1hfay0gWF9rQ1hfa0RfdH5+LCAgICAgXGVxbm97KDIuOSl9JCQNCiQkXG5hYmxhX3tce0RfcyxEX3RcfX0oWF9rKUNYX2s9DQooRF9zWF9rLVhfa0RfdClDWF9rPURfc1hfa0NYX2stWF9rRF90Q1hfa35+LCAgXGVxbm97KDIuMTApfSQkDQokJFhfa3tcbmFibGF9X3tce0RfdCxEX3NcfX0oQylYX2s9WF9rKERfdEMtQ0RfcylYX2s9DQpYX2tEX3RDWF9rLVhfa0NEX3NYX2t+fiwgIFxlcW5veygyLjExKX0kJA0KJCRYX2tDe1xuYWJsYX1fe1x7RF9zLERfdFx9fShYX2spPVhfa0MoRF9zWF9rLVhfa0RfdCk9DQpYX2tDRF9zWF9rLVhfa0NYX2tEX3R+fi4gICBcZXFub3soMi4xMil9JCQNCkJ5IGNvbWJpbmluZyAkKDIuMTApJCwgJCgyLjExKSQgYW5kICQoMi4xMikkLCANCndlIG9idGFpbiB0aGF0DQokJFxuYWJsYV97XHtEX3MsRF90XH19KFhfa0NYX2spPQ0KXG5hYmxhX3tce0RfcyxEX3RcfX0oWF9rKUNYX2srWF9rDQpcbmFibGFfe1x7RF90LERfc1x9fShDKVhfaytYX2tDDQpcbmFibGFfe1x7RF9zLERfdFx9fShYX2spXCAuJCQNClRoZXJlZm9yZSwNClxiZWdpbntlcW5hcnJheX0NCiYgJlxuYWJsYV97XHtEX3MsRF90XH19KFhfe2srMX1eKikgDQpcID1cIFxuYWJsYV97XHtEX3MsRF90XH19KFwgMlhfay1YX2tDWF9rXCApIFxjcg0KJj0mMlxuYWJsYV97XHtEX3MsRF90XH19KFhfayktXG5hYmxhX3tce0RfcyxEX3RcfX0oWF9rQ1hfaykgXGNyDQomPSYyXG5hYmxhX3tce0RfcyxEX3RcfX0oWF9rKS1cbmFibGFfe1x7RF9zLERfdFx9fShYX2spQ1hfay0NClhfa1xuYWJsYV97XHtEX3QsRF9zXH19KEMpWF9rLVhfa0NcbmFibGFfe1x7RF9zLERfdFx9fShYX2spIFxjcg0KJj0mXG5hYmxhX3tce0RfcyxEX3RcfX0oWF9rKSgySS1DWF9rKS1YX2tcbmFibGFfe1x7RF90LERfc1x9fShDKVhfaw0KLVhfa0NcbmFibGFfe1x7RF9zLERfdFx9fShYX2spXCAuXG5vbnVtYmVyDQpcZW5ke2VxbmFycmF5fQ0KV2UgaGF2ZSANCiQkXG5hYmxhX3tce0RfcyxEX3RcfX0oWF9rKT1HX2tIX2teVFwgLFxxcXVhZCANClxuYWJsYV97XHtEX3QsRF9zXH19KEMpPUdIXlRcICwkJA0Kd2hlcmUgXHF1YWQgJEdfayxcIEhfayxcIEcsXCBIXCBcaW4ge1xiZiBDfV57blx0aW1lcyBcYWxwaGF9JFwgLiANClRoZXJlZm9yZSwNClxxdWFkICRcbmFibGFfe1x7RF9zLERfdFx9fShYX3trKzF9XiopPUdfe2srMX1eKihIX3trKzF9XiopXlRcICwkDQpccXVhZCB3aGVyZSANClxiZWdpbntlcW5hcnJheX0NCkdfe2srMX1eKiY9JltcIEdfayxcIC1YX2tHLFwgLVhfa0NHX2tcIF0NClxpbiB7XGJmIEN9XntuXHRpbWVzIDNcYWxwaGF9LFxjcg0KSF97aysxfV4qJj0mW1wgKFwgMkktQ1hfa1wgKV5USF9rLFwgWF9rXlRILA0KXCBIX2tcIF1caW4ge1xiZiBDfV57blx0aW1lcyAzXGFscGhhfS4NClxoc3BhY2V7MC42aW59IFxCb3ggXG5vbnVtYmVyDQpcZW5ke2VxbmFycmF5fQ0KDQpcc2VjdGlvbntDb21wdXRhdGlvbmFsIENvbXBsZXhpdHkgb2YgYW4gSXRlcmF0aW9uIFN0ZXB9DQpOZXh0LCB3ZSB3aWxsIGVzdGltYXRlIHRoZSBhcml0aG1ldGljIA0KY29zdCBvZiBjb21wdXRpbmcgdGhlIG1hdHJpY2VzDQokWF97aysxfSQsICRVX3trKzF9JCwgYW5kDQokV197aysxfSQgKHRoZSBsYXR0ZXIgcGFpciBvZiBtYXRyaWNlcyBiZWluZyANCnRoZSAkXG5hYmxhX3tce0RfcyxEX3RcfX0kLWdlbmVyYXRvciANCmZvciAkWF4qX3trKzF9JCksIGJhc2VkIA0Kb24gdGhlIGVxdWF0aW9ucyAoMi41KS0tKDIuOCkuIA0KR2l2ZW4gQ2F1Y2h5LS1saWtlIG1hdHJpY2VzICRDJCBhbmQgDQokWF9rJCwgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZQ0KJFxuYWJsYV97XHtEX3MsRF90XH19JC1nZW5lcmF0b3Igb2YgDQpsZW5ndGggJDNcYWxwaGEkIGZvciAkWF4qX3trKzF9JA0KW1wgYWNjb3JkaW5nIHRvICgyLjUpXCBdIHVzZXMgDQokTyhcYWxwaGFeMm5cbG9nXjJuKSQgb3BzIA0KKFwgc2VlIGUuZy4gXGNpdGV7Z299IG9yIFxjaXRle2JwfSwgDQpjaGFwdGVyICQyJCwNCiBzZWN0aW9ucyAkNCQsICQxMSQsIGFuZCAkMTIkXCApLiANCiAoSGVyZSBhbmQgaGVyZWFmdGVyLCAie1xlbSBvcHN9IiBzdGFuZHMgZm9yDQogImFyaXRobWV0aWMgb3BlcmF0aW9ucyIuICkgVGhlcmVmb3JlLCANCiAoMi43KSBhbmQgKDIuOCkgdG9nZXRoZXINCiAgZW5hYmxlIHVzIHRvDQogIGNvbXB1dGUgdGhlICRuXHRpbWVzIFxhbHBoYSQgbWF0cmljZXMgDQogICRVX3trKzF9JCBhbmQgJFdfe2srMX0kDQogICBieSB1c2luZyAkTyhcYWxwaGFeMm5cbG9nXjJuKSQgb3BzLiANCiAgIEFuIGFkZGl0aW9uYWwgYXR0cmFjdGl2ZSBmZWF0dXJlDQogICBvZiB0aGlzIGNvbXB1dGF0aW9uIGlzIHRoZSBlY29ub21pemF0aW9uIA0KICAgb2YgY29tcHV0ZXIgbWVtb3J5LA0KdGhhdCBpcywgcmVwcmVzZW50YXRpb24gb2YgYWxsIGludm9sdmVkIA0KbWF0cmljZXMgYnkgbWVhbnMgb2YgdGhlaXIgc2hvcnQNCmdlbmVyYXRvcnMgcmVxdWlyZXMgb25seSAkTyhcYWxwaGEgbikkIA0Kd29yZHMgb2YgbWVtb3J5LiBXZSBhbHNvIHJlZmVyIHRoZSANCnJlYWRlciB0byBcY2l0ZXticH0sIHBhZ2VzIDEzMCwgMjYxLS0yNjIsIA0Kb24gc29tZSBhbHRlcm5hdGl2ZSBtZXRob2RzIGZvciANCmZhc3RlciBudW1lcmljYWwgYXBwcm94aW1hdGlvbiBvZiB0aGUgDQpwcm9kdWN0IG9mIGEgQ2F1Y2h5IG1hdHJpeCAkQyQgYnkgYSANCnZlY3Rvciwgd2hpY2ggbWF5IGxlYWQgdG8gYSBmdXJ0aGVyIA0KZGVjcmVhc2Ugb2YgdGhlIGNvbXB1dGF0aW9uYWwgY29zdCBvZiBvdXINCml0ZXJhdGlvbiBzdGVwcy4NCg0KXHNlY3Rpb257RXN0aW1hdGluZyBDb252ZXJnZW5jZSBSYXRlIG9mIA0KTmV3dG9uJ3MgSXRlcmF0aW9ufQ0KSW4gdGhlIGZvbGxvd2luZywgd2Ugd2lsbCBlc3RpbWF0ZSBob3cgDQpmYXN0ICRYX2skIGFwcHJvYWNoZXMgJENeey0xfSQuDQpXZSByZWNhbGwgZnJvbSAoMi42KS0tKDIuOCkgYW5kICgyLjQpIHRoYXQNClxiZWdpbntlcW5hcnJheX0NClhfayY9Ji1cbGVmdFtcYmVnaW57YXJyYXl9e2N9ICh1X2leayleVHdfal5rIA0KXG92ZXIgc19pLXRfaiBcZW5ke2FycmF5fSANClxyaWdodF1cICxcY3INClVfayY9Jlhfa14qWj0oXCBYX2teKi1DXnstMX1cIClaK0Neey0xfVoNCj0oXCBYX2teKi1DXnstMX1cIClaK1VcICxcY3INCldfa15UJj0mWV5UWF9rXio9WV5UKFwgWF9rXiotQ157LTF9XCApK1deVFwgLlxub251bWJlcg0KXGVuZHtlcW5hcnJheX0NClRoZW4sIHdlIG9idGFpbiB0aGUgZm9sbG93aW5nIG1hdHJpeCBlcXVhdGlvbjoNCiQkVV9rV19rXlQ9KFhfa14qLUNeey0xfSlaWV5UKFhfa14qLUNeey0xfSkNCitVV15UK1VZXlQoWF9rXiotQ157LTF9KQ0KKyhYX2teKi1DXnstMX0pWldeVC4kJA0KV2UgZGVkdWNlIGZyb20gdGhpcyBlcXVhdGlvbiBhbmQgKDIuNCkgdGhhdCANClxiZWdpbntlcW5hcnJheX0NCkVfayY9JlVfa1dfa15ULVVXXlQgXGNyDQomPSYoWF9rXiotQ157LTF9KVpZXlQoWF9rXiotQ157LTF9KStDXnstMX1aWV5UDQooWF9rXiotQ157LTF9KSsoWF9rXiotQ157LTF9KVoNClleVENeey0xfS5cbm9udW1iZXIgDQpcZW5ke2VxbmFycmF5fQ0KXGJlZ2lue2ZsdXNocmlnaHR9DQooNC4xKQ0KXGVuZHtmbHVzaHJpZ2h0fQ0KDQpIZXJlYWZ0ZXIsIHdlIHdpbGwgdXNlIHRoZSBjb2x1bW4tbm9ybSBvZiANCm1hdHJpY2VzLCB3cml0aW5nDQokJFx8V1x8PVx8V1x8XzE9XG1heF9qXHN1bV9pfHdfe2lqfXxcICwkJA0Kd2hlcmUgJFc9KHdfe2lqfSlcaW4gQ157bVx0aW1lcyBufSRcIA0KKFwgc2VlIFxjaXRle2dsfSwgcC5+NTdcICkuDQpcYmVnaW57cHJvcH0NCkxldCAkZV9rXio9XHxcIFhfa14qLUNeey0xfVwgXHwkLiBUaGVuIA0KJCRcfEVfa1x8PVx8XCBVX2tXX2teVC1VV15UXCBcfFxsZSANClx8WlleVFx8ZV9rXiooZV9rXiorMlx8Q157LTF9XHwpXCAuJCQNClxlbmR7cHJvcH0NCntcYmYgUHJvb2Y6fSBQcm9wb3NpdGlvbiA0LjEgaW1tZWRpYXRlbHkgDQpmb2xsb3dzIGZyb20gKDQuMSlcIC5ccXF1YWQgJFxCb3gkDQoNClxiZWdpbntwcm9wfQ0KTGV0ICRlX2s9XHxcIFhfay1DXnstMX1cIFx8JCwgZm9yIGEgDQpub25zaW5ndWxhciBtYXRyaXggJEMkLCBhbmQgbGV0ICRYX3trKzF9XiokDQpiZSBkZWZpbmVkIGJ5ICQoMi41KSQsIGZvciAkaz0wLDEsMixcY2RvdHMkLiANClRoZW4gd2UgaGF2ZSANCiQkZV97aysxfV4qXGxlIFx8Q1x8ZV9rXjJcIC5cZXFub3soNC4yKX0kJA0KXGVuZHtwcm9wfQ0Ke1xiZiBQcm9vZjp9IER1ZSB0byAkKDIuNSkkLCB3ZSBoYXZlDQokJEktQ1hfe2srMX1eKj0oXCBJLUNYX2tcICleMixccXF1YWQgaz0wLDEsMixcY2RvdHMuJCQNCkl0IGZvbGxvd3MgdGhhdA0KXGJlZ2lue2VxbmFycmF5fQ0KZV97aysxfV4qJj0mXHxYX3trKzF9XiotQ157LTF9XHxcY3INCiY9Jnx8Q157LTF9KEktQ1hfe2srMX1eKil8fFxjcg0KJj0mfHxDXnstMX0oSS1DWF9rKV4yfHwgXGNyDQomPSZ8fENeey0xfShJLUNYX2spQ0Neey0xfShJLUNYX2spfHxcY3INCiY9Jnx8KENeey0xfS1YX2spQyhDXnstMX0tWF9rKXx8XGNyDQomXGxlJnx8Q3x8ZV9rXjJcIC5caHNwYWNlezFpbn0gXEJveCANClxub251bWJlcg0KXGVuZHtlcW5hcnJheX0NCg0KXGJlZ2lue3Byb3B9DQpGb3IgYW55ICRrPTEsMixcY2RvdHMkLCB3ZSBoYXZlIFxxdWFkICRlX2sNClxsZSBoX2tcIGVfa14qJFwgLFxxdWFkIA0KJGVfe2srMX1eKlxsZSAoaF9rZV9rXiopXjJ8fEN8fFwgLCQNCndoZXJlIA0KJCRoX2s9XHJobyB8fFpZXlR8fChlX2teKisyfHxDXnstMX18fCksDQpccXF1YWQgXHJobyA9XG1heF97aSxqfXsxXG92ZXIgfHNfaS10X2p8fVwgLg0KXGVxbm97KDQuMyl9JCQNClxlbmR7cHJvcH0NCntcYmYgUHJvb2Y6fSBXZSByZWNhbGwgJCgyLjMpLCAoMi40KSwgKDIuNiksICg0LjEpJCwgDQphbmQgcHJvcG9zaXRpb24gNC4xIGFuZCBvYnRhaW4NCnRoYXQNClxiZWdpbntlcW5hcnJheX0NCmVfayY9Jnx8WF9rLUNeey0xfXx8XGNyDQomPSZcbWF4X2pcc3VtX2l7fCh1X2leayleVHdfal5rLXVfaV5Ud19qfFxvdmVyIHxzX2ktdF9qfH1cY3INCiZcbGUmXHJob1xtYXhfalxzdW1faXwodV9pXmspXlR3X2peay11X2leVHdfanxcY3INCiY9JlxyaG8gfHxFX2t8fFxjcg0KJlxsZSYgXHJobyB8fFpZXlR8fChlX2teKisyfHxDXnstMX18fCllX2teKlxjcg0KJj0maF9rZV9rXipcICxcbm9udW1iZXINClxlbmR7ZXFuYXJyYXl9DQpmb3IgJGhfayQgb2YgJCg0LjMpJC4gQ29tYmluaW5nIHRoZSBsYXR0ZXIgDQpib3VuZCBvbiAkZV9rJCB3aXRoICQoNC42KSQgZ2l2ZXMNCnVzIHByb3Bvc2l0aW9uICQ0LjMkLiRccXF1YWQgXEJveCQNCg0KXGJlZ2lue3Byb3B9DQpJZiANCiQkZV8xXipcbGUgMVwgIFxlcW5veyg0LjQpfSQkDQphbmQgaWYNCiQkKGVfMV4qKV5cdGhldGEgfHxDfHxoXzFeMlxsZTFcICwNClxlcW5veyg0LjUpfSQkDQpmb3IgJFx0aGV0YSBcbGUgMSQgYW5kIGZvciAkaF8xJCBvZiANCnByb3Bvc2l0aW9uICQ0LjMkLCB0aGVuDQokJGVfe2srMX1eKlxsZSAoZV9rXiopXnsyLVx0aGV0YX1cbGUgDQpcY2RvdHMgXGxlIChlXzFeKileeygyLVx0aGV0YSlea31cICwNClxxcXVhZCB7XHJtIGZvcn1ccXVhZCBrPTEsMixcY2RvdHMuDQpcZXFub3soNC42KX0kJA0KXGVuZHtwcm9wfQ0Ke1xiZiBQcm9vZjp9IEJ5IHRoZSB2aXJ0dWUgb2YgcHJvcG9zaXRvbiA0LjMsIHdlIGhhdmUgDQokJGVfMl4qXGxlIChlXzFeKileMnx8Q3x8aF8xXjJcIC4kJA0KQ29tYmluZSB0aGlzIGJvdW5kIHdpdGggKDQuNSkgYW5kIG9idGFpbiB0aGF0IA0KJCRlXzJeKlxsZSAoZV8xXiopXnsyLVx0aGV0YX1cIC4gXGVxbm97KDQuNyl9JCQNCkNvbWJpbmUgdGhlIGxhdHRlciBpbmVxdWFsaXR5IGFuZCAkKDQuNCkkLCBhbmQNCnNpbmNlICRcdGhldGFcbGUgMSxcICAyLVx0aGV0YVxnZSAxJCwgb2J0YWluIA0KdGhlIGJvdW5kcyANCiQkZV8yXipcbGUgZV8xXipcbGUgMVwgLFxlcW5veyg0LjgpfSQkDQp3aGljaCBleHRlbmQgKDQuNClcIC4NClN1YnN0aXR1dGUgdGhlIGZpcnN0IGluZXF1YWxpdHkgb2YgKDQuOCkgDQppbnRvICg0LjMpIGFuZCBvYnRhaW4gdGhhdCANCiRoXzJcbGUgaF8xJC4gU3Vic3RpdHV0ZSB0aGUgbGF0dGVyIGJvdW5kIGFuZCB0aGUgYm91bmQgDQokZV8yXipcbGUgZV8xXiokIG9mICg0LjgpIGludG8gKDQuNSkgYW5kIG9idGFpbiB0aGF0IA0KJChlXzJeKileXHRoZXRhIHx8Q3x8aF8yXjJcbGUgMSQsIHdoaWNoIGV4dGVuZHMgKDQuNSkuDQpJbmR1Y3RpdmUgYXBwbGljYXRpb24gb2YgdGhpcyBhcmd1bWVudCBlbmFibGVzIA0KdXMgdG8gZXh0ZW5kICg0LjQpLCAoNC41KSwgIA0KYW5kICg0LjcpIHRvIHRoZSBib3VuZHMNCiQkZV9rXipcbGUgMVwgLFxxcXVhZCAoZV9rXiopXlx0aGV0YSB8fEN8fGhfa14qXGxlIDFcICwNClxxcXVhZCBlX2teKlxsZSAoZV97ay0xfV4qKV57Mi1cdGhldGF9JCQNCmZvciAkaz0zLDQsXGNkb3RzLCQgYW5kIHdlIGFycml2ZSBhdCAoNC42KS5ccXF1YWQgJFxCb3gkDQoNCldlIHdpbGwgbmV4dCByZXN0YXRlIHByb3Bvc2l0aW9uIDQuNCwgYnkgDQpyZXBsYWNpbmcgJGVeKl8xJCBieSAkZV8wXjJ8fEN8fCQsDQpcIGJhc2VkIG9uIHByb3Bvc2ktIFxcIA0KdGlvbiA0LjIgXCBmb3JcICAkaz0wJC4NCg0KXGJlZ2lue3Byb3B9DQpJZiAkZV8wXHNxcnR7fHxDfHx9XGxlIDEkIGFuZCBpZiANCiQkZV8wXnsyXHRoZXRhfXx8Q3x8XnsxK1x0aGV0YX1oXjJcbGUgMVwgLA0KXGVxbm97KDQuOSl9JCQNCmZvciAkXHRoZXRhIFxsZSAxJCwgZm9yIA0KJGg9XHJob3x8WlleVHx8KGVfMF4yfHxDfHwrMnx8Q157LTF9fHwpJCwgYW5kIGZvcg0KJFxyaG8kIG9mICQoNC4zKSQsIHRoZW4NCiQkZV97aysxfV4qXGxlIChlXzBeMnx8Q3x8KV57KDItXHRoZXRhKV5rfVwgLA0KXHFxdWFkIHtccm0gZm9yfVxxdWFkDQprPTAsMSxcY2RvdHMuJCQNClxlbmR7cHJvcH0NCntcYmYgUHJvb2Y6fSBQcm9wb3NpdGlvbiA0LjIgZm9yICRrPTAkIGltcGxpZXMgdGhhdCANCiQkZV8xXipcbGUgfHxDfHxlXzBeMlwgLlxlcW5veyg0LjEwKX0kJA0KVGhlcmVmb3JlLCB0aGUgYm91bmQgJGVfMV4qXGxlIDEkIG9mICg0LjQpIA0KaG9sZHMgaWYgJGVfMFxzcXJ0e3x8Q3x8fVxsZSAxJCwNCmFuZCB3ZSBhbHNvIGhhdmUgdGhhdCAkaF8xXGxlIGgkIGZvciAkaF8xJCANCm9mICg0LjMpLiBDb21iaW5pbmcgdGhlIGxhdHRlcg0KYm91bmQsICg0LjkpLCBhbmQgKDQuMTApIGdpdmVzIHVzICg0LjUpLiANClRoZXJlZm9yZSwgdGhlIGFzc3VtcHRpb25zIG9mIA0KcHJvcG9zaXRpb24gNC41IGltcGx5IHRoZSBvbmVzIG9mIA0KcHJvcG9zaXRpb24gNC40IGFuZCwgY29uc2VxdWVudGx5LCANCmltcGx5ICg0LjYpLiBTdWJzdGl0dXRlICg0LjEwKSBpbnRvIA0KKDQuNikgYW5kIG9idGFpbiBwcm9wb3NpdGlvbiA0LjUuDQpccXF1YWQgJFxCb3gkDQoNCldlIGFyZSBub3Qgc3VwcG9zZWQgdG8gaGF2ZSB0aGUgdmFsdWVzIA0KJGVfMCQgYW5kICR8fENeey0xfXx8JCByZWFkaWx5DQphdmFpbGFibGUsIHdoZW4gd2UgYXJlIGdpdmVuIHRoZSANCm1hdHJpY2VzICRDJCBhbmQgJFhfMCQsIGJ1dCB3ZSBtYXkgdXNlIG1vcmUNCnJlYWRpbHkgYXZhaWxhYmxlICBwYXJhbWV0ZXJzLiBJbmRlZWQsDQokJGVfMFxsZSByXzB8fENeey0xfXx8XCAsXHF1YWQgDQp7XHJtIHdoZXJlfVxxdWFkIHJfMD18fEktWF8wQ3x8XCAsJCQNCmFuZCANCiQkfHxDXnstMX18fFxsZSB7fHxYXzB8fFxvdmVyIDEtcl8wfQ0KXHF1YWQge1xybSBpZn1ccXVhZCByXzA8MVwgLiQkDQooXCBUaGUgbGF0dGVyIGltcGxpY2F0aW9uIGltbWVkaWF0ZWx5IA0KZm9sbG93cyBmcm9tIHRoZSBuZXh0IGluZXF1YWxpdGllczoNCiQkfHxDXnstMX18fC18fFhfMHx8XGxlIHx8Q157LTF9LVhfMHx8DQpcbGUgfHxDXnstMX18fHJfMCBcIC5cICkkJA0KDQpDb21wdXRhdGlvbiBvZiAkWF8wQyQgYW1vdW50cyB0byAkbiQgbXVsdGlwbGljYXRpb25zIG9mIGENCkNhdWNoeS1saWtlIG1hdHJpeCBieSB2ZWN0b3JzLCB3aGljaCB0YWtlcyAkTygoXGFscGhhXjJuXGxvZyBuKV4yKSQNCm9wcyAoY2YuIFtHT10gb3IgW0JQXSwgc2VjdGlvbiA0LCAxMSBhbmQgMTIgb2YgY2hhcHRlciAyKS4NCkZvciBhbnkgdmVjdG9yICR2XG5lIDAkLCB3ZSBtYXkgY29tcHV0ZSBhIGxvd2VyIGJvdW5kDQokbih2KT18fChJLVhfMEMpdnx8L3x8dnx8JCBpbiAkTyhcYWxwaGFeMm5cbG9nXjJuKSQgb3BzLCB3aGVyZQ0KJG4odilcbGUgfHxJLVhfMEN8fCQuIChGb3IgYSByYW5kb20gY2hvaWNlIG9mIG9uZSBvciBzZXZlcmFsDQp2ZWN0b3JzICR2JCwgc3VjaCBsb3dlciBib3VuZHMgbWF5IGdpdmUgdXMgYSByZWFzb25hYmx5IGdvb2QNCmFwcHJveGltYXRpb24gdG8gJHx8SS1YXzBDfHwkLikNCg0KTmV4dCwgd2UgYXJlIGdvaW5nIHRvIHN1YnN0aXR1dGUgdGhlIGFib3ZlIA0KZXN0aW1hdGUgZm9yICRlXzAkIGludG8gdGhlIHN0YXRlbWVudCBvZiANCnByb3Bvc2l0aW9uIDQuNS4gV2Ugd3JpdGUNCiQkZV8wXis9e3JfMHx8WF8wfHxcb3ZlciAxLXJfMH1cICwNClxlcW5veyg0LjExKX0gJCQNCiQkaF97aysxfV4rPVxyaG8gfHxaWV5UfHxcIFtcIA0KKFwgKGVfMF4rKV4yfHxDfHxcICleeygyLVx0aGV0YSlea30rezJ8fFhfMHx8DQpcb3ZlciAxLXJfMH1cIF1cICxccXVhZCBrPTAsMSxcY2RvdHNcICwNClxlcW5veyg0LjEyKX0kJA0Kc28gdGhhdCAkZV8wXitcZ2UgZV8wJCBhbmQgJGhfe2srMX1eK1xnZSANCmhfe2srMX0kIGlmICRoX3trKzF9XipcbGUNCihcIChlXzBeKyleMnx8Q3x8XCApXnsoMi1cdGhldGEpXmt9XCAkLCBhbmQNCiQkaF97aysxfV4rXGxlIFxyaG98fFpZXlR8fFwgKFwgMSt7Mnx8WF8wfHwNClxvdmVyIDEtcl8wfVwgKVwgLFxxdWFkIA0Ke1xybSBmb3JcIGFsbH1cIGssXHF1YWQgIA0Ke1xybSBpZn1ccXVhZCBlXzBeK1xzcXJ0e3x8Q3x8fVxsZSAxXCAuDQpcZXFub3soNC4xMyl9ICQkDQpXZSBub3cgc3VtbWFyaXplIG91ciByZXN1bHRzLCANCmluY2x1ZGluZyB0aGUgYm91bmQgDQokZV97aysxfVxsZSBoX3trKzF9ZV97aysxfV4qJCAoXCBmcm9tICANCnByb3Bvc2l0aW9uIDQuM1wgKSwgd2hpY2ggZW5hYmxlcyB1cyANCnRvIGVzdGltYXRlICRlX3trKzF9JCBhcyBzb29uIGFzIHdlIA0KZXN0aW1hdGUgJGVfe2srMX1eKlwgLiQNClxiZWdpbntjb3J9DQpMZXQgDQokJHJfMD18fEktQ1hfMHx8PDEsXHF1YWQgZV8wXitcc3FydHt8fEN8fH0NClxsZSAxLFxxdWFkIFx0aGV0YSBcbGUgMSwNClxlcW5veyg0LjE0KX0kJA0KJCQoZV8wXispXnsyXHRoZXRhfXx8Q3x8XnsxK1x0aGV0YX0NClwgKGhfMV4rKV4yXGxlIDEsXGVxbm97KDQuMTUpfSQkDQpmb3IgJGVfMF4rJCBvZiAkKDQuMTEpJCBhbmQgJGhfMV4rJCBvZiAkKDQuMTIpJC4gVGhlbiB3ZSBoYXZlDQokJGVfe2srMX1eKlxsZSAoXCAoZV8wXispXjJ8fEN8fFwgKV57KDItXHRoZXRhKV5rfSwNClxxcXVhZCBrPTAsMSxcY2RvdHMsJCQNCiQkZV97aysxfVxsZSBoX3trKzF9XisgZV97aysxfV4qLCANClxxcXVhZCBrPTAsMSxcY2RvdHMuJCQNClxlbmR7Y29yfQ0KDQpMZXQgdXMgd3JpdGUNCiQka14qPVxsY2VpbCBcIChcbG9ne1xsb2cgXGVwc2lsb24gDQpcb3ZlciBcbG9nIChcIChlXzBeKyleMnx8Q3x8XCApfVwgKVwgLw0KXGxvZyAoMi1cdGhldGEpXCBccmNlaWwgXCAsXGVxbm97KDQuMTYpfSQkDQp3aGVyZSAkXHRoZXRhIDwgMSxcIGVfMF4rICQgYW5kICRoX3trKzF9XiskIGFyZSANCmRlZmluZWQgYnkgKDQuMTEpIGFuZCAoNC4xMiksIA0Kc28gdGhhdCAoNC4xMykgaG9sZHMuDQpUaGVuLCB1bmRlciB0aGUgYXNzdW1wdGlvbnMgKDQuMTQpIGFuZCAoNC4xNSkgb2YgDQpjb3JvbGxhcnkgNC4xLCBpdCBzdWZmaWNlcw0KdG8gcGVyZm9ybSAkaysxXGdlIGteKisxJCByZWN1cnNpdmUgc3RlcHMgb2YgdGhlIA0KaXRlcmF0aW9uICgyLjUpLCAoMi42KQ0KaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgDQokJGVfe2srMX1eKj18fFwgWF97aysxfV4qLUNeey0xfVwgfHxcbGUgXGVwc2lsb25cICwgJCQNCiQkZV97aysxfT18fFwgWF97aysxfS1DXnstMX1cIHx8XGxlIFxlcHNpbG9uIGhfe2srMX1eK1wgLiQkDQpbXCBOb3RlIHRoYXQgKDQuMTQpIGltcGxpZXMsIGluIHBhcnRpY3VsYXIsIA0KdGhlIGJvdW5kcyBvZiAoNC4xMykuXCBdDQoNCiVcbmV3cGFnZQ0KDQolXGJlZ2luIHt0aGViaWJsaW9ncmFwaHl9e0NLTC1BfQ0KDQolXGJpYml0ZW1bQlBde2JwfSBELiBCaW5pIGFuZCBWLiBZLiBQYW4sDQole1xlbSBQb2x5bm9taWFsIGFuZCBNYXRyaXggQ29tcHV0YXRpb25zLCANCiVWb2x1bWUgMTogRnVuZGFtZW50YWwgQWxnb3JpdGhtc30sDQolQmlya2hhdXNlciwgQm9zdG9uLCAxOTk0Lg0KDQolXGJpYml0ZW1bQ0tMLUFde2NrbC1hfSBKLiBDaHVuLCANCiVULiBLYWlsYXRoLCBhbmQgSC4gTGV2LUFyaSwNCiVGYXN0IFBhcmFsbGVsIEFsZ29yaXRobSBmb3IgDQolUVItZmFjdG9yaXphdGlvbiBvZiBTdHJ1Y3R1cmVkIE1hdHJpY2VzLA0KJXtcZW0gU0lBTSBKLiBTY2kuIFN0YXQuIENvbXB1dC59LCANCiU4LCA2LCBwcC5+ODk5LTkxMywgMTk4Ny4NCg0KJVxiaWJpdGVtW0dLS117Z2trfSBJLiBHb2hiZXJnLCBULiBLYWlsYXRoLCANCiVhbmQgSS4gS29sdHJhY2h0LA0KJUVmZmljaWVudCBTb2x1dGlvbiBvZiBMaW5lYXIgU3lzdGVtcyBvZiANCiVFcXVhdGlvbnMgd2l0aCBSZWN1cnNpdmUgU3RydWN0dXJlLCANCiV7XGVtIExpbmVhciBBbGdlYnJhIEFwcGwuLH0gODAsIHBwLn44MS0xMTMsIDE5ODYuDQoNCiVcYmliaXRlbVtHS0tMXXtna2tsfSBJLiBHb2hiZXJnLCBULiANCiVLYWlsYXRoLCBJLiBLb2x0cmFjaHQsIGFuZCBQLiBMYW5jYXN0ZXIsDQolTGluZWFyIENvbXBsZXhpdHkgUGFyYWxsZWwgQWxnb3JpdGhtcyANCiVmb3IgTGluZWFyIFN5c3RlbXMgb2YgRXF1YXRpb25zIHdpdGggDQolUmVjdXJzaXZlIFN0cnVjdHVyZSwge1xlbSBMaW5lYXIgQWxnZWJyYSANCiVBcHBsLix9IDg4Lzg5LCBwcC5+MjcxLTMxNSwgMTk4Ny4NCg0KJVxiaWJpdGVtW0dJXXtnaX0gVy4gR2F1dHNjaGkgYW5kIEcuSW5nbGVzZSwgTG93ZXIgDQolQm91bmRzIGZvciB0aGUgQ29uZGl0aW9uIE51bWJlciBvZiBWYW5kZXJtb25kZQ0KJU1hdHJpY2VzLCB7XGVtIE51bWVyaXNjaGUgTWF0aC4sIH0gNTIsIDI0MS0yNTAsIDE5ODguDQoNCiVcYmliaXRlbVtHS09de2drb30gIEkuIEdvaGJlcmcsIFQuIEthaWxhdGgsIA0KJWFuZCBWLiBPbHNoZXZza3ksIA0KJUZhc3QgR2F1c3NpYW4gRWxpbWluYXRpb24gd2l0aCBQYXJ0aWFsIA0KJVBpdm90aW5nIGZvciBNYXRyaWNlcyB3aXRoIA0KJURpc3BsYWNlbWVudCBTdHJ1Y3R1cmUsIHtcZW0gc3VibWl0dGVkIA0KJWZvciBwdWJsaWNhdGlvbn0sIDE5OTQuDQoNCiVcYmliaXRlbVtHTF17Z2x9IEcuIEguIEdvbHViIGFuZCBDLiBGLiBWYW4gTG9hbiwNCiV7XGVtIE1hdHJpeCBDb21wdXRhdGlvbnN9LCBKb2hucyBIb3BraW5zIA0KJVVuaXYuIFByZXNzLCBCYWx0aW1vcmUsIE1hcnlsYW5kLA0KJTE5ODkuDQoNCiVcYmliaXRlbVtHT117Z299IEkuIEdvaGJlcmcgYW5kIFYuIE9sc2hldnNreSwNCiVDb21wbGV4aXR5IG9mIE11bHRpcGxpY2F0aW9uIHdpdGggVmVjdG9ycyBmb3IgDQolU3RydWN0dXJlZCBNYXRyaWNlcywNCiV7XGVtIExpbmVhciBBbGdlYnJhIEFwcGwufSwgMjAyLCBwcC5+MTYzLTE5MiwgMTk5NC4NCg0KJVxiaWJpdGVtW0dPMV17Z28xfSBJLiBHb2hiZXJnIGFuZCBWLiBPbHNoZXZza3ksDQolRmFzdCBJbnZlcnNpb24gb2YgQ2hlYnlzaGV2LVZhbmRlcm1vbmRlIE1hdHJpY2VzLA0KJXtcZW0gTnVtZXIuIE1hdGgufSwgNjcsIDEsIHBwLn43MS05MiwgMTk5NC4NCg0KJVxiaWJpdGVtW0hde2h9IEcuIEhlaW5pZywgDQolSW52ZXJzaW9uIG9mIEdlbmVyYWxpemVkIENhdWNoeSBNYXRyaWNlcyANCiVhbmQgdGhlIE90aGVyIENsYXNzZXMgb2YgU3RydWN0dXJlZA0KJU1hdHJpY2VzLA0KJXtcZW0gTGluZWFyIEFsZ2VicmEgZm9yIFNpZ25hbCBQcm9jZXNzaW5nLCANCiVJTUEgVm9sdW1lIGluIE1hdGguIGFuZCANCiVJdHMgQXBwbGljYXRpb25zfSwgNjksIHBwLn45NS0xMTQsIFNwcmluZ2VyLCAxOTk0Lg0KDQolXGJpYml0ZW1bSFJde2hyfSBILiBIZWluaWcgYW5kIEsuIFJvc3QsDQole1xlbSBBbGdlYnJhaWMgTWV0aG9kcyBmb3IgVG9lcGxpdHotbGlrZSANCiVNYXRyaWNlcyBhbmQgT3BlcmF0b3JzLCANCiVPcGVyYXRvciBUaGVvcnl9LCAxMywgQmlya2hhZXVzZXIsIDE5ODQuDQoNCiVcYmliaXRlbVtLS01de2trbX0gVC4gS2FpbGF0aCwgUy4tWS4gS3VuZywgYW5kIE0uIE1vcmYsDQolRGlzcGxhY2VtZW50IFJhbmtzIG9mIE1hdHJpY2VzIGFuZCBMaW5lYXIgRXF1YXRpb25zLA0KJXtcZW0gSi4gTWF0aC4gQW5hbC4gQXBwbC59LCA2OCwgMiwgcHAufjM5NS00MDcsIDE5NzkuDQoNCiVcYmliaXRlbVtLT117a299ICBULiBLYWlsYXRoIGFuZCBWLiBPbHNoZXZza3ksDQolRGlzcGxhY2VtZW50IFN0cnVjdHVyZSBBcHByb2FjaCB0byANCiVDaGVieXNoZXYtVmFuZGVybW9uZGUgYW5kIFJlbGF0ZWQgTWF0cml4LA0KJXtcZW0gc3VibWl0dGVkIGZvciBwdWJsaWNhdGlvbn0sIDE5OTQuDQoNCiVcYmliaXRlbVtLU117a3N9IFQuIEthaWxhdGggYW5kIEEuIFNheWVkLA0KJURpc3BsYWNlbWVudCBTdHJ1Y3R1cmU6IFRoZW9yeSBhbmQgQXBwbGljYXRpb25zLA0KJXtcZW0gU0lBTSBSZXZpZXd9LCAzNywgMywgMjk3LTM4NiwgMTk5NS4NCg0KJVxiaWJpdGVtW0tWTV17a3ZtfSBULiBLYWlsYXRoLCBBLiBWaWVyYSwgDQolYW5kIE0uIE1vcmYsDQolSW52ZXJzZXMgb2YgVG9lcGxpdHogT3BlcmF0b3JzLCBJbm5vdmF0aW9ucywgDQolYW5kIE9ydGhvZ29uYWwgUG9seW5vbWlhbHMsDQole1xlbSBTSUFNIFJldmlld30sIDIwLCAxLCBwcC5+MTA2LTExOSwgMTk3OC4NCg0KJVxiaWJpdGVtW1A5MF17cDkwfSBWLiBZLiBQYW4sDQolQ29tcHV0YXRpb25zIHdpdGggRGVuc2UgU3RydWN0dXJlZCBNYXRyaWNlcywNCiV7XGVtIE1hdGguIG9mIENvbXB1dGF0aW9ufSwgNTUsIHBwLjE3OS0xOTAsIDE5OTAuDQoNCiVcYmliaXRlbVtQOTJde3A5Mn0gVi4gWS4gUGFuLA0KJVBhcmFsbGVsIFNvbHV0aW9uIG9mIFRvZXBsaXR6LWxpa2UgTGluZWFyIFN5c3RlbXMsDQole1xlbSBKLiBvZiBDb21wbGV4aXR5fSwgOCwgcHAufjEtMjEsIDE5OTIuDQoNCiVcYmliaXRlbVtQOTNde3A5M30gVi4gWS4gUGFuLA0KJUNvbmN1cnJlbnQgSXRlcmF0aXZlIEFsZ29yaXRobXMgZm9yIA0KJVRvZXBsaXR6LWxpa2UgTGluZWFyIFN5c3RlbXMsDQole1xlbSBJRUVFIFRyYW5zLiBvbiBQYXJhbGxlbCBhbmQgRGlzdHJpYnV0aXZlIFN5c3RlbXN9LCANCiU0LCA1LCBwcC5+NTkyLTYwMCwgMTk5My4NCg0KJVxiaWJpdGVtW1A5M2Fde3A5M2F9IFYuIFkuIFBhbiwNCiVEZWNyZWFzaW5nIHRoZSBEaXNwbGFjZW1lbnQgUmFuayBvZiBhIE1hdHJpeCwNCiV7XGVtIFNJQU0gSi4gTWF0cml4IEFuYWwuIEFwcGwufSwgMTQsIDEsIHBwLn4xMTgtMTIxLCAxOTkzLg0KDQolXGJpYml0ZW1bV117d30gRC4gSC4gV29vZCwNCiVQcm9kdWN0IFJ1bGVzIGZvciB0aGUgRGlzcGxhY2VtZW50IG9mIE5lYXItVG9lcGxpdHogTWF0cmljZXMsDQole1xlbSBMaW5lYXIgQWxnZWJyYSBBcHBsLn0sIDE4OCwgMTg5LCBwcC5+NjQxLTY2MywgMTk5My4NCg0KJVxlbmQge3RoZWJpYmxpb2dyYXBoeX0NCg0KJVxuZXdwYWdlDQolXGFwcGVuZGl4DQolJFxyZW5ld2NvbW1hbmR7XHRoZXNlY3Rpb259e0FwcGVuZGl4Ln0NClxzZWN0aW9ue0V4dGVuc2lvbiB0byB0aGUgSW52ZXJzaW9uIA0Kb2YgVG9lcGxpdHotbGlrZSwgDQpWYW5kZXJtb25kZS1saWtlLCBhbmRcIA0KQ2hlYnlzaGV2LVZhbmRlcm1vbmRlLWxpa2UgTWF0cmljZXN9DQpMZXQgJFYkIGJlIGFuICRuXHRpbWVzIG4kIA0KVmFuZGVybW9uZGUtbGlrZSBtYXRyaXggc3VjaCB0aGF0DQokJFxuYWJsYV97XHtEX3sxL3h9LFpfMV5UXH19KFYpPQ0KRF97MS94fVYtVlpfMV5UPUdCXlRcICwkJA0Kd2hlcmUgJEdcaW4ge1xiZiBDfV57blx0aW1lcyBcYmV0YX0sXCBCDQpcaW4ge1xiZiBDfV57blx0aW1lcyBcYmV0YX0kLiBUaGVuLCBkdWUgDQp0byBhIHJlc3VsdA0KZnJvbSBcY2l0ZXtna299LCAkQz1WRl4qJCBpcyBhIA0KQ2F1Y2h5LWxpa2UgbWF0cml4IHN1Y2ggdGhhdA0KJCRcbmFibGFfe1x7RF97MS94fSxEXzFeKlx9fShWRl4qKT1HSF5UXCAsJCQNCndoZXJlICAkWl8xICQgaXMgZGVmaW5lZCBieSAoMS40KSBmb3IgJGY9MSQsIA0KJCRaXzE9XHBtYXRyaXh7JjAmMSYwJlxjZG90cyYwJlxjcg0KJjAmMCYxJlxjZG90cyYwJlxjcg0KJlx2ZG90cyZcdmRvdHMmXHZkb3RzJlxkZG90cyZcdmRvdHMmXGNyDQomMCYwJjAmXGNkb3RzJjEmXGNyDQomMSYwJjAmXGNkb3RzJjAmfVwgLCQkDQokJEheVD1CXlRGXipcICxccXF1YWQNCkRfezEveH09ZGlhZyBccG1hdHJpeHtcIHsxXG92ZXIgeF8xfSwNClxjZG90cyx7MVxvdmVyIHhfbn1cIH0sJCQNCiQkRF8xXio9ZGlhZyBccG1hdHJpeHtcIDEsZV57LXsyXHBpIGlcb3ZlciBufX0sXGNkb3RzLA0KZV57LXsyXHBpIGlcb3ZlciBufShuLTEpfVwgfVwgLFxxcXVhZA0KRj17MVxvdmVyIFxzcXJ0e259fVxsZWZ0W1xiZWdpbnthcnJheX17Y30gDQplXnt7MlxwaSBpXG92ZXIgbn0oay0xKShqLTEpfQ0KXGVuZHthcnJheX0gXHJpZ2h0XV97ayxqPTF9Xm5cICwkJCANCnNvIHRoYXQgJEYkIHN0YW5kcyBmb3IgdGhlICggbm9ybWFsaXplZCApIA0KbWF0cml4IG9mIERpc2NyZXRlIEZvdXJpZXIgVHJhbnNmb3JtDQooIERGVCApLCBhbmQgJEZeKiQgaXMgdGhlIEhlcm1pdGlhbiANCnRyYW5zcG9zZSBvZiB0aGUgbWF0cml4ICRGJCwgDQokRl4qPUZeey0xfSQsICR8fEZ8fD18fEZeKnx8PVxzcXJ0e259LiQNCg0KTGV0ICRYXzAsXCBDLCQgYW5kICRcdGhldGEkIHNhdGlzZnkgdGhlIA0KYXNzdW1wdGlvbnMgb2YgY29yb2xsYXJ5IDQuMS4gDQpMZXQgJFxlcHNpbG9uPVxlcHNpbG9uXiovIFxzcXJ0e259JCANCmFuZCBsZXQgJFhfe2teKn1eKiQgZGVub3RlIHRoZSBtYXRyaXggDQpvYnRhaW5lZCBpbiAka14qKzEkIHN0ZXBzICgyLjUpLCAoMi42KSANClsgZm9yICRrXiokIGRlZmluZWQgYnkgKDQuMTYpIF0gDQphdCB0aGUgYXJpdGhtZXRpYyBjb21wdXRhdGlvbmFsIA0KY29zdCAkTyhrXipcYmV0YV4yIG5cbG9nXjIgbikuJA0KVGhlbiB3ZSBoYXZlDQokJHx8XCAoVkZeKileey0xfS1YX3trXiorMX1eKlwgfHw8XGVwc2lsb24gXHNxcnR7bn0uJCQNCg0KU2ltaWxhcmx5LCBjb25zaWRlciBhIENoZWJ5c2hldi1WYW5kZXJtb25kZS1saWtlIA0KbWF0cml4ICRSJCwgd2hpY2ggaGFzIA0KZ2VuZXJhdG9ycyAkRyxcIEIkIHN1Y2ggdGhhdA0KJCRcbmFibGFfe1x7MkRfeCxaXzErWl8xXlRcfX0oUikNCj0yRF94Ui1SKFpfMStaXzFeVCk9R0JeVCwNClxxcXVhZCBHLFwgQlxpbiBDXntcYmV0YSBcdGltZXMgbn0uJCQNCkJ5IHRoZSB2aXJ0dWUgb2YgYSByZXN1bHQgZnJvbSBcY2l0ZXtrb30sIA0KJEM9UkZeKiQgaXMgYSBDYXVjaHktbGlrZSBtYXRyaXgNCnN1Y2ggdGhhdA0KJCRcbmFibGFfe1x7MkRfeCxEX3tjb3N9XH19KFJGXiopPQ0KMkRfeFJGXiotUkZeKkRfe2Nvc309R0JeVEZeKiwkJA0Kd2hlcmUgJEYsXCBEX3gkLCBhbmQgXCAkWl8xJCBhcmUgDQphcyBhYm92ZSwgYW5kDQokJERfe2Nvc309ZGlhZ1xwbWF0cml4e1wgMiwyY29zKHtccGlcb3ZlciBufSksDQpcY2RvdHMsMmNvcyh7KG4tMSlccGlcb3ZlciBufSlcIH0uJCQNCkJ5IHVzaW5nIHRoZSBsYXR0ZXIgZXF1YXRpb25zLCANCndlIG1heSBleHRlbmQgdGhlIGludmVyc2lvbiBvZiANCiRDJCB0byB0aGUgDQppbnZlcnNpb24gb2YgJFIkLCBzaW1pbGFybHkgdG8gDQp0aGUgY2FzZSBvZiBhIFZhbmRlcm1vbmRlLWxpa2UgbWF0cml4ICRWJC4NCg0KRmluYWxseSwgd2UgcmVjYWxsIGhvdyB0byByZWR1Y2UgDQp0aGUgaW52ZXJzaW9uIG9mIFRvZXBsaXR6LWxpa2UgbWF0cmljZXMgdG8gDQp0aGUgQ2F1Y2h5LWxpa2UgY2FzZS4gXFwNCntcYmYgUHJvcG9zaXRpb24gNS4xfSANClxjaXRle2drb30uIHtcZW0gTGV0ICRUXGluIHtcYmYgQ31ee25cdGltZXMgbn0kIA0KYmUgYSBUb2VwbGl0ei1saWtlIG1hdHJpeCwgc3VjaCB0aGF0DQokJFxuYWJsYV97XHtaXzEsWl97LTF9XH19KFQpPVpfMVQtVFpfey0xfT1HQl5ULCQkDQp3aGVyZSAkR1xpbiB7XGJmIEN9XntuXHRpbWVzICBcYmV0YX0kIA0KYW5kICRCXGluIHtcYmYgQ31ee25cdGltZXMgXGJldGF9JC4gVGhlbiwNCiRDPUZURF8wXnstMX1GXiokIGlzIGEgQ2F1Y2h5LWxpa2UgDQptYXRyaXg6DQokJFxuYWJsYV97XHtEXzEsRF97LTF9XH19KEZURF8wXnstMX1GXiopDQo9RF8xKEZURF8wXnstMX1GXiopLShGVERfMF57LTF9Rl4qKURfey0xfQ0KPVxoYXR7R30gSF5ULiQkDQpIZXJlLCAkRF97LTF9LFwgRixcIEZeKiQsIGFuZCAkWl8xJCANCmFyZSBkZWZpbmVkIGFib3ZlLH0NCiQkRF8xPWRpYWcoXCAxLCBlXnsyXHBpIGkgXG92ZXIgbn0sDQpcY2RvdHMsIGVee3syXHBpIGlcb3ZlciBufShuLTEpfVwgKSwNClxxcXVhZCBEXzA9ZGlhZyhcIDEsIGVee1xwaSBpXG92ZXIgbn0sIA0KXGNkb3RzLCBlXnsobi0xKVxwaSBpXG92ZXIgbn1cICksJCQNCiQkXGhhdHtHfT1GR1wgLFxxdWFkIGFuZCBccXVhZCBcaGF0e0h9XlQNCj1CXlREXzBeey0xfUZeKlwgLiQkDQoNClN1cHBvc2UgdGhhdCAkWF8wLFwgQz1GVERfMF57LTF9Rl4qJCwgYW5kICRcdGhldGEgJCANCnNhdGlzZnkgdGhlIGFzc3VtcHRpb25zIG9mIA0KY29yb2xsYXJ5IDQuMSwgbGV0ICRcZXBzaWxvbj1cZXBzaWxvbl4qLyBcc3FydHtufSQsIA0KYW5kIGxldCAkWF97a14qKzF9XiokIGRlbm90ZSB0aGUgbWF0cml4DQpvYnRhaW5lZCBpbiAka14qKzEkIHN0ZXBzICgyLjUpLCAoMi42KSwgDQpmb3IgJGteKiQgb2YgKDQuMTYpIGFuZCBzdWNoIHRoYXQNCiQkfHxcIENeey0xfS1YX3trXip9XipcIHx8XGxlIFxlcHNpbG9uIC8gbi4kJCANClRoZW4sIHdlIGhhdmUNCiQkfHxcIChcIEZURF8wXnstMX1GXipcICleey0xfS1YX3trXiorMX1eKlwgfHxcbGUgDQpcZXBzaWxvbiAvbi4kJCANCldlIGhhdmUgJFxxcXVhZCAoRlREXzBeey0xfUZeKileey0xfT1GRF8wVF57LTF9Rl4qXCAsJA0KJCRGXipEXzBeey0xfVwgW1wgKEZURF8wXnstMX1GXiopXnstMX0tWF97a14qKzF9XipcIF1cIEYNCj1UXnstMX0tRl4qRF8wXnstMX1YX3trXiorMX1eKkZcIC4kJA0KVGhlcmVmb3JlLCBieSB3cml0aW5nIA0KJFxoYXR7WH1fe2teKisxfT1GXipEXzBeey0xfVhfe2teKisxfV4qRiQsIA0Kd2Ugb2J0YWluIHRoYXQNCiQkfHxcIFReey0xfS1caGF0e1h9X3trXiorMX1cIHx8XGxlIHx8Rl4qfHxcIA0KfHxEXzBeey0xfXx8XCB8fEZ8fFwgDQpcZXBzaWxvbi9uPVxlcHNpbG9uXCAsXCB7XHJtIHNpbmNlfVwgfHxEXzBeey0xfXx8PTEsXCANCnx8Rnx8PXx8Rl4qfHw9XHNxcnR7bn1cIC4kJA0KVGh1cywgaW4gJGteKisxJCBzdGVwcyAoMi41KSwgKDIuNikgLCANCmF0IHRoZSBhcml0aG1ldGljIA0KY29tcHV0YXRpb25hbCBjb3N0ICRPKGteKlxiZXRhXjJuXGxvZ14yIG4pJCwgDQp3ZSB3aWxsIGFycml2ZSBhdCBhIGRlc2lyZWQgDQptYXRyaXggJFxoYXR7WH1fe2teKisxfT1GXipEXzBeey0xfVhfe2teKn1eKkYkIA0KYXBwcm94aW1hdGluZyAkVF57LTF9JCB3aXRoaW4NCnRoZSBlcnJvciBub3JtIGJvdW5kICRcZXBzaWxvbiQuDQoNCkluIGZhY3QsIHRoZSBhbGdvcml0aG0gb2YgdGhlIHByZXNlbnQgcGFwZXIgZm9yIENhdWNoeS1saWtlIA0KaW52ZXJzaW9uIGV4dGVuZHMgdGhlIGFsZ29yaXRobSBvZiBbUDkzXSBmb3IgVG9lcGxpdHotbGlrZQ0KaW52ZXJzaW9uLiBBcHBsaWNhdGlvbiBvZiBvdXIgcHJlc2VudCBhbGdvcml0aG0gdG8gDQpUb2VwbGl0ei1saWtlIGludmVyc2lvbiBiYXNlZCBvbiBwcm9wb3NpdGlvbiA1LjEgaGFzIHNvbWUNCmFkdmFudGFnZXMgb3ZlciB0aGUgZGlyZWN0IHNvbHV0aW9uLCBieSBtZWFucyBvZg0KdGhlIGFsZ29yaXRobSBvZiBbUDkzXS4gTmFtZWx5LCBtb2RpZmljYXRpb24gb2YgTmV3dG9uJ3MNCml0ZXJhdGlvbiBvZiAoMi41KS0oMi44KSBpbiB0aGUgVG9lcGxpdHotbGlrZSBjYXNlIHJlcXVpcmVzDQphbiBhZGRpdGlvbmFsIG5vbnJhdGlvbmFsIHN0YWdlIG9mIGNvbXB1dGluZyB0aGUgc2luZ3VsYXIgDQp2YWx1ZSBkZWNvbXBvc2l0aW9ucyBvZiB0aGUgcHJvZHVjdCAkR0heVCQgb2YgdGhlIGdlbmVyYXRvcg0KbWF0cmljZXMgJEckIGFuZCAkSCQgZm9sbG93ZWQgYnkgdGhlIHRydW5jYXRpb24gYnkgemVyb2luZyB0aGUNCnNtYWxsZXIgc2luZ3VsYXIgdmFsdWVzIChjZi4gW1A5M2FdKS4gU3VjaCBhIG5vbnJhdGlvbmFsDQpzdGFnZSBpbnZvbHZlcyBzb21lIGFkZGl0aW9uYWwgY29tcHV0YXRpb25zIGFuZCBpbXBsaWVzIGFuDQppbmNyZWFzZSBvZiB0aGUgYXBwcm94aW1hdGlvbiBlcnJvciBub3JtIGJvdW5kIGJ5IGZhY3RvcnMNCm9mIG9yZGVyICRcYmV0YSBuJCBhdCBlYWNoIHJlY3Vyc2l2ZSBzdGVwLCB3aGVyZSAkXGJldGEkDQpkZW5vdGVzIHRoZSBsZW5ndGggb2YgdGhlIGRpc3BsYWNlbWVudCBnZW5lcmF0b3Igb2YNCnRoZSBpbnB1dCBtYXRyaXguIFRvIGNvbXBlbnNhdGUgZm9yIHN1Y2ggYW4gZXJyb3Igbm9ybSANCmluY3JlYXNlLCBvbmUgbmVlZHMgdG8gcGVyZm9ybSBzb21lIGV4dHJhIE5ld3RvbidzIHN0ZXBzLA0KYW5kIHRoaXMgbWF5IHN1YnN0YW50aWFsbHkgc2xvdyBkb3duIG9yIGV2ZW4gcnVpbiB0aGUNCmNvbnZlcmdlbmNlIHVubGVzcyB0aGUgcmVxdWlyZWQgYm91bmQgb24gdGhlIGluaXRpYWwNCmFwcHJveGltYXRpb24gZXJyb3IgaXMgc3RyZW5ndGhlbmVkLCByZXNwZWN0aXZlbHkuDQpPdXIgbmV3IENhdWNoeS1saWtlIG1vZGlmaWNhdGlvbiBpcyBmcmVlIG9mIHN1Y2ggYWRkaXRpb25hbA0KcmVzdHJpY3Rpb25zLg0KDQpcc2VjdGlvbntSZWR1Y3Rpb24gZnJvbSBDYXVjaHktbGlrZSB0byBUb2VwbGl0ei1saWtlIEludmVyc2lvbn0NCkJ5IGZvbGxvd2luZyBbUDkwXSwgb25lIG1heSByZWR1Y2UgaW52ZXJzaW9uIG9mIGFueSBDYXVjaHktbGlrZQ0KbWF0cml4ICRDJCBvZiAoMi4yKSB0byB0aGUgaW52ZXJzaW9uIG9mIFZhbmRlcm1vbmRlIGFuZCANClRvZXBsaXR6LWxpa2UgbWF0cmljZXMuIExldCB1cyByZWNhbGwgc3VjaCBhIHJlZHVjdGlvbiANCihjZi4gW1A5MF0sIFtCUDk0XSwgW0dPXSkuIFdlIGhhdmUgdGhhdA0KJCRDPVYodF57LTF9KVRWXlQocyl+LFxlcW5vKDYuMSkkJA0Kd2hlcmUNCiQkVihxKT1ccG1hdHJpeHsmMSZxXzAmXGNkb3RzJnFfMF57bi0xfSZcY3INCiAgICAgICAgICAgICAgICAmXHZkb3RzJlx2ZG90cyZcdmRvdHMmXHZkb3RzJlxjcg0KICAgICAgICAgICAgICAgICYxJnFfMCZcY2RvdHMmcV8wXntuLTF9Jn0kJA0KKGZvciAkcT0ocV9pKV97aT0wfV57bi0xfSQpIGlzIGEgVmFuZGVybW9uZGUgbWF0cml4LA0KJFQkIGlzIGEgVG9lcGxpdHotbGlrZSBtYXRyaXgsIHN1Y2ggdGhhdCANCiQkXERlbHRhX3tce1pfe1x2YXJwaGl9LFpfezEvXHZhcnBoaX1cfX0oVCkNCj1ULVpfe1x2YXJwaGl9VFpfezEvXHZhcnBoaX1eVD1cb3ZlcmxpbmV7R31cb3ZlcmxpbmV7SH1eVA0KPVtcb3ZlcmxpbmV7Z31fMSxcY2RvdHMsXG92ZXJsaW5le2d9X3tcYWxwaGErMn1dDQpbXG92ZXJsaW5le2h9XzEsXGNkb3RzLFxvdmVybGluZXtofV97XGFscGhhKzJ9XV5UfiwkJA0KW2NmLiAoMS4xKV07DQokJFxvdmVybGluZXtnfV9tPVZeey0xfSh7MVxvdmVyIHR9KWdfbSx+fn5+DQpcb3ZlcmxpbmV7aH1fbT1WXnstMX0ocyloX20sfn5+fg0KbT0xLDIsXGNkb3RzLFxhbHBoYTskJA0KJCRbZ18xLFxjZG90cyxnX3tcYWxwaGF9XT1EX3sxXG92ZXIgdH0NClt6XzEsXGNkb3RzLHpfbl1eVDskJA0KJCRbaF8xLFxjZG90cyxoX3tcYWxwaGF9XT0NClt5XzEsXGNkb3RzLHlfbl1eVCwkJA0KJCRcb3ZlcmxpbmV7Z31fe1xhbHBoYSsxfT0tdi1cdmFycGhpIGVfMCx+fn5+DQpcb3ZlcmxpbmV7aH1fe1xhbHBoYSsxfQ0KPVxQaGlfe1xnYW1tYX1WXnstMX0ocylDXnstMX1WXnstVH0oezFcb3ZlciB0fSllX3tuLTF9fiwkJA0KJCRcb3ZlcmxpbmV7Z31fe1xhbHBoYSsyfQ0KPVpfe1x2YXJwaGl9Vl57LTF9KHsxXG92ZXIgdH0pQ1Zeey1UfShzKSBlX3tuLTF9LH5+fn4NClxvdmVybGluZXtofV97XGFscGhhKzJ9PS1cZ2FtbWEtezFcb3ZlciBcdmFycGhpfWVfMH5+LCQkDQokJFAoXGxhbWJkYSk9XHByb2Rfe2k9MH1ee24tMX0oXGxhbWJkYS1zX2kpDQo9XGxhbWJkYV5uK1xzdW1fe2k9MH1ee24tMX1cZ2FtbWFfaSBcbGFtYmRhXmksfn5+fg0KXGdhbW1hPShcZ2FtbWFfaSlfe2k9MH1ee24tMX1+LCQkDQokJFUoXGxhbWJkYSk9XHByb2Rfe2k9MH1ee24tMX0oXGxhbWJkYS17MVxvdmVyIHRfaX0pDQo9XGxhbWJkYV5uK1xzdW1fe2k9MH1ee24tMX0gdl9pIFxsYW1iZGFeaSx+fn5+DQp2PSh2X2kpX3tpPTB9XntuLTF9fiwkJA0KDQokJFxQaGlfe1xnYW1tYX09XHBtYXRyaXh7JjAmMCZcY2RvdHMmMCYtXGdhbW1hXzAmXGNyDQogICAgICAgICAgICAgICAgICAgICAgICAgJjEmMCZcY2RvdHMmMCYtXGdhbW1hXzEmXGNyDQogICAgICAgICAgICAgICAgICAgICAgICAgJlx2ZG90cyZcZGRvdHMmXGRkb3RzJlx2ZG90cyZcdmRvdHMmXGNyDQogICAgICAgICAgICAgICAgICAgICAgICAgJjAmMCZcY2RvdHMmMSYtXGdhbW1hX3tuLTF9Jn0kJA0KaXMgdGhlIEZyb2Jlbml1cyAoY29tcGFuaW9uKSBtYXRyaXggb2YgdGhlIHBvbHlub21pYWwNCiRQKFxsYW1iZGEpJCwgd2l0aCBjb2VmZmljaWVudHMgJFxnYW1tYV9pLH5pPTAsMSxcY2RvdHMsbi0xJC4NCg0KRHVlIHRvICg2LjEpLCB3ZSBoYXZlDQokJENeey0xfT1WXnstVH0ocylUXnstMX1WXnstMX0odF57LTF9KX4sXGVxbm8oNi4yKSQkDQp3aGljaCwgaW4gcHJpbmNpcGxlLCByZWR1Y2VzIENhdWNoeS1saWtlIGludmVyc2lvbiB0bw0KVG9lcGxpdHotbGlrZSBpbnZlcnNpb24gYW5kIFZhbmRlcm1vbmRlIGNvbXB1dGF0aW9ucywNCmFzIHByb21pc2VkLiBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgaG93ZXZlciwgd2UgY29tbWVudGVkDQpvbiBzb21lIGFkdmFudGFnZXMgb2Ygb3VyIHByZXNlbnQgbW9kaWZpY2F0aW9uIG9mDQpOZXd0b24ncyBpdGVyYXRpb24gaW4gdGhlIENhdWNoeS1saWtlIGNhc2Ugb3ZlciB0aGUga25vd24NCm9uZSBpbiB0aGUgVG9lcGxpdHotbGlrZSBjYXNlLiBJbnZvbHZlbWVudCBvZiBvcGVyYXRpb25zIHdpdGgNClZhbmRlcm1vbmRlIG1hdHJpY2VzIGlzIGFuIGFkZGl0aW9uYWwgYnVyZGVuIGluIHRoZSBsYXR0ZXINCmNhc2U7IGZ1cnRoZXJtb3JlLCBudW1lcmljYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIA0KVmFuZGVybW9uZGUgaW52ZXJzaW9uIHN0YWdlIGlzIGhhcmQgc2luY2UgVmFuZGVybW9uZGUgbWF0cmljZXMNCmFyZSBrbm93biB0byBiZSBpbGwtY29uZGl0aW9uZWQgKGNmLiBbR0ldIGFuZCBbR09dLCBlcXVhdGlvbiAoMy41KSksDQp1bmxpa2UgdGhlIEZvdXJpZXIgdHJhbnNmb3JtIG1hdHJpY2VzICRGJCBvZiBzZWN0aW9uIDUgDQooY2YuIFtCUF0sIHByb3Bvc2l0aW9uIDMuNC4xKS4NCg0KXHNlY3Rpb257RGlzY3Vzc2lvbn0NClRoZSBwcm9wb3NlZCBhbGdvcml0aG1zIGZvciBDYXVjaHktbGlrZSBpbnZlcnNpb24gYXJlIG5vdCBjb21wbGV0ZTsNCnRoZXkgc2hvdWxkIGJlIGNvbXBsZW1lbnRlZCBieSBzb21lIHJlY2lwZXMgZm9yIG9idGFpbmluZyBpbml0aWFsDQphcHByb3hpbWF0aW9ucyAkWF8wJCwgd2hpY2ggc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGluIG9yZGVyIHRvDQpndWFyYW50ZWUgc3VmZmljaWVudGx5IGZhc3QgY29udmVyZ2VuY2UsIGFzIHdlIGVzdGltYXRlZCBpbiBzZWN0aW9uIDQuDQpJbiBzb21lIGNhc2VzLCBhIGdvb2QgaW5pdGlhbCBhcHByb3hpbWF0aW9uIGlzIHJlYWRpbHkgYXZhaWxhYmxlLA0KZm9yIGluc3RhbmNlLCBpZiB0aGUgb3JpZ2luYWwgbWF0cml4IGFyaXNlcyBmcm9tIGRpc2NyZXRpemF0aW9uIG9mDQpkeW5hbWljYWxseSB2YXJ5aW5nIGlucHV0IHBhcmFtZXRlcnMgYW5kIGlmIHRoZSBvYmplY3RpdmUgaXMgdG8NCm1haW50YWluIHRoZSBvcmlnaW5hbGx5IGF2YWlsYWJsZSBzb2x1dGlvbi4gUHJlc2VudGx5LCBob3dldmVyLA0Kd2UgaGF2ZSBubyByZWNpcGVzIGZvciByYXBpZCBjb21wdXRhdGlvbiBvZiB0aGUgaW5pdGlhbA0KYXBwcm94aW1hdGlvbnMgZm9yIHRoZSBnZW5lcmFsIGNhc2UgaW5wdXQsIHNvIHRoYXQgb3VyIHByZXNlbnQNCnBhcGVyIG9ubHkgc3VwcGxpZXMgb25lIGhhbGYgb2YgYSBzb2x1dGlvbiwgbGVhdmluZyB0aGUgaW5pdGlhbA0KZ3Vlc3MgcHJvYmxlbSBvcGVuLiBBIHBvc3NpYmxlIGRpcmVjdGlvbiB0b3dhcmRzIGZpbGxpbmcgdGhpcw0KZ2FwIGlzIGJ5IGV4dGVuZGluZyB0aGUgaG9tb3RvcHkgYXBwcm9hY2ggb2YgW1A5Ml0sIG9yaWdpbmFsbHkNCmRldmVsb3BlZCBmb3IgdGhlIFRvZXBsaXR6LWxpa2UgY2FzZS4gQWNjb3JkaW5nIHRvIHRoaXMgYXBwcm9hY2gsDQpvbmUgZmlyc3QgYXBwcm94aW1hdGVzIHRoZSBpbnZlcnNlIG9mIGEgbmVhcmJ5IFRvZXBsaXR6LWxpa2UgDQptYXRyaXggd2hvc2UgaW52ZXJzaW9uIGlzIHNpbXBsZS4gVGhlbiwgb25lIHJlY3Vyc2l2ZWx5IHVzZXMNCnRoZSBjb21wdXRlZCBhcHByb3hpbWF0aW9ucyBhcyB0aGUgaW5pdGlhbCBhcHByb3hpbWF0aW9ucyANCiRYXzAkIHRvIHRoZSBpbnZlcnNlcyBvZiB0aGUgbmVhcmJ5IG1hdHJpY2VzIGluIHRoZWlyIGhvbW90b3BpYw0KdHJhbnNmb3JtYXRpb24gdG8gdGhlIG9yaWdpbmFsIG1hdHJpeC4gSW4gW1A5Ml0sIHRoaXMgYXBwcm9hY2gNCndhcyBzcGVjaWZpZWQgYW5kIG1hZGUgZWZmZWN0aXZlIGZvciBhbnkgd2VsbC1jb25kaXRpb25lZA0KVG9lcGxpdHotbGlrZSBpbnB1dCBtYXRyaXguDQoNCg0KXG5ld3BhZ2UNCg0KXGJlZ2luIHt0aGViaWJsaW9ncmFwaHl9e0NLTC1BfQ0KDQpcYmliaXRlbVtCUF17YnB9IEQuIEJpbmkgYW5kIFYuIFkuIFBhbiwNCntcZW0gUG9seW5vbWlhbCBhbmQgTWF0cml4IENvbXB1dGF0aW9ucywgDQpWb2x1bWUgMTogRnVuZGFtZW50YWwgQWxnb3JpdGhtc30sDQpCaXJraGFldXNlciwgQm9zdG9uLCAxOTk0Lg0KDQpcYmliaXRlbVtDS0wtQV17Y2tsLWF9IEouIENodW4sIA0KVC4gS2FpbGF0aCwgYW5kIEguIExldi1BcmksDQpGYXN0IFBhcmFsbGVsIEFsZ29yaXRobSBmb3IgDQpRUi1mYWN0b3JpemF0aW9uIG9mIFN0cnVjdHVyZWQgTWF0cmljZXMsDQp7XGVtIFNJQU0gSi4gU2NpLiBTdGF0LiBDb21wdXQufSwgDQo4LCA2LCBwcC5+ODk5LTkxMywgMTk4Ny4NCg0KXGJpYml0ZW1bR0tLXXtna2t9IEkuIEdvaGJlcmcsIFQuIEthaWxhdGgsIA0KYW5kIEkuIEtvbHRyYWNodCwNCkVmZmljaWVudCBTb2x1dGlvbiBvZiBMaW5lYXIgU3lzdGVtcyBvZiANCkVxdWF0aW9ucyB3aXRoIFJlY3Vyc2l2ZSBTdHJ1Y3R1cmUsIA0Ke1xlbSBMaW5lYXIgQWxnZWJyYSBBcHBsLix9IDgwLCBwcC5+ODEtMTEzLCAxOTg2Lg0KDQpcYmliaXRlbVtHS0tMXXtna2tsfSBJLiBHb2hiZXJnLCBULiANCkthaWxhdGgsIEkuIEtvbHRyYWNodCwgYW5kIFAuIExhbmNhc3RlciwNCkxpbmVhciBDb21wbGV4aXR5IFBhcmFsbGVsIEFsZ29yaXRobXMgDQpmb3IgTGluZWFyIFN5c3RlbXMgb2YgRXF1YXRpb25zIHdpdGggDQpSZWN1cnNpdmUgU3RydWN0dXJlLCB7XGVtIExpbmVhciBBbGdlYnJhIA0KQXBwbC4sfSA4OC84OSwgcHAufjI3MS0zMTUsIDE5ODcuDQoNClxiaWJpdGVtW0dJXXtnaX0gVy4gR2F1dHNjaGkgYW5kIEcuIEluZ2xlc2UsIExvd2VyIA0KQm91bmRzIGZvciB0aGUgQ29uZGl0aW9uIE51bWJlciBvZiBWYW5kZXJtb25kZQ0KTWF0cmljZXMsIHtcZW0gTnVtZXJpc2NoZSBNYXRoLiwgfSA1MiwgMjQxLTI1MCwgMTk4OC4NCg0KXGJpYml0ZW1bR0tPXXtna299ICBJLiBHb2hiZXJnLCBULiBLYWlsYXRoLCANCmFuZCBWLiBPbHNoZXZza3ksIA0KRmFzdCBHYXVzc2lhbiBFbGltaW5hdGlvbiB3aXRoIFBhcnRpYWwgDQpQaXZvdGluZyBmb3IgTWF0cmljZXMgd2l0aCANCkRpc3BsYWNlbWVudCBTdHJ1Y3R1cmUsIHtcZW0gc3VibWl0dGVkIA0KZm9yIHB1YmxpY2F0aW9ufSwgMTk5NC4NCg0KXGJpYml0ZW1bR0xde2dsfSBHLiBILiBHb2x1YiBhbmQgQy4gRi4gVmFuIExvYW4sDQp7XGVtIE1hdHJpeCBDb21wdXRhdGlvbnN9LCBKb2hucyBIb3BraW5zIA0KVW5pdi4gUHJlc3MsIEJhbHRpbW9yZSwgTWFyeWxhbmQsDQoxOTg5Lg0KDQpcYmliaXRlbVtHT117Z299IEkuIEdvaGJlcmcgYW5kIFYuIE9sc2hldnNreSwNCkNvbXBsZXhpdHkgb2YgTXVsdGlwbGljYXRpb24gd2l0aCBWZWN0b3JzIGZvciANClN0cnVjdHVyZWQgTWF0cmljZXMsDQp7XGVtIExpbmVhciBBbGdlYnJhIEFwcGwufSwgMjAyLCBwcC5+MTYzLTE5MiwgMTk5NC4NCg0KXGJpYml0ZW1bR08xXXtnbzF9IEkuIEdvaGJlcmcgYW5kIFYuIE9sc2hldnNreSwNCkZhc3QgSW52ZXJzaW9uIG9mIENoZWJ5c2hldi1WYW5kZXJtb25kZSBNYXRyaWNlcywNCntcZW0gTnVtZXIuIE1hdGgufSwgNjcsIDEsIHBwLn43MS05MiwgMTk5NC4NCg0KXGJpYml0ZW1bSF17aH0gRy4gSGVpbmlnLCANCkludmVyc2lvbiBvZiBHZW5lcmFsaXplZCBDYXVjaHkgTWF0cmljZXMgDQphbmQgdGhlIE90aGVyIENsYXNzZXMgb2YgU3RydWN0dXJlZA0KTWF0cmljZXMsDQp7XGVtIExpbmVhciBBbGdlYnJhIGZvciBTaWduYWwgUHJvY2Vzc2luZywgDQpJTUEgVm9sdW1lIGluIE1hdGguIGFuZCANCkl0cyBBcHBsaWNhdGlvbnN9LCA2OSwgcHAufjk1LTExNCwgU3ByaW5nZXIsIDE5OTQuDQoNClxiaWJpdGVtW0hSXXtocn0gSC4gSGVpbmlnIGFuZCBLLiBSb3N0LA0Ke1xlbSBBbGdlYnJhaWMgTWV0aG9kcyBmb3IgVG9lcGxpdHotbGlrZSANCk1hdHJpY2VzIGFuZCBPcGVyYXRvcnMsIA0KT3BlcmF0b3IgVGhlb3J5fSwgMTMsIEJpcmtoYWV1c2VyLCAxOTg0Lg0KDQpcYmliaXRlbVtLS01de2trbX0gVC4gS2FpbGF0aCwgUy4tWS4gS3VuZywgYW5kIE0uIE1vcmYsDQpEaXNwbGFjZW1lbnQgUmFua3Mgb2YgTWF0cmljZXMgYW5kIExpbmVhciBFcXVhdGlvbnMsDQp7XGVtIEouIE1hdGguIEFuYWwuIEFwcGwufSwgNjgsIDIsIHBwLn4zOTUtNDA3LCAxOTc5Lg0KDQpcYmliaXRlbVtLT117a299ICBULiBLYWlsYXRoIGFuZCBWLiBPbHNoZXZza3ksDQpEaXNwbGFjZW1lbnQgU3RydWN0dXJlIEFwcHJvYWNoIHRvIA0KQ2hlYnlzaGV2LVZhbmRlcm1vbmRlIGFuZCBSZWxhdGVkIE1hdHJpeCwNCntcZW0gc3VibWl0dGVkIGZvciBwdWJsaWNhdGlvbn0sIDE5OTQuDQoNClxiaWJpdGVtW0tTXXtrc30gVC4gS2FpbGF0aCBhbmQgQS4gU2F5ZWQsDQpEaXNwbGFjZW1lbnQgU3RydWN0dXJlOiBUaGVvcnkgYW5kIEFwcGxpY2F0aW9ucywNCntcZW0gU0lBTSBSZXZpZXd9LCAzNywgMywgMjk3LTM4NiwgMTk5NS4NCg0KXGJpYml0ZW1bS1ZNXXtrdm19IFQuIEthaWxhdGgsIEEuIFZpZXJhLCANCmFuZCBNLiBNb3JmLA0KSW52ZXJzZXMgb2YgVG9lcGxpdHogT3BlcmF0b3JzLCBJbm5vdmF0aW9ucywgDQphbmQgT3J0aG9nb25hbCBQb2x5bm9taWFscywNCntcZW0gU0lBTSBSZXZpZXd9LCAyMCwgMSwgcHAufjEwNi0xMTksIDE5NzguDQoNClxiaWJpdGVtW1A5MF17cDkwfSBWLiBZLiBQYW4sDQpDb21wdXRhdGlvbnMgd2l0aCBEZW5zZSBTdHJ1Y3R1cmVkIE1hdHJpY2VzLA0Ke1xlbSBNYXRoLiBvZiBDb21wdXRhdGlvbn0sIDU1LCBwcC4xNzktMTkwLCAxOTkwLg0KDQpcYmliaXRlbVtQOTJde3A5Mn0gVi4gWS4gUGFuLA0KUGFyYWxsZWwgU29sdXRpb24gb2YgVG9lcGxpdHotbGlrZSBMaW5lYXIgU3lzdGVtcywNCntcZW0gSi4gb2YgQ29tcGxleGl0eX0sIDgsIHBwLn4xLTIxLCAxOTkyLg0KDQpcYmliaXRlbVtQOTNde3A5M30gVi4gWS4gUGFuLA0KQ29uY3VycmVudCBJdGVyYXRpdmUgQWxnb3JpdGhtcyBmb3IgDQpUb2VwbGl0ei1saWtlIExpbmVhciBTeXN0ZW1zLA0Ke1xlbSBJRUVFIFRyYW5zLiBvbiBQYXJhbGxlbCBhbmQgRGlzdHJpYnV0aXZlIFN5c3RlbXN9LCANCjQsIDUsIHBwLn41OTItNjAwLCAxOTkzLg0KDQpcYmliaXRlbVtQOTNhXXtwOTNhfSBWLiBZLiBQYW4sDQpEZWNyZWFzaW5nIHRoZSBEaXNwbGFjZW1lbnQgUmFuayBvZiBhIE1hdHJpeCwNCntcZW0gU0lBTSBKLiBNYXRyaXggQW5hbC4gQXBwbC59LCAxNCwgMSwgcHAufjExOC0xMjEsIDE5OTMuDQoNClxiaWJpdGVtW1dde3d9IEQuIEguIFdvb2QsDQpQcm9kdWN0IFJ1bGVzIGZvciB0aGUgRGlzcGxhY2VtZW50IG9mIE5lYXItVG9lcGxpdHogTWF0cmljZXMsDQp7XGVtIExpbmVhciBBbGdlYnJhIEFwcGwufSwgMTg4LCAxODksIHBwLn42NDEtNjYzLCAxOTkzLg0KDQpcZW5kIHt0aGViaWJsaW9ncmFwaHl9DQoNCg0KXGVuZHtkb2N1bWVudH0NCg0KDQoNCg==--0-1593265712-843887875=:19412--